diff --git a/gradle/settings.gradle b/gradle/settings.gradle
index 6a0b008d70a54913f1f98457bd2bab9e719a1fcb..300d8959f3325c8f592e1b05bc817a54ede19fbb 100644
--- a/gradle/settings.gradle
+++ b/gradle/settings.gradle
@@ -1,5 +1,5 @@
 includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
-    'datastore_server', 'screening', 'deep_sequencing_unit', 'rtd_yeastx',
-    'openbis_standard_technologies', 'installation', 'image_readers', 'ui-test', 'js-test', 'datamover',
-    'plasmid', 'rtd_cina', 'big_data_link_server', 'openbis_ng_ui', 'microservice_server_template',
-    'openbis_statistics_server', 'openbis_benchmark'
\ No newline at end of file
+        'datastore_server', 'screening', 'deep_sequencing_unit', 'rtd_yeastx',
+        'openbis_standard_technologies', 'installation', 'image_readers', 'ui-test', 'js-test', 'datamover',
+        'rtd_cina', 'big_data_link_server', 'openbis_ng_ui', 'microservice_server_template',
+        'openbis_statistics_server', 'openbis_benchmark'
\ No newline at end of file
diff --git a/installation/settings.gradle b/installation/settings.gradle
index 12be7850681587b97ba9f8c03725af0ea2db159a..9ab451cb9d2b3b5a8707519492a593353a2b8941 100644
--- a/installation/settings.gradle
+++ b/installation/settings.gradle
@@ -1,4 +1,4 @@
-includeFlat 'commonbase', 'common', 
-    'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 
-    'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'plasmid',
-    'openbis_standard_technologies', 'big_data_link_server', 'openbis_ng_ui', 'microservice_server_template'
+includeFlat 'commonbase', 'common',
+        'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
+        'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit',
+        'openbis_standard_technologies', 'big_data_link_server', 'openbis_ng_ui', 'microservice_server_template'
diff --git a/js-test/settings.gradle b/js-test/settings.gradle
index d6c54fa1f7181bca897f37a58740b5a3de3b6124..cd65fb91b8436fc378f3a3322d24bad7568dad1e 100644
--- a/js-test/settings.gradle
+++ b/js-test/settings.gradle
@@ -1,3 +1,3 @@
 includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 
-    'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'plasmid', 'openbis_standard_technologies',
+    'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'openbis_standard_technologies',
     'ui-test','screening'
diff --git a/openbis_standard_technologies/build.gradle b/openbis_standard_technologies/build.gradle
index cd7e954c06006fbe4265fb8cf476159faa778ec1..9e23780db5c75491607abec23d73d7381e2e43e4 100644
--- a/openbis_standard_technologies/build.gradle
+++ b/openbis_standard_technologies/build.gradle
@@ -39,7 +39,6 @@ evaluationDependsOn(':datastore_server')
 evaluationDependsOn(':screening')
 evaluationDependsOn(':rtd_yeastx')
 evaluationDependsOn(':deep_sequencing_unit')
-evaluationDependsOn(':plasmid')
 evaluationDependsOn(':big_data_link_server')
 evaluationDependsOn(':openbis_ng_ui')
 
@@ -84,7 +83,6 @@ dependencies {
 	datastore_server project(':deep_sequencing_unit'),
 					 project(':rtd_yeastx'),
 					 project(':screening'),
-					 project(':plasmid'),
 					 'bioformats:bioformats:6.5.1',
 					 'imagej:ij:1.43u',
 					 'cisd:cisd-openbis-knime-server:13.6.0.r29301',
diff --git a/openbis_standard_technologies/settings.gradle b/openbis_standard_technologies/settings.gradle
index 9fd3b7e8b5f85dcb197bbe1d42fd2835dffdb449..6db664969a29fd6824d3c95b9f9cbad32af3a575 100644
--- a/openbis_standard_technologies/settings.gradle
+++ b/openbis_standard_technologies/settings.gradle
@@ -1,3 +1,3 @@
-includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 
-    'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'plasmid', 'big_data_link_server',
-    'openbis_ng_ui', 'microservice_server_template'
+includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
+        'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'big_data_link_server',
+        'openbis_ng_ui', 'microservice_server_template'
diff --git a/plasmid/.gitignore b/plasmid/.gitignore
deleted file mode 100644
index 44068dcafbe222e53f75bbfc61d39d298754bcc5..0000000000000000000000000000000000000000
--- a/plasmid/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/targets
-/bin
-/build/
-/.idea/
-*.iml
-*.eml
\ No newline at end of file
diff --git a/plasmid/build.gradle b/plasmid/build.gradle
deleted file mode 100644
index f44d5fc9b25a0b74d2f9cf7b91bcf698101435f7..0000000000000000000000000000000000000000
--- a/plasmid/build.gradle
+++ /dev/null
@@ -1,68 +0,0 @@
-evaluationDependsOn(':commonbase')
-evaluationDependsOn(':common')
-evaluationDependsOn(':openbis_api')
-evaluationDependsOn(':openbis-common')
-evaluationDependsOn(':authentication')
-evaluationDependsOn(':dbmigration')
-evaluationDependsOn(':openbis')
-evaluationDependsOn(':datastore_server')
-
-apply from: '../gradle/javaproject.gradle'
-
-archivesBaseName = 'datastore_server_plugin-plasmid'
-
-dependencies {
-    api project(':datastore_server'),
-    		'openbis:openbis-mobile:r29271'
-            
-    testImplementation project(path: ':commonbase', configuration: 'tests'),
-                       project(path: ':common', configuration: 'tests'),
-                       project(path: ':dbmigration', configuration: 'tests'),
-                       project(path: ':authentication', configuration: 'tests'),
-                       project(path: ':openbis_api', configuration: 'tests'),
-                       project(path: ':openbis-common', configuration: 'tests'),
-                       project(path: ':datastore_server', configuration: 'tests'),
-                       'fjelmer:classycle:1.4.2',
-                       'testng:testng:6.8-CISD'
-    testImplementation (project(path: ':openbis', configuration: 'tests')) {
-        exclude group: 'google', module: 'gwt-user'
-    }
-}
-
-sourceSets {
-    main {
-        resources {
-            srcDirs = ['source/java']
-        }
-    }
-    test {
-        resources {
-            srcDirs = ['source/java']
-        }
-    }
-}
-
-jar {
-    duplicatesStrategy 'include'
-    manifest {
-        attributes("Main-Class": "ch.systemsx.cisd.plasmid.BuildAndEnvironmentInfo",
-                   "Version": versionNumber,
-                   "Build-Number": "${versionNumber} (r${revisionNumber},${cleanFlag})")
-    }
-    
-    from('targets/dist') {
-        include 'BUILD-*'
-    }
-}
-
-task plasmidZip(type: Zip) {
-	baseName 'datastore_server_plugin-plasmid'
-	from (jar.archivePath) {
-		into 'datastore_server/lib'
-	}
-    from('source/core-plugins') {
-		into 'core-plugins'
-    }
-    rename 'datastore_server_plugin-plasmid(.*)\\.jar', 'datastore_server_plugin-plasmid.jar'
-}
-build.dependsOn plasmidZip
diff --git a/plasmid/dist/etc/log.xml b/plasmid/dist/etc/log.xml
deleted file mode 100644
index f9104bc9f0a7755d3daa16d106cc174a8537b9a6..0000000000000000000000000000000000000000
--- a/plasmid/dist/etc/log.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="DEFAULT" class="org.apache.log4j.DailyRollingFileAppender">
-
-    <param name="File" value="log/datastore_server_log.txt"/>
-    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-    </layout>
-  
-  </appender>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
-
-    <param name="BufferSize" value="512" />
-    <param name="SMTPHost" value="localhost" />
-    <param name="From" value="datastore_server@localhost" />
-    <param name="To" value="root@localhost" />
-    <param name="Subject" value="ATTENTION: etl server" />
-    <param name="EvaluatorClass" value="ch.systemsx.cisd.common.logging.AlwaysTrueTriggeringEventEvaluator" />
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-    </layout>
-  
-    <!--filter class="org.apache.log4j.varia.LevelRangeFilter">
-      <param name="LevelMin" value="ERROR"/>
-      <param name="LevelMax" value="FATAL"/>
-    </filter-->
-  
-  </appender>
-
-  <category name="NOTIFY">
-    <priority value="info" />
-    <appender-ref ref="DEFAULT" />
-    <appender-ref ref="EMAIL" />
-  </category>    
-  
-  <root>
-    <priority value="info" />
-    <appender-ref ref="DEFAULT" />
-  </root>
-  
-</log4j:configuration>
diff --git a/plasmid/dist/etc/service.properties b/plasmid/dist/etc/service.properties
deleted file mode 100644
index 546561e4bec6f8c7bb1b4e5bec9ac695c013000d..0000000000000000000000000000000000000000
--- a/plasmid/dist/etc/service.properties
+++ /dev/null
@@ -1,118 +0,0 @@
-# Unique code of this Data Store Server. Not more than 40 characters.
-data-store-server-code = DSS1
-
-# The root directory of the data store
-storeroot-dir = data/store
-
-# The directory where the command queue file is located; defaults to storeroot-dir 
-commandqueue-dir =
-
-# Port
-port = 8444
-
-# Session timeout in minutes
-session-timeout = 720
-
-# Path to the keystore
-keystore.path = etc/openBIS.keystore
-
-# Password of the keystore
-keystore.password = changeit
-
-# Key password of the keystore
-keystore.key-password = changeit
-
-# The check interval (in seconds)
-check-interval = 60
-
-# The time-out for clean up work in the shutdown sequence (in seconds).
-# Note that that the maximal time for the shutdown sequence to complete can be as large 
-# as twice this time.
-# Remark: On a network file system, it is not recommended to turn this value to something 
-# lower than 180.
-shutdown-timeout = 180
-
-# If free disk space goes below value defined here, a notification email will be sent.
-# Value must be specified in kilobytes (1048576 = 1024 * 1024 = 1GB). If no high water mark is
-# specified or if value is negative, the system will not be watching.
-highwater-mark = -1
-
-# If a data set is successfully registered it sends out an email to the registrator. 
-# If this property is not specified, no email is sent to the registrator. This property
-# does not affect the mails which are sent, when the data set could not be registered.
-notify-successful-registration = false
-
-# The URL of the openBIS server
-server-url = https://localhost:8443/
-
-# The username to use when contacting the openBIS server
-username = etlserver_csb
-
-# The password to use when contacting the openBIS server
-password = etlserver_csb
-
-# The base URL for Web client access.
-download-url = https://localhost:8444
-
-# SMTP properties (must start with 'mail' to be considered). 
-# mail.smtp.host = localhost
-# mail.from = datastore_server@localhost
-
-# ---------------- Timing parameters for file system operations on remote shares.
-
-# Time (in seconds) to wait for any file system operation to finish. Operations exceeding this 
-# timeout will be terminated. 
-timeout = 60
-# Number of times that a timed out operation will be tried again (0 means: every file system 
-# operation will only ever be performed once).
-max-retries = 11
-# Time (in seconds) to wait after an operation has been timed out before re-trying.  
-failure-interval = 10 
-
-# The period of no write access that needs to pass before an incoming data item is considered 
-# complete and ready to be processed (in seconds) [default: 300]. 
-# Valid only when auto-detection method is used to determine if an incoming data are ready to be processed.
-quiet-period = 10
-
-
-# Comma separated names of processing threads. Each thread should have configuration properties prefixed with its name.
-# E.g. 'code-extractor' property for the thread 'my-etl' should be specified as 'my-etl.code-extractor'
-inputs = main-thread
-
-# ---------------------------------------------------------------------------
-# main thread configuration
-# ---------------------------------------------------------------------------
-# The directory to watch for incoming data.
-main-thread.incoming-dir = data/incoming
-
-# Determines when the incoming data should be considered complete and ready to be processed.
-# Allowed values: 
-#  - auto-detection - when no write access will be detected for a specified 'quite-period'
-#  - marker-file		- when an appropriate marker file for the data exists. 
-# The default value is 'marker-file'.
-main-thread.incoming-data-completeness-condition = auto-detection
-# ---------------- Plugin properties
-# The extractor class to use for code extraction
-main-thread.data-set-info-extractor = ch.systemsx.cisd.etlserver.DataSetInfoExtractorWithFileNameProperty
-main-thread.data-set-info-extractor.extractor = ch.ethz.bsse.cisd.plasmid.dss.ParentDirectoryDataSetInfoExtractor
-main-thread.data-set-info-extractor.extractor.extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
-main-thread.data-set-info-extractor.extractor.extractor.space-code = YEAST_LAB
-
-# The extractor class to use for type extraction
-main-thread.type-extractor = ch.ethz.bsse.cisd.plasmid.dss.PlasmidTypeExtractor
-main-thread.type-extractor.dataset-types = SEQ_FILE: gb fasta xdna, RAW_DATA: ab1
-main-thread.type-extractor.file-types = GB: gb, FASTA: fasta, XDNA: xdna, AB1: ab1
-main-thread.type-extractor.default-file-type = PROPRIETARY
-main-thread.type-extractor.directory-file-type = DIRECTORY
-
-# The storage processor (IStorageProcessor implementation)
-main-thread.storage-processor = ch.ethz.bsse.cisd.plasmid.dss.PlasmidStorageProcessor
-main-thread.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-# path to the root directory of the server where PlasMapper is deployed (webapps in jetty)
-main-thread.storage-processor.plasmapper-root-dir = /local0/openbis/sprint/openBIS-server/jetty/webapps
-# the base URL of PlasMapper web application
-main-thread.storage-processor.plasmapper-base-url = ${server-url}/PlasMapper
-
-# The dataset handler (IDataSetHandler implementation)
-main-thread.dataset-handler = ch.ethz.bsse.cisd.plasmid.dss.PlasmidDataSetHandler
-jython-version=2.7
diff --git a/plasmid/etc/log.xml b/plasmid/etc/log.xml
deleted file mode 100644
index 5cee0a68436a19a6c4ec4b14b580e6d9f75bf84f..0000000000000000000000000000000000000000
--- a/plasmid/etc/log.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
-  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-     <layout class="org.apache.log4j.PatternLayout">
-       <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
-     </layout>
-  </appender>
-
-  <appender name="NULL" class="org.apache.log4j.varia.NullAppender" />
-
-  <root>
-     <priority value ="info" />
-     <appender-ref ref="STDOUT" />
-  </root>
-
-</log4j:configuration>
diff --git a/plasmid/etc/service.properties b/plasmid/etc/service.properties
deleted file mode 100644
index 18544be97dcca96dab6758f34756b6c8ed123fe5..0000000000000000000000000000000000000000
--- a/plasmid/etc/service.properties
+++ /dev/null
@@ -1,138 +0,0 @@
-# Unique code of this Data Store Server. Not more than 40 characters.
-data-store-server-code = DSS1
-
-data-folder = targets/playground/data
-
-# The root directory of the data store
-storeroot-dir = ${data-folder}/store
-
-# The directory where the command queue file is located; defaults to storeroot-dir 
-commandqueue-dir =
-
-# Port
-port = 8889
-
-# Session timeout in minutes
-session-timeout = 720
-
-# Set to 'false' for development/testing without deployed server. In this mode datastore will not use
-# SSL when connecting to openbis. Otherwise all 'keystore' properties need to be set for SSL connection 
-# (default when use-ssl property is not set so there is no need to specify it on production servers).
-use-ssl = false
-
-# Path to the keystore
-keystore.path = ../datastore_server/dist/etc/openBIS.keystore
-
-# Password of the keystore
-keystore.password = changeit
-
-# Key password of the keystore
-keystore.key-password = changeit
-
-# The check interval (in seconds)
-check-interval = 5
-
-# The time-out for clean up work in the shutdown sequence (in seconds).
-# Note that that the maximal time for the shutdown sequence to complete can be as large 
-# as twice this time.
-# Remark: On a network file system, it is not recommended to turn this value to something 
-# lower than 180.
-shutdown-timeout = 2
-
-# If free disk space goes below value defined here, a notification email will be sent.
-# Value must be specified in kilobytes (1048576 = 1024 * 1024 = 1GB). If no high water mark is
-# specified or if value is negative, the system will not be watching.
-highwater-mark = -1
-
-# If a data set is successfully registered it sends out an email to the registrator. 
-# If this property is not specified, no email is sent to the registrator. This property
-# does not affect the mails which are sent, when the data set could not be registered.
-notify-successful-registration = false
-
-# The URL of the openBIS server
-server-url = http://localhost:8888
-
-# The username to use when contacting the openBIS server
-username = etlserver_csb
-
-# The password to use when contacting the openBIS server
-password = etlserver_csb
-
-# The base URL for Web client access.
-download-url = http://localhost:${port}
-
-# SMTP properties (must start with 'mail' to be considered). 
-mail.smtp.host = file://targets/playground/email
-mail.from = datastore_server@localhost
-
-# ---------------- Timing parameters for file system operations on remote shares.
-
-# Time (in seconds) to wait for any file system operation to finish. Operations exceeding this 
-# timeout will be terminated. 
-timeout = 60
-# Number of times that a timed out operation will be tried again (0 means: every file system 
-# operation will only ever be performed once).
-max-retries = 11
-# Time (in seconds) to wait after an operation has been timed out before re-trying.  
-failure-interval = 10 
-
-# The period of no write access that needs to pass before an incoming data item is considered 
-# complete and ready to be processed (in seconds) [default: 300]. 
-# Valid only when auto-detection method is used to determine if an incoming data are ready to be processed.
-quiet-period = 10
-
-# Comma separated names of processing threads. Each thread should have configuration properties prefixed with its name.
-# E.g. 'code-extractor' property for the thread 'my-etl' should be specified as 'my-etl.code-extractor'
-inputs = main-thread,cifex
-
-# ---------------------------------------------------------------------------
-# main thread configuration
-# ---------------------------------------------------------------------------
-# The directory to watch for incoming data.
-main-thread.incoming-dir = ${data-folder}/incoming
-
-# Determines when the incoming data should be considered complete and ready to be processed.
-# Allowed values: 
-#  - auto-detection - when no write access will be detected for a specified 'quite-period'
-#  - marker-file		- when an appropriate marker file for the data exists. 
-# The default value is 'marker-file'.
-main-thread.incoming-data-completeness-condition = auto-detection
-# ---------------- Plugin properties
-# The extractor class to use for code extraction
-main-thread.data-set-info-extractor = ch.systemsx.cisd.etlserver.DataSetInfoExtractorWithFileNameProperty
-main-thread.data-set-info-extractor.extractor = ch.ethz.bsse.cisd.plasmid.dss.ParentDirectoryDataSetInfoExtractor
-main-thread.data-set-info-extractor.extractor.extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
-main-thread.data-set-info-extractor.extractor.extractor.space-code = YEAST_LAB
-
-# The extractor class to use for type extraction
-main-thread.type-extractor = ch.ethz.bsse.cisd.plasmid.dss.PlasmidTypeExtractor
-main-thread.type-extractor.dataset-types = SEQ_FILE: gb fasta xdna fa, RAW_DATA: ab1
-main-thread.type-extractor.file-types = GB: gb, FASTA: fasta, XDNA: xdna, FA: fa, AB1: ab1
-main-thread.type-extractor.default-file-type = PROPRIETARY
-main-thread.type-extractor.directory-file-type = DIRECTORY
-
-# The storage processor (IStorageProcessor implementation)
-main-thread.storage-processor = ch.ethz.bsse.cisd.plasmid.dss.PlasmidStorageProcessor
-main-thread.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-# path to the root directory of the server where PlasMapper is deployed (webapps in jetty)
-main-thread.storage-processor.plasmapper-root-dir = /Users/buczekp/CISD/cifex/jetty/webapps
-# the base URL of PlasMapper web application
-main-thread.storage-processor.plasmapper-base-url = http://localhost:8082/PlasMapper
-
-# The dataset handler (IDataSetHandler implementation)
-main-thread.dataset-handler = ch.ethz.bsse.cisd.plasmid.dss.PlasmidDataSetHandler
-
-# ---------------------------------------------------------------------------
-# 'cifex' thread configuration
-# ---------------------------------------------------------------------------
-cifex.incoming-dir = ${data-folder}/incoming-cifex
-cifex.incoming-data-completeness-condition = auto-detection
-cifex.delete-unidentified = true
-cifex.data-set-info-extractor = ch.systemsx.cisd.etlserver.DataSetInfoExtractorWithFileNameProperty
-cifex.data-set-info-extractor.strip-extension = true
-cifex.data-set-info-extractor.extractor = ch.systemsx.cisd.etlserver.cifex.CifexDataSetInfoExtractor
-cifex.type-extractor = ch.systemsx.cisd.etlserver.cifex.CifexTypeExtractor
-cifex.storage-processor = ch.systemsx.cisd.etlserver.CifexStorageProcessor
-cifex.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-cifex.storage-processor.keep-file-regex = .*(?<!request\.properties)$ 
-jython-version=2.7
diff --git a/plasmid/gradle/wrapper/gradle-wrapper.jar b/plasmid/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..0000000000000000000000000000000000000000
Binary files a/plasmid/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/plasmid/gradle/wrapper/gradle-wrapper.properties b/plasmid/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 7745c4ec463c7bb1c4ff6a5e58db239890345152..0000000000000000000000000000000000000000
--- a/plasmid/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://sissource.ethz.ch/openbis/openbis-public/openbis-ivy/-/raw/main/gradle/distribution/7.4/gradle-7.4-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/plasmid/gradlew b/plasmid/gradlew
deleted file mode 100755
index 83f2acfdc319a24e8766cca78f32474ad7a22dd6..0000000000000000000000000000000000000000
--- a/plasmid/gradlew
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
-    echo "$*"
-}
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Escape application args
-save () {
-    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
-    echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
-  cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/plasmid/gradlew.bat b/plasmid/gradlew.bat
deleted file mode 100644
index 24467a141f791695fc1009c78d913b2c849d1412..0000000000000000000000000000000000000000
--- a/plasmid/gradlew.bat
+++ /dev/null
@@ -1,100 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/plasmid/resource/PlasMapper/PlasMapper_dist.zip b/plasmid/resource/PlasMapper/PlasMapper_dist.zip
deleted file mode 100644
index a0424c07679a4532cfa4ce35cf78dcae895a953a..0000000000000000000000000000000000000000
Binary files a/plasmid/resource/PlasMapper/PlasMapper_dist.zip and /dev/null differ
diff --git a/plasmid/resource/PlasMapper/PlasMapper_download.tar.gz b/plasmid/resource/PlasMapper/PlasMapper_download.tar.gz
deleted file mode 100644
index bbb0bd29f02bfc067b0d5322fcf21efc90240cd5..0000000000000000000000000000000000000000
Binary files a/plasmid/resource/PlasMapper/PlasMapper_download.tar.gz and /dev/null differ
diff --git a/plasmid/resource/PlasMapper/README.txt b/plasmid/resource/PlasMapper/README.txt
deleted file mode 100644
index b37957447ae50cf9c3306e0937d33fc743c43107..0000000000000000000000000000000000000000
--- a/plasmid/resource/PlasMapper/README.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-This directory contains:
-
-- jetty.zip
-    version 7.1.4 of jetty with configuration that allows easy deployment of Plasmapper (port 8082)
-- PlasMapper_download.tar.gz 
-		version 2.0 of PlasMapper downloaded from http://wishart.biology.ualberta.ca/PlasMapper.
-- PlasMapper_dist.zip 
-		compressed distribution directory created in step 5 of the following instruction
-- YeastLab-common_enzymes.txt
-		list of common enzymes used in Yeast Lab
-- YeastLab-PlasMapper_dist.zip (TODO)
-		distribution with common enzymes changed to the ones used in Yeast Lab
-- example.gb
-		exmple GB file that can be used for testing after installation is complete
-
-
-*Installation instructions for version 2.0*
-
-1. Unpack PlasMapper_download.tar.gz into your workspace. 
-2. In order to use the project in eclipse perform the following steps:
-- Create a new project in eclipse using PlasMapper as source directory
-- Fix build path:
--- remove /tmp/tomcat/common/lib/servlet-api.jar
--- add /libraries/jetty/servlet-api-2.5.jar
-- [optional] change settings (can be done later, when deploying the application)
--- properties file: ca.ualberta.xdong.plasMapper.annotate.plasMapConfiguration_en_CA.properties
--- change '/home/tomcat/webapps/PlasMapper' to the path where PlasMapper will be deployed
--- 'plasMapRoot' leads to an external directory, where PlasMapper will create tmp directory
-   for its output
-3. in build.xml change values of properties: 
-- <property name="installdir" value="dist"/>
-- <property name="servletjar" value="../libraries/jetty/servlet-api-2.5.jar"/>
-4. [optional] change list of common enzymes in 
-	ca.ualberta.xdong.plasMapper.annotate.PlasmidCleavageSiteAnnotate.java
-	(for Yeast Lab see YeasLab-common_enzymes.txt)
-5. run ant install
-6. copy dist/webapps/PlasMapper to webapps of the application server 
-(make sure plasMapConfiguration_en_CA.properties are properly configured)
-
-Additionally there needs to be blastall installed on the machine running PlasMapper. Latest
-version can be downloaded from ftp://ftp.ncbi.nih.gov/blast/executables/release/LATEST.
-
-Go to http://<server root>:8080/PlasMapper/ after deployment to check that everything is working. 
-You should be able to generate a PNG for 'example.gb' file from this directory:
-- select the GB file
-- change the Image Size from 850x750 to 1200x1000
-- click on Graphic Map button (below DNA sequence text area)
\ No newline at end of file
diff --git a/plasmid/resource/PlasMapper/YeastLab-common_enzymes.txt b/plasmid/resource/PlasMapper/YeastLab-common_enzymes.txt
deleted file mode 100644
index ba41df9df598f2f4fbe41a8ecab7c0a53a132652..0000000000000000000000000000000000000000
--- a/plasmid/resource/PlasMapper/YeastLab-common_enzymes.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-String[] commonEnzymeName =
-		{
-	        "AarI",
-	        "AatII",
-	        "AgeI",
-	        "AscI",
-	        "AvrII",
-	        "BamHI",
-	        "BglII",
-	        "ClaI",
-	        "EagI",
-	        "EcoRI",
-	        "EcoRV",
-	        "FseI",
-	        "HindIII",
-	        "KpnI",
-	        "MluI",
-	        "NaeI",
-	        "NcoI",
-	        "NdeI",
-	        "NgoMIV",
-	        "NheI",
-	        "NotI",
-	        "PacI",
-	        "PmeI",
-	        "PstI",
-	        "PvuI",
-	        "PvuII",
-	        "SacI",
-	        "SacII",
-	        "SapI",
-	        "SbfI",
-	        "ScaI",
-	        "SpeI",
-	        "SphI",
-	        "StuI",
-	        "SwaI",
-	        "XbaI",
-	        "XhoI"
-		};
\ No newline at end of file
diff --git a/plasmid/resource/PlasMapper/example.gb b/plasmid/resource/PlasMapper/example.gb
deleted file mode 100644
index e33465983622dfc0c12a4c407740b02c146ecb2b..0000000000000000000000000000000000000000
--- a/plasmid/resource/PlasMapper/example.gb
+++ /dev/null
@@ -1,229 +0,0 @@
-ID   PRS316     preliminary; circular DNA; SYN; 4887 BP.
-XX
-AC   U03442; ATCC77145;
-XX
-DT   01-JUL-1993 (Rel. 7, Created)
-DT   01-JUL-1995 (Rel. 12, Last updated, Version 1)
-XX
-DE   Saccharomyces/E.coli phagemid vector pRS316 - complete.
-XX
-KW   cloning vector.
-XX
-OS   Cloning vector
-OC   Artificial sequences; Cloning vehicles.
-XX
-RN   [1]
-RP   1-4887
-RC   pRSS56 from pBluescript KS+ &amp; BlueScribe
-RC   pRS303 from pRSS56 &amp; HIS3 gene
-RC   pRS304 from pRSS56 &amp; TRP1 gene
-RC   pRS305 from pRSS56 &amp; LEU2 gene
-RC   pRS306 from pRSS56 &amp; URA3 gene
-RC   pUC19-CEN6:32 from pUC19 &amp; CEN6
-RC   pRSS83 from pUC19-CEN6:32 &amp; pAB9, ARS
-RC   pRSS84 from pRSS83
-RC   pRS313 from pRS303 &amp; pRSS84
-RC   pRS314 from pRS304 &amp; pRSS84
-RC   pRS315 from pRS305 &amp; pRSS84
-RC   pRS316 from pRS306 &amp; pRSS84
-RC   pRSS93 from pRSS84 &amp; pYCF5
-RA   Sikorski R.S., Hieter P.;
-RT   "A system of shuttle vectors and yeast host strains designed for
-RT   efficient manipulation of DNA in Saccharomyces cerevisiae";
-RL   Genetics 122:19-27(1989).
-XX
-RN   [2]
-RC   from YEp24
-RC   from YCp50
-RC   from YIp5
-RA   Strathern J.N., Higgins D.R.;
-RT   "Recovery of plasmids from yeast into Escherichia coli: shuttle
-RT   vectors";
-RL   Meth. Enzymol. 194:319-329(1991).
-XX
-RN   [3]
-RC   pRS316
-RA   Stillman D.J.;
-RT   ;
-RL   Submitted (10-NOV-1993) by:
-RL   Stillman D.J., Dept. of Cellular, Viral and Molecular Biology,
-RL   University of Utah Medical Center, Salt Lake City, UT 84132 USA.
-XX
-CC   One of a series of pBluescript-based centromere vectors (ATCC 77142
-CC   ATCC 77145, ATCC 77157 to ATCC 77158) differing in the yeast
-CC   selectable marker gene. [1]
-CC   The order of the major features in this plasmid is: URA3 - f1 ori
-CC   (NaeI) - T7 promoter - lacZ'/MCS - T3 promoter - pMB1 ori - bla -
-CC   CEN6 - ARSH4.
-CC   A fragment (1.112 kb) containing the URA3 gene was inserted into the
-CC   NdeI site and a cassette containing CEN6 and the ARS associated with
-CC   histone 4 (ARSH4) was inserted into the AatII site of pRSS56. All ends
-CC   were blunted.
-CC   pRSS56, constructed by ligating a PvuI fragment (bp 498-2412) of
-CC   pBluescript KS+ to a PvuI fragment (bp 2850-730) of pBS(+), contains
-CC   the KS MCS from pBluescript KS+ and the unique NdeI and AatII sites
-CC   between bla and f1 origin of pBS(+). [1]
-CC   YC-type centromere vector permitting visual detection of recombinants
-CC   and production of ssDNA in E.coli.  Contains promoters for in vitro
-CC   RNA synthesis, priming sites useful for sequencing, and encodes the
-CC   lacZ alpha (lacZ') peptide. [1]
-CC   Useful in plasmid shuffle experiments.
-CC   Restriction digests of the clone give the following sizes (kb):
-CC   EcoRI--5.0; BamHI--5.0, PvuII--4.4, 0.5. (ATCC staff)
-CC   Medium is 1227 LB plus ampicillin.
-CC   NCBI gi: 417973
-CC   NM (pRS316)
-CC   CM (yes)
-CC   NA (ds-DNA)
-CC   TP (circular)
-CC   ST ()
-CC   TY (phagemid)
-CC   SP (ATCC)
-CC   HO (E.coli HB101)(Saccharomyces cerevisiae)(E.coli)
-CC   HO (Saccharomyces cerevisiae YPH499)(Saccharomyces cerevisiae YPH500)
-CC   HO (Saccharomyces cerevisiae YPH501)
-CC   CP ()
-CC   FN (cloning)
-CC   SE ()
-CC   PA ()
-CC   BR (pRS314)(pRS315)(pRS313)
-CC   OF ()
-CC   OR ()
-XX
-FH   Key             Location/Qualifiers
-FH
-FT   misc_feature    0..0
-FT                   /note="1. pUC19 HincII 2686bp 432..432
-FT                   2. yeast MboII-MboII 125bp, CEN6
-FT                   -&gt; pUC19-CEN6:32 2811bp
-FT                   1. pUC8 BamHI 2665bp 241..241
-FT                   2. yeast Sau3AI-Sau3AI 374bp, histone H4 ARS/ARSH4
-FT                   -&gt; pAB9 3039bp
-FT                   1. pUC19-CEN6:32 EcoRI-ScaI 1908bp 397..-..2180, CEN6
-FT                   2. pAB9 ScaI-EcoRI 1314bp 231..-..1171,
-FT                   \ histone H4 ARS/ARSH4
-FT                   -&gt; pRSS83 3222bp [in MCS]
-FT                   1. pRSS83 remove SmaI-XbaI 9bp, MCS/pUC19 415..424
-FT                   \ 3213bp
-FT                   Klenow:Klenow
-FT                   -&gt; pRSS84 3213bp
-FT                   1. pRSS84 HincII-PstI, CEN6/ARSH4
-FT                   \ pUC19 440..2686..432
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   2. pRS306 AatII 4373bp 848..848
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   -&gt; pRS316 4887bp"
-FT   misc_binding    0..0
-FT                   /note="MCS KpnI-ApaI-XhoI-SalI-ClaI-HindIII-EcoRV-
-FT                   EcoRI-PstI-SmaI-
-FT                   BamHI-SpeI-XbaI-EagI-NotI-BstXI-SacII-SacI"
-FT   misc_binding    0..0
-FT                   /note="SIT unique KpnI-ApaI-XhoI-SalI-ClaI-EcoRI-
-FT                   PstI-SmaI-BamHI-SpeI-EagI-NotI-SacII-SacI-NaeI"
-FT   rep_origin      0..0
-FT                   /note="ORI E. coli pMB1 (ColE1 and pBR322)"
-FT   rep_origin      0..0
-FT                   /note="ORI bacteriophage f1"
-FT   promoter        0..0
-FT                   /note="PRO E. coli lac gene"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T3"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T7"
-FT   CDS             0..0
-FT                   /note="GEN E. coli beta-galactosidase gene (lacZ');
-FT                   reporter gene"
-FT   CDS             0..0
-FT                   /note="ANT E. coli beta-lactamase gene (bla)
-FT                   ampicillin resistance gene (apr/amp)"
-FT   CDS             0..0
-FT                   /note="ANT yeast URA3 gene"
-FT   rep_origin      0..0
-FT                   /note="ORI yeast ARSH4"
-FT   misc_feature    0..0
-FT                   /note="yeast centromere CEN6"
-XX
-SQ   Sequence 4887 BP; 1361 A; 1069 C; 1167 G; 1290 T; 0 other;
-     tcgcgcgttt cggtgatgac ggtgaaaacc tctgacacat gcagctcccg gagacggtca
-     cagcttgtct gtaagcggat gccgggagca gacaagcccg tcagggcgcg tcagcgggtg
-     ttggcgggtg tcggggctgg cttaactatg cggcatcaga gcagattgta ctgagagtgc
-     accacgcttt tcaattcaat tcatcatttt ttttttattc ttttttttga tttcggtttc
-     tttgaaattt ttttgattcg gtaatctccg aacagaagga agaacgaagg aaggagcaca
-     gacttagatt ggtatatata cgcatatgta gtgttgaaga aacatgaaat tgcccagtat
-     tcttaaccca actgcacaga acaaaaacct gcaggaaacg aagataaatc atgtcgaaag
-     ctacatataa ggaacgtgct gctactcatc ctagtcctgt tgctgccaag ctatttaata
-     tcatgcacga aaagcaaaca aacttgtgtg cttcattgga tgttcgtacc accaaggaat
-     tactggagtt agttgaagca ttaggtccca aaatttgttt actaaaaaca catgtggata
-     tcttgactga tttttccatg gagggcacag ttaagccgct aaaggcatta tccgccaagt
-     acaatttttt actcttcgaa gacagaaaat ttgctgacat tggtaataca gtcaaattgc
-     agtactctgc gggtgtatac agaatagcag aatgggcaga cattacgaat gcacacggtg
-     tggtgggccc aggtattgtt agcggtttga agcaggcggc agaagaagta acaaaggaac
-     ctagaggcct tttgatgtta gcagaattgt catgcaaggg ctccctatct actggagaat
-     atactaaggg tactgttgac attgcgaaga gcgacaaaga ttttgttatc ggctttattg
-     ctcaaagaga catgggtgga agagatgaag gttacgattg gttgattatg acacccggtg
-     tgggtttaga tgacaaggga gacgcattgg gtcaacagta tagaaccgtg gatgatgtgg
-     tctctacagg atctgacatt attattgttg gaagaggact atttgcaaag ggaagggatg
-     ctaaggtaga gggtgaacgt tacagaaaag caggctggga agcatatttg agaagatgcg
-     gccagcaaaa ctaaaaaact gtattataag taaatgcatg tatactaaac tcacaaatta
-     gagcttcaat ttaattatat cagttattac cctgcggtgt gaaataccgc acagatgcgt
-     aaggagaaaa taccgcatca ggaaattgta aacgttaata ttttgttaaa attcgcgtta
-     aatttttgtt aaatcagctc attttttaac caataggccg aaatcggcaa aatcccttat
-     aaatcaaaag aatagaccga gatagggttg agtgttgttc cagtttggaa caagagtcca
-     ctattaaaga acgtggactc caacgtcaaa gggcgaaaaa ccgtctatca gggcgatggc
-     ccactacgtg aaccatcacc ctaatcaagt tttttggggt cgaggtgccg taaagcacta
-     aatcggaacc ctaaagggag cccccgattt agagcttgac ggggaaagcc ggcgaacgtg
-     gcgagaaagg aagggaagaa agcgaaagga gcgggcgcta gggcgctggc aagtgtagcg
-     gtcacgctgc gcgtaaccac cacacccgcc gcgcttaatg cgccgctaca gggcgcgtcg
-     cgccattcgc cattcaggct gcgcaactgt tgggaagggc gatcggtgcg ggcctcttcg
-     ctattacgcc agctggcgaa ggggggatgt gctgcaaggc gattaagttg ggtaacgcca
-     gggttttccc agtcacgacg ttgtaaaacg acggccagtg aattgtaata cgactcacta
-     tagggcgaat tggagctcca ccgcggtggc ggccgctcta gaactagtgg atcccccggg
-     ctgcaggaat tcgatatcaa gcttatcgat accgtcgacc tcgagggggg gcccggtacc
-     cagcttttgt tccctttagt gagggttaat tccgagcttg gcgtaatcat ggtcatagct
-     gtttcctgtg tgaaattgtt atccgctcac aattccacac aacataggag ccggaagcat
-     aaagtgtaaa gcctggggtg cctaatgagt gaggtaactc acattaattg cgttgcgctc
-     actgcccgct ttccagtcgg gaaacctgtc gtgccagctg cattaatgaa tcggccaacg
-     cgcggggaga ggcggtttgc gtattgggcg ctcttccgct tcctcgctca ctgactcgct
-     gcgctcggtc gttcggctgc ggcgagcggt atcagctcac tcaaaggcgg taatacggtt
-     atccacagaa tcaggggata acgcaggaaa gaacatgtga gcaaaaggcc agcaaaaggc
-     caggaaccgt aaaaaggccg cgttgctggc gtttttccat aggctcggcc cccctgacga
-     gcatcacaaa aatcgacgct caagtcagag gtggcgaaac ccgacaggac tataaagata
-     ccaggcgttc ccccctggaa gctccctcgt gcgctctcct gttccgaccc tgccgcttac
-     cggatacctg tccgcctttc tcccttcggg aagcgtggcg ctttctcaat gctcacgctg
-     taggtatctc agttcggtgt aggtcgttcg ctccaagctg ggctgtgtgc acgaaccccc
-     cgttcagccc gaccgctgcg ccttatccgg taactatcgt cttgagtcca acccggtaag
-     acacgactta tcgccactgg cagcagccac tggtaacagg attagcagag cgaggtatgt
-     aggcggtgct acagagttct tgaagtggtg gcctaactac ggctacacta gaaggacagt
-     atttggtatc tgcgctctgc tgaagccagt taccttcgga aaaagagttg gtagctcttg
-     atccggcaaa caaaccaccg ctggtagcgg tggttttttt gtttgcaagc agcagattac
-     gcgcagaaaa aaaggatctc aagaagatcc tttgatcttt tctacggggt ctgacgctca
-     gtggaacgaa aactcacgtt aagggatttt ggtcatgaga ttatcaaaaa ggatcttcac
-     ctagatcctt ttaaattaaa aatgaagttt taaatcaatc taaagtatat atgagtaaac
-     ttggtctgac agttaccaat gcttaatcag tgaggcacct atctcagcga tctgtctatt
-     tcgttcatcc atagttgcct gactgcccgt cgtgtagata actacgatac gggagggctt
-     accatctggc cccagtgctg caatgatacc gcgagaccca cgctcaccgg ctccagattt
-     atcagcaata aaccagccag ccggaagggc cgagcgcaga agtggtcctg caactttatc
-     cgcctccatc cagtctatta attgttgccg ggaagctaga gtaagtagtt cgccagttaa
-     tagtttgcgc aacgttgttg ccattgctac aggcatcgtg gtgtcacgct cgtcgtttgg
-     tatggcttca ttcagctccg gttcccaacg atcaaggcga gttacatgat cccccatgtt
-     gtgaaaaaaa gcggttagct ccttcggtcc tccgatcgtt gtcagaagta agttggccgc
-     agtgttatca ctcatggtta tggcagcact gcataattct cttactgtca tgccatccgt
-     aagatgcttt tctgtgactg gtgagtactc aaccaagtca ttctgagaat agtgtatgcg
-     gcgaccgagt tgctcttgcc cggcgtcaat acgggataat accgcgccac atagcagaac
-     tttaaaagtg ctcatcattg gaaaacgttc ttcggggcga aaactctcaa ggatcttacc
-     gctgttgaga tccagttcga tgtaacccac tcgtgcaccc aactgatctt cagcatcttt
-     tactttcacc agcgtttctg ggtgagcaaa aacaggaagg caaaatgccg caaaaaaggg
-     aataagggcg acacggaaat gttgaatact catactcttc ctttttcaat attattgaag
-     catttatcag ggttattgtc tcatgagcgg atacatattt gaatgtattt agaaaaataa
-     acaaataggg gttccgcgca catttccccg aaaagtgcca cctgggtcct tttcatcacg
-     tgctataaaa ataattataa tttaaatttt ttaatataaa tatataaatt aaaaatagaa
-     agtaaaaaaa gaaattaaag aaaaaatagt ttttgttttc cgaagatgta aaagactcta
-     gggggatcgc caacaaatac taccttttat cttgctcttc ctgctctcag gtattaatgc
-     cgaattgttt catcttgtct gtgtagaaga ccacacacga aaatcctgtg attttacatt
-     ttacttatcg ttaatcgaat gtatatctat ttaatctgct tttcttgtct aataaatata
-     tatgtaaagt acgctttttg ttgaaatttt ttaaaccttt gtttattttt ttttcttcat
-     tccgtaactc ttctaccttc tttatttact ttctaaaatc caaatacaaa acataaaaat
-     aaataaacac agagtaaatt cccaaattat tccatcatta aaagatacga ggcgcgtgta
-     agttacaggc aagcgatccg tcctaagaaa ccattattat catgacatta acctataaaa
-     ataggcgtat cacgaggccc tttcgtc
-//
diff --git a/plasmid/resource/PlasMapper/jetty.zip b/plasmid/resource/PlasMapper/jetty.zip
deleted file mode 100644
index a156bd8e5832ff058b06b1c22b28ff435da5e251..0000000000000000000000000000000000000000
Binary files a/plasmid/resource/PlasMapper/jetty.zip and /dev/null differ
diff --git a/plasmid/resource/README b/plasmid/resource/README
deleted file mode 100644
index 6409f9bc58d2ded44fcf610e7af34680f2275257..0000000000000000000000000000000000000000
--- a/plasmid/resource/README
+++ /dev/null
@@ -1,44 +0,0 @@
-h1. How to test on productive server (temporary)
-
-1. Go to https://openbis-csb.ethz.ch/openbis (all CISD developers have INSTANCE_ADMIN role assigned)
-- there is a test experiment EXPERIMENT_TEST and a test sample SAMPLE_TEST with a few datasets.
-- to keep the instance clean one should only:
--- create/delete samples attached to EXPERIMENT_TEST (don't delete sample SAMPLE_TEST)
--- register/delete datasets attached to test samples 
-2. Login to bs-plasmids.ethz.ch as openbis 
-3. There is a link 'dss-data' to a shared directory with a dropbox ('incoming') and an example
-of a directory with files that can be registered as datasets for sample SAMPLE_TEST.
-- to register datasets for the SAMPLE_TEST sample copy ~/dss-data/SAMPLE_TEST to ~/dss-data/incoming 
-
-h1. Quick Setup for development mode
-
-1. openbis 
-1.1 in service.properties set: database.kind = plasmids
-1.2 create a clean db using the script plasmid/resource/recreate_db.sh (change OWNER)
-
-2. PlasMapper
-2.1. unzip plasmid/resource/PlasMapper/jetty.zip
-2.2. unzip plasmid/resource/PlasMapper/PlasMapper_dist.zip and move PlasMapper to webapps
-2.3. Install blastall. Latest version can be downloaded from ftp://ftp.ncbi.nih.gov/blast/executables/release/LATEST.
-2.3. change all paths leading to PlasMapper webapp dir and blastall in 
-PlasMapper/WEB-INF/classes/ca/ualberta/xdong/plasMapper/annotate/plasMapConfiguration_en_CA.properties
-
-3. plasmids
-3.1 in targets create directories:
-- targets/playground/data/incoming
-- targets/playground/data/incoming-cifex
-- targets/playground/data/store
-3.2 change values of properties in /etc/service.properties needed for PlasMapper integration
-main-thread.storage-processor.plasmapper-root-dir
-main-thread.storage-processor.plasmapper-base-url
-
-h1. Run and prepare data
-
-1. run openbis
-2. import samples using plasmid/resource/example/sample-import.tsv (multiple sample type)
-3. run plasmid DSS using launch configuration from plasmid/resource/eclipse
-4. run the external jetty with PlasMapper deployed
- 
-To test dataset registration and integration with PlasMapper copy an example directory 
-plasmid/resource/example/FRP_1 to targets/playground/data/incoming. Datasets
-will be attached to sample with code 'BOX_1:FRP_1'.
\ No newline at end of file
diff --git a/plasmid/resource/db/plasmids-YeastLab.sql b/plasmid/resource/db/plasmids-YeastLab.sql
deleted file mode 100644
index 31de31ad1573da8d3aa4f0fe22233daf92161c7e..0000000000000000000000000000000000000000
--- a/plasmid/resource/db/plasmids-YeastLab.sql
+++ /dev/null
@@ -1,4686 +0,0 @@
---
--- PostgreSQL database dump
---
-
-SET statement_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = off;
-SET check_function_bodies = false;
-SET client_min_messages = warning;
-SET escape_string_warning = off;
-
---
--- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -
---
-
-CREATE PROCEDURAL LANGUAGE plpgsql;
-
-
-SET search_path = public, pg_catalog;
-
---
--- Name: archiving_status; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN archiving_status AS character varying(100)
-	CONSTRAINT archiving_status_check CHECK (((VALUE)::text = ANY (ARRAY[('LOCKED'::character varying)::text, ('AVAILABLE'::character varying)::text, ('ARCHIVED'::character varying)::text, ('ARCHIVE_PENDING'::character varying)::text, ('UNARCHIVE_PENDING'::character varying)::text])));
-
-
---
--- Name: authorization_role; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN authorization_role AS character varying(40)
-	CONSTRAINT authorization_role_check CHECK (((VALUE)::text = ANY (ARRAY[('ADMIN'::character varying)::text, ('POWER_USER'::character varying)::text, ('USER'::character varying)::text, ('OBSERVER'::character varying)::text, ('ETL_SERVER'::character varying)::text])));
-
-
---
--- Name: boolean_char; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN boolean_char AS boolean DEFAULT false;
-
-
---
--- Name: boolean_char_or_unknown; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN boolean_char_or_unknown AS character(1) DEFAULT 'U'::bpchar
-	CONSTRAINT boolean_char_or_unknown_check CHECK ((VALUE = ANY (ARRAY['F'::bpchar, 'T'::bpchar, 'U'::bpchar])));
-
-
---
--- Name: code; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN code AS character varying(60);
-
-
---
--- Name: column_label; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN column_label AS character varying(128);
-
-
---
--- Name: data_store_service_kind; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN data_store_service_kind AS character varying(40)
-	CONSTRAINT data_store_service_kind_check CHECK (((VALUE)::text = ANY (ARRAY[('PROCESSING'::character varying)::text, ('QUERIES'::character varying)::text])));
-
-
---
--- Name: description_2000; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN description_2000 AS character varying(2000);
-
-
---
--- Name: event_type; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN event_type AS character varying(40)
-	CONSTRAINT event_type_check CHECK (((VALUE)::text = ANY (ARRAY[('DELETION'::character varying)::text, ('INVALIDATION'::character varying)::text, ('MOVEMENT'::character varying)::text])));
-
-
---
--- Name: file; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN file AS bytea;
-
-
---
--- Name: file_name; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN file_name AS character varying(100);
-
-
---
--- Name: generic_value; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN generic_value AS character varying(1024);
-
-
---
--- Name: grid_expression; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN grid_expression AS character varying(2000);
-
-
---
--- Name: grid_id; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN grid_id AS character varying(200);
-
-
---
--- Name: object_name; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN object_name AS character varying(50);
-
-
---
--- Name: ordinal_int; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN ordinal_int AS bigint
-	CONSTRAINT ordinal_int_check CHECK ((VALUE > 0));
-
-
---
--- Name: query_type; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN query_type AS character varying(40)
-	CONSTRAINT query_type_check CHECK (((VALUE)::text = ANY (ARRAY[('GENERIC'::character varying)::text, ('EXPERIMENT'::character varying)::text, ('SAMPLE'::character varying)::text, ('DATA_SET'::character varying)::text, ('MATERIAL'::character varying)::text])));
-
-
---
--- Name: real_value; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN real_value AS real;
-
-
---
--- Name: tech_id; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN tech_id AS bigint;
-
-
---
--- Name: time_stamp; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN time_stamp AS timestamp with time zone;
-
-
---
--- Name: time_stamp_dfl; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN time_stamp_dfl AS timestamp with time zone NOT NULL DEFAULT now();
-
-
---
--- Name: title_100; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN title_100 AS character varying(100);
-
-
---
--- Name: user_id; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN user_id AS character varying(50);
-
-
---
--- Name: check_dataset_relationships_on_data_table_modification(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION check_dataset_relationships_on_data_table_modification() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-	counter	INTEGER;
-BEGIN
-	-- if there is a connection with a Sample there should not be any connection with a parent Data Set
-	IF (NEW.samp_id IS NOT NULL) THEN
-		-- count number of parents
-		SELECT count(*) INTO counter 
-			FROM data_set_relationships 
-			WHERE data_id_child = NEW.id;
-		IF (counter > 0) THEN
-			RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected with a Sample and a parent Data Set at the same time.', NEW.code;
-		END IF;
-	END IF;
-  RETURN NEW;
-END;
-$$;
-
-
---
--- Name: check_dataset_relationships_on_relationships_table_modification(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION check_dataset_relationships_on_relationships_table_modification() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-	counter	INTEGER;
-	sample_id	TECH_ID;
-	data_code	CODE;
-BEGIN
-	-- child will have a parent added so it should not be connected with any sample
-	SELECT samp_id, code INTO sample_id, data_code 
-		FROM data 
-		WHERE id = NEW.data_id_child;
-	IF (sample_id IS NOT NULL) THEN
-		RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected to a Sample and to a parent Data Set at the same time.', data_code;
-	END IF;
-	RETURN NEW;
-END;
-$$;
-
-
---
--- Name: controlled_vocabulary_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION controlled_vocabulary_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_code  CODE;
-BEGIN
-
-   select code into v_code from data_types where id = NEW.daty_id;
-
-   -- Check if the data is of type "CONTROLLEDVOCABULARY"
-   if v_code = 'CONTROLLEDVOCABULARY' then
-      if NEW.covo_id IS NULL then
-         RAISE EXCEPTION 'Insert/Update of Property Type (Code: %) failed, as its Data Type is CONTROLLEDVOCABULARY, but it is not linked to a Controlled Vocabulary.', NEW.code;
-      end if;
-   end if;
-
-   RETURN NEW;
-
-END;
-$$;
-
-
---
--- Name: data_set_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION data_set_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from data_set_type_property_types dstpt, property_types pt 
-			 where NEW.dstpt_id = dstpt.id AND dstpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-												 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: experiment_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION experiment_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from experiment_type_property_types etpt, property_types pt 
-			 where NEW.etpt_id = etpt.id AND etpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-												 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: external_data_storage_format_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION external_data_storage_format_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_covo_code  CODE;
-   data_code CODE;
-BEGIN
-
-   select code into v_covo_code from controlled_vocabularies
-      where is_internal_namespace = true and 
-         id = (select covo_id from controlled_vocabulary_terms where id = NEW.cvte_id_stor_fmt);
-   -- Check if the data storage format is a term of the controlled vocabulary "STORAGE_FORMAT"
-   if v_covo_code != 'STORAGE_FORMAT' then
-      select code into data_code from data where id = NEW.data_id; 
-      RAISE EXCEPTION 'Insert/Update of Data (Code: %) failed, as its Storage Format is %, but is required to be STORAGE_FORMAT.', data_code, v_covo_code;
-   end if;
-
-   RETURN NEW;
-
-END;
-$$;
-
-
---
--- Name: material_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION material_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from material_type_property_types etpt, property_types pt 
-			 where NEW.mtpt_id = etpt.id AND etpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-							 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: rename_sequence(character varying, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION rename_sequence(old_name character varying, new_name character varying) RETURNS integer
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-  CURR_SEQ_VAL   INTEGER;
-BEGIN
-  SELECT INTO CURR_SEQ_VAL NEXTVAL(OLD_NAME);
-  EXECUTE 'CREATE SEQUENCE ' || NEW_NAME || ' START WITH ' || CURR_SEQ_VAL;
-  EXECUTE 'DROP SEQUENCE ' || OLD_NAME;
-  RETURN CURR_SEQ_VAL;
-END;
-$$;
-
-
---
--- Name: sample_code_uniqueness_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION sample_code_uniqueness_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   counter  INTEGER;
-BEGIN
-  LOCK TABLE samples IN EXCLUSIVE MODE;
-  
-	  IF (NEW.samp_id_part_of is NULL) THEN
-		  IF (NEW.dbin_id is not NULL) THEN
-			  SELECT count(*) into counter FROM samples 
-		      where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and dbin_id = NEW.dbin_id;
-        IF (counter > 0) THEN
-				  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code already exists.', NEW.code;
-        END IF;
-		  ELSIF (NEW.grou_id is not NULL) THEN
-			  SELECT count(*) into counter FROM samples 
-				  where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and grou_id = NEW.grou_id;
-			  IF (counter > 0) THEN
-				  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample with the same code already exists.', NEW.code;
-			  END IF;
-      END IF;
-    ELSE
-		  IF (NEW.dbin_id is not NULL) THEN
-			  SELECT count(*) into counter FROM samples 
-				  where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and dbin_id = NEW.dbin_id;
-			  IF (counter > 0) THEN
-				  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code and being the part of the same container already exists.', NEW.code;
-			  END IF;
-		  ELSIF (NEW.grou_id is not NULL) THEN
-			  SELECT count(*) into counter FROM samples 
-				  where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and grou_id = NEW.grou_id;
-			  IF (counter > 0) THEN
-				  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample with the same code and being the part of the same container already exists.', NEW.code;
-			  END IF;
-		  END IF;
-     END IF;   
-  
-  RETURN NEW;
-END;
-$$;
-
-
---
--- Name: sample_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION sample_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from sample_type_property_types etpt, property_types pt 
-			 where NEW.stpt_id = etpt.id AND etpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-												 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: sample_subcode_uniqueness_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION sample_subcode_uniqueness_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   counter  INTEGER;
-   unique_subcode  BOOLEAN_CHAR;
-BEGIN
-  LOCK TABLE samples IN EXCLUSIVE MODE;
-  
-  SELECT is_subcode_unique into unique_subcode FROM sample_types WHERE id = NEW.saty_id;
-  
-  IF (unique_subcode) THEN
-    IF (NEW.dbin_id is not NULL) THEN
-			SELECT count(*) into counter FROM samples 
-				where id != NEW.id and code = NEW.code and saty_id = NEW.saty_id and dbin_id = NEW.dbin_id;
-			IF (counter > 0) THEN
-				RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample of the same type with the same subcode already exists.', NEW.code;
-			END IF;
-		ELSIF (NEW.grou_id is not NULL) THEN
-			SELECT count(*) into counter FROM samples 
-				where id != NEW.id and code = NEW.code and saty_id = NEW.saty_id and grou_id = NEW.grou_id;
-			IF (counter > 0) THEN
-				RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample of the same type with the same subcode already exists.', NEW.code;
-			END IF;
-		END IF;
-  END IF;
-  
-  RETURN NEW;
-END;
-$$;
-
-
---
--- Name: attachment_content_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE attachment_content_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: attachment_content_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('attachment_content_id_seq', 1, true);
-
-
-SET default_tablespace = '';
-
-SET default_with_oids = false;
-
---
--- Name: attachment_contents; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE attachment_contents (
-    id tech_id NOT NULL,
-    value file NOT NULL
-);
-
-
---
--- Name: attachment_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE attachment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: attachment_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('attachment_id_seq', 1, true);
-
-
---
--- Name: attachments; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE attachments (
-    id tech_id NOT NULL,
-    expe_id tech_id,
-    samp_id tech_id,
-    proj_id tech_id,
-    exac_id tech_id NOT NULL,
-    file_name file_name NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    version integer NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    title title_100,
-    description description_2000,
-    CONSTRAINT atta_arc_ck CHECK ((((((expe_id IS NOT NULL) AND (proj_id IS NULL)) AND (samp_id IS NULL)) OR (((expe_id IS NULL) AND (proj_id IS NOT NULL)) AND (samp_id IS NULL))) OR (((expe_id IS NULL) AND (proj_id IS NULL)) AND (samp_id IS NOT NULL))))
-);
-
-
---
--- Name: authorization_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE authorization_group_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: authorization_group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('authorization_group_id_seq', 2, false);
-
-
---
--- Name: authorization_group_persons; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE authorization_group_persons (
-    ag_id tech_id NOT NULL,
-    pers_id tech_id NOT NULL
-);
-
-
---
--- Name: authorization_groups; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE authorization_groups (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: code_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE code_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: code_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('code_seq', 100, true);
-
-
---
--- Name: controlled_vocabularies; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE controlled_vocabularies (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    is_internal_namespace boolean_char DEFAULT false NOT NULL,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_chosen_from_list boolean_char DEFAULT true NOT NULL,
-    source_uri character varying(250)
-);
-
-
---
--- Name: controlled_vocabulary_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE controlled_vocabulary_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: controlled_vocabulary_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('controlled_vocabulary_id_seq', 7, true);
-
-
---
--- Name: controlled_vocabulary_terms; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE controlled_vocabulary_terms (
-    id tech_id NOT NULL,
-    code object_name NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    covo_id tech_id NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    label column_label,
-    description description_2000,
-    ordinal ordinal_int NOT NULL,
-    CONSTRAINT cvte_ck CHECK (((ordinal)::bigint > 0))
-);
-
-
---
--- Name: cvte_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE cvte_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: cvte_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('cvte_id_seq', 61, true);
-
-
---
--- Name: data; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data (
-    id tech_id NOT NULL,
-    code code,
-    dsty_id tech_id NOT NULL,
-    dast_id tech_id NOT NULL,
-    expe_id tech_id NOT NULL,
-    data_producer_code code,
-    production_timestamp time_stamp,
-    samp_id tech_id,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    is_placeholder boolean_char DEFAULT false,
-    is_valid boolean_char DEFAULT true,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_derived boolean_char NOT NULL
-);
-
-
---
--- Name: data_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_id_seq', 1, true);
-
-
---
--- Name: data_set_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_properties (
-    id tech_id NOT NULL,
-    ds_id tech_id NOT NULL,
-    dstpt_id tech_id NOT NULL,
-    value generic_value,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    CONSTRAINT dspr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: data_set_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_set_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_set_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_set_property_id_seq', 9, true);
-
-
---
--- Name: data_set_relationship_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_set_relationship_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_set_relationship_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_set_relationship_id_seq', 1, false);
-
-
---
--- Name: data_set_relationships; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_relationships (
-    data_id_parent tech_id NOT NULL,
-    data_id_child tech_id NOT NULL
-);
-
-
---
--- Name: data_set_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_set_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_set_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_set_type_id_seq', 4, true);
-
-
---
--- Name: data_set_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_type_property_types (
-    id tech_id NOT NULL,
-    dsty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: data_set_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    main_ds_pattern character varying(300),
-    main_ds_path character varying(1000)
-);
-
-
---
--- Name: data_store_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_store_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_store_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_store_id_seq', 1, true);
-
-
---
--- Name: data_store_service_data_set_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_store_service_data_set_types (
-    data_store_service_id tech_id NOT NULL,
-    data_set_type_id tech_id NOT NULL
-);
-
-
---
--- Name: data_store_services; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_store_services (
-    id tech_id NOT NULL,
-    key character varying(256) NOT NULL,
-    label character varying(256) NOT NULL,
-    kind data_store_service_kind NOT NULL,
-    data_store_id tech_id NOT NULL
-);
-
-
---
--- Name: data_store_services_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_store_services_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_store_services_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_store_services_id_seq', 12, true);
-
-
---
--- Name: data_stores; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_stores (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    code code NOT NULL,
-    download_url character varying(1024) NOT NULL,
-    remote_url character varying(250) NOT NULL,
-    session_token character varying(50) NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_archiver_configured boolean_char DEFAULT false NOT NULL
-);
-
-
---
--- Name: data_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_type_id_seq', 9, true);
-
-
---
--- Name: data_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000 NOT NULL
-);
-
-
---
--- Name: database_instance_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE database_instance_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: database_instance_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('database_instance_id_seq', 1, true);
-
-
---
--- Name: database_instances; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE database_instances (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    uuid code NOT NULL,
-    is_original_source boolean_char DEFAULT false NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL
-);
-
-
---
--- Name: database_version_logs; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE database_version_logs (
-    db_version character varying(4) NOT NULL,
-    module_name character varying(250),
-    run_status character varying(10),
-    run_status_timestamp timestamp without time zone,
-    module_code bytea,
-    run_exception bytea
-);
-
-
---
--- Name: dstpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE dstpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: dstpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('dstpt_id_seq', 3, true);
-
-
---
--- Name: etpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE etpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: etpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('etpt_id_seq', 1, false);
-
-
---
--- Name: event_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE event_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: event_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('event_id_seq', 1, true);
-
-
---
--- Name: events; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE events (
-    id tech_id NOT NULL,
-    event_type event_type NOT NULL,
-    description description_2000,
-    reason description_2000,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    entity_type character varying(80) NOT NULL,
-    identifier character varying(250) NOT NULL,
-    CONSTRAINT evnt_et_enum_ck CHECK (((entity_type)::text = ANY (ARRAY[('ATTACHMENT'::character varying)::text, ('DATASET'::character varying)::text, ('EXPERIMENT'::character varying)::text, ('GROUP'::character varying)::text, ('MATERIAL'::character varying)::text, ('PROJECT'::character varying)::text, ('PROPERTY_TYPE'::character varying)::text, ('SAMPLE'::character varying)::text, ('VOCABULARY'::character varying)::text, ('AUTHORIZATION_GROUP'::character varying)::text])))
-);
-
-
---
--- Name: experiment_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE experiment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: experiment_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('experiment_id_seq', 1, true);
-
-
---
--- Name: experiment_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiment_properties (
-    id tech_id NOT NULL,
-    expe_id tech_id NOT NULL,
-    etpt_id tech_id NOT NULL,
-    value generic_value,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    CONSTRAINT expr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: experiment_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE experiment_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: experiment_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('experiment_property_id_seq', 1, false);
-
-
---
--- Name: experiment_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE experiment_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: experiment_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('experiment_type_id_seq', 1, true);
-
-
---
--- Name: experiment_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiment_type_property_types (
-    id tech_id NOT NULL,
-    exty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: experiment_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiment_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: experiments; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiments (
-    id tech_id NOT NULL,
-    perm_id code NOT NULL,
-    code code NOT NULL,
-    exty_id tech_id NOT NULL,
-    mate_id_study_object tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    proj_id tech_id NOT NULL,
-    inva_id tech_id,
-    is_public boolean_char DEFAULT false NOT NULL
-);
-
-
---
--- Name: external_data; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE external_data (
-    data_id tech_id NOT NULL,
-    location character varying(1024) NOT NULL,
-    ffty_id tech_id NOT NULL,
-    loty_id tech_id NOT NULL,
-    cvte_id_stor_fmt tech_id NOT NULL,
-    is_complete boolean_char_or_unknown DEFAULT 'U'::bpchar NOT NULL,
-    cvte_id_store tech_id,
-    status archiving_status DEFAULT 'AVAILABLE'::character varying NOT NULL
-);
-
-
---
--- Name: file_format_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE file_format_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: file_format_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('file_format_type_id_seq', 7, true);
-
-
---
--- Name: file_format_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE file_format_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL
-);
-
-
---
--- Name: filter_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE filter_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: filter_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('filter_id_seq', 1, true);
-
-
---
--- Name: filters; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE filters (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    name character varying(200) NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    expression character varying(2000) NOT NULL,
-    is_public boolean NOT NULL,
-    grid_id character varying(200) NOT NULL
-);
-
-
---
--- Name: grid_custom_columns; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE grid_custom_columns (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    code character varying(200) NOT NULL,
-    label column_label NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    expression grid_expression NOT NULL,
-    is_public boolean NOT NULL,
-    grid_id grid_id NOT NULL
-);
-
-
---
--- Name: grid_custom_columns_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE grid_custom_columns_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: grid_custom_columns_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('grid_custom_columns_id_seq', 1, false);
-
-
---
--- Name: group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE group_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('group_id_seq', 1, true);
-
-
---
--- Name: groups; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE groups (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    dbin_id tech_id NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL
-);
-
-
---
--- Name: invalidation_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE invalidation_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: invalidation_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('invalidation_id_seq', 1, false);
-
-
---
--- Name: invalidations; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE invalidations (
-    id tech_id NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    reason description_2000
-);
-
-
---
--- Name: locator_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE locator_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: locator_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('locator_type_id_seq', 1, true);
-
-
---
--- Name: locator_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE locator_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000
-);
-
-
---
--- Name: material_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE material_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: material_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('material_id_seq', 1, false);
-
-
---
--- Name: material_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE material_properties (
-    id tech_id NOT NULL,
-    mate_id tech_id NOT NULL,
-    mtpt_id tech_id NOT NULL,
-    value generic_value,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    pers_id_registerer tech_id NOT NULL,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    CONSTRAINT mapr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: material_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE material_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: material_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('material_property_id_seq', 1, false);
-
-
---
--- Name: material_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE material_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: material_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('material_type_id_seq', 2, true);
-
-
---
--- Name: material_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE material_type_property_types (
-    id tech_id NOT NULL,
-    maty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: material_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE material_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: materials; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE materials (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    maty_id tech_id NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    dbin_id tech_id NOT NULL
-);
-
-
---
--- Name: mtpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE mtpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: mtpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('mtpt_id_seq', 1, false);
-
-
---
--- Name: perm_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE perm_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: perm_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('perm_id_seq', 100, true);
-
-
---
--- Name: person_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE person_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: person_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('person_id_seq', 14, true);
-
-
---
--- Name: persons; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE persons (
-    id tech_id NOT NULL,
-    first_name character varying(30),
-    last_name character varying(30),
-    user_id user_id NOT NULL,
-    email object_name,
-    dbin_id tech_id NOT NULL,
-    grou_id tech_id,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id,
-    display_settings file
-);
-
-
---
--- Name: project_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE project_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: project_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('project_id_seq', 1, true);
-
-
---
--- Name: projects; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE projects (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    grou_id tech_id NOT NULL,
-    pers_id_leader tech_id,
-    description description_2000,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: property_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE property_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: property_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('property_type_id_seq', 18, true);
-
-
---
--- Name: property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE property_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000 NOT NULL,
-    label column_label NOT NULL,
-    daty_id tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    covo_id tech_id,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    is_internal_namespace boolean_char DEFAULT false NOT NULL,
-    dbin_id tech_id NOT NULL,
-    maty_prop_id tech_id
-);
-
-
---
--- Name: queries; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE queries (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    name character varying(200) NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    expression character varying(2000) NOT NULL,
-    is_public boolean NOT NULL,
-    query_type query_type NOT NULL,
-    db_key code DEFAULT '1'::character varying NOT NULL
-);
-
-
---
--- Name: query_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE query_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: query_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('query_id_seq', 1, false);
-
-
---
--- Name: role_assignment_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE role_assignment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: role_assignment_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('role_assignment_id_seq', 9, true);
-
-
---
--- Name: role_assignments; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE role_assignments (
-    id tech_id NOT NULL,
-    role_code authorization_role NOT NULL,
-    grou_id tech_id,
-    dbin_id tech_id,
-    pers_id_grantee tech_id,
-    ag_id_grantee tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    CONSTRAINT roas_ag_pers_arc_ck CHECK ((((ag_id_grantee IS NOT NULL) AND (pers_id_grantee IS NULL)) OR ((ag_id_grantee IS NULL) AND (pers_id_grantee IS NOT NULL)))),
-    CONSTRAINT roas_dbin_grou_arc_ck CHECK ((((dbin_id IS NOT NULL) AND (grou_id IS NULL)) OR ((dbin_id IS NULL) AND (grou_id IS NOT NULL))))
-);
-
-
---
--- Name: sample_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE sample_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: sample_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('sample_id_seq', 1, true);
-
-
---
--- Name: sample_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE sample_properties (
-    id tech_id NOT NULL,
-    samp_id tech_id NOT NULL,
-    stpt_id tech_id NOT NULL,
-    value generic_value,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    CONSTRAINT sapr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: sample_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE sample_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: sample_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('sample_property_id_seq', 1, true);
-
-
---
--- Name: sample_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE sample_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: sample_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('sample_type_id_seq', 2, true);
-
-
---
--- Name: sample_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE sample_type_property_types (
-    id tech_id NOT NULL,
-    saty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    is_displayed boolean_char DEFAULT true NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: sample_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE sample_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    is_listable boolean_char DEFAULT true NOT NULL,
-    generated_from_depth integer DEFAULT 0 NOT NULL,
-    part_of_depth integer DEFAULT 0 NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_auto_generated_code boolean_char DEFAULT false NOT NULL,
-    generated_code_prefix code DEFAULT 'S'::character varying NOT NULL,
-    is_subcode_unique boolean_char DEFAULT false NOT NULL
-);
-
-
---
--- Name: samples; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE samples (
-    id tech_id NOT NULL,
-    perm_id code NOT NULL,
-    code code NOT NULL,
-    expe_id tech_id,
-    samp_id_top tech_id,
-    samp_id_generated_from tech_id,
-    saty_id tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    pers_id_registerer tech_id NOT NULL,
-    inva_id tech_id,
-    samp_id_control_layout tech_id,
-    dbin_id tech_id,
-    grou_id tech_id,
-    samp_id_part_of tech_id,
-    CONSTRAINT samp_dbin_grou_arc_ck CHECK ((((dbin_id IS NOT NULL) AND (grou_id IS NULL)) OR ((dbin_id IS NULL) AND (grou_id IS NOT NULL))))
-);
-
-
---
--- Name: stpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE stpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: stpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('stpt_id_seq', 18, true);
-
-
---
--- Data for Name: attachment_contents; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY attachment_contents (id, value) FROM stdin;
-\.
-
-
---
--- Data for Name: attachments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY attachments (id, expe_id, samp_id, proj_id, exac_id, file_name, registration_timestamp, version, pers_id_registerer, title, description) FROM stdin;
-\.
-
-
---
--- Data for Name: authorization_group_persons; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY authorization_group_persons (ag_id, pers_id) FROM stdin;
-1	8
-1	9
-1	7
-1	5
-2	4
-2	6
-2	10
-2	11
-2	12
-2	13
-\.
-
-
---
--- Data for Name: authorization_groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY authorization_groups (id, dbin_id, code, description, registration_timestamp, pers_id_registerer, modification_timestamp) FROM stdin;
-1	1	YEAST_LAB_USERS	\N	2010-05-31 13:56:09.374057+02	1	2010-05-31 21:13:25.907+02
-2	1	CISD_ADMINS	\N	2010-05-31 21:13:52.3511+02	1	2010-06-01 10:00:46.224+02
-\.
-
-
---
--- Data for Name: controlled_vocabularies; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY controlled_vocabularies (id, code, description, registration_timestamp, pers_id_registerer, is_managed_internally, is_internal_namespace, dbin_id, modification_timestamp, is_chosen_from_list, source_uri) FROM stdin;
-1	STORAGE_FORMAT	The on-disk storage format of a data set	2010-05-26 13:38:36.62686+02	1	t	t	1	2010-05-26 13:38:36.62686+02	t	\N
-2	OWNER	\N	2010-05-26 17:29:55.9819+02	1	f	f	1	2010-05-26 17:29:56.019+02	t	\N
-5	BACTERIAL_ANTIBIOTIC_RESISTANCE	Bacterial Antibiotic Resistance	2010-05-26 17:37:11.497201+02	1	f	f	1	2010-05-26 17:37:11.497+02	t	\N
-4	YEAST_MARKER	Yeast Marker	2010-05-26 17:35:36.30475+02	1	f	f	1	2010-05-26 17:35:36.305+02	t	\N
-3	BACKBONE	\N	2010-05-26 17:32:30.058024+02	1	f	f	1	2010-05-26 17:32:30.058+02	t	\N
-6	BOX_SIZE	\N	2010-05-26 21:54:23.206312+02	1	f	f	1	2010-05-27 17:48:35.162+02	t	\N
-7	STORAGE_POSITION_ROW	Row in the Box	2010-05-27 17:58:08.636202+02	1	f	f	1	2010-05-27 17:58:08.651+02	t	\N
-\.
-
-
---
--- Data for Name: controlled_vocabulary_terms; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY controlled_vocabulary_terms (id, code, registration_timestamp, covo_id, pers_id_registerer, label, description, ordinal) FROM stdin;
-1	PROPRIETARY	2010-05-26 13:38:36.62686+02	1	1	\N	\N	1
-2	BDS_DIRECTORY	2010-05-26 13:38:36.62686+02	1	1	\N	\N	2
-3	FABIAN_RUDOLF	2010-05-26 17:29:55.9819+02	2	1	Fabian Rudolf	\N	1
-4	KRISTINA_ELFSTROM	2010-05-26 17:29:55.9819+02	2	1	Kristina Elfström	\N	2
-5	DIANA_OTTOZ	2010-05-26 17:29:55.9819+02	2	1	Diana Ottoz	\N	3
-6	BEATA_MIERZWA	2010-05-26 17:29:55.9819+02	2	1	Beata Mierzwa	\N	4
-8	MAREIKE_BONGERS	2010-05-26 17:29:55.9819+02	2	1	Mareike Bongers	\N	6
-9	MARIO_MARICHISIO	2010-05-26 17:29:55.9819+02	2	1	Mario Marchisio	\N	7
-11	PBSN	2010-05-26 17:32:30.058024+02	3	1	pBSN	\N	2
-12	PSPPOLY_A	2010-05-26 17:32:30.058024+02	3	1	pSPpoly(A)	\N	3
-13	PF6A	2010-05-26 17:32:30.058024+02	3	1	pF6a	\N	4
-14	PKERG10Y	2010-05-26 17:32:30.058024+02	3	1	pKERG10y	\N	5
-15	PKERG11Y	2010-05-26 17:32:30.058024+02	3	1	pKERG11y	\N	6
-16	PKERG12Y	2010-05-26 17:32:30.058024+02	3	1	pKERG12y	\N	7
-17	PKERG20Y	2010-05-26 17:32:30.058024+02	3	1	pKERG20y	\N	8
-18	PKERG21Y	2010-05-26 17:32:30.058024+02	3	1	pKERG21y	\N	9
-19	PKERG22Y	2010-05-26 17:32:30.058024+02	3	1	pKERG22y	\N	10
-20	PRS30Y	2010-05-26 17:32:30.058024+02	3	1	pRS30y	\N	11
-21	PRS31Y	2010-05-26 17:32:30.058024+02	3	1	pRS31y	\N	12
-22	PRS40Y	2010-05-26 17:32:30.058024+02	3	1	pRS40y	\N	13
-23	PRS41Y	2010-05-26 17:32:30.058024+02	3	1	pRS41y	\N	14
-24	PRS42Y	2010-05-26 17:32:30.058024+02	3	1	pRS42y	\N	15
-25	PET22B	2010-05-26 17:32:30.058024+02	3	1	pET22b	\N	16
-26	UNKNOWN	2010-05-26 17:32:30.058024+02	3	1	(unknown)	\N	17
-27	URA3	2010-05-26 17:35:36.30475+02	4	1	URA3	\N	1
-28	HIS3	2010-05-26 17:35:36.30475+02	4	1	HIS3	\N	2
-29	LEU2	2010-05-26 17:35:36.30475+02	4	1	LEU2	\N	3
-30	TRP1	2010-05-26 17:35:36.30475+02	4	1	TRP1	\N	4
-31	MET15	2010-05-26 17:35:36.30475+02	4	1	MET15	\N	5
-32	LYS2	2010-05-26 17:35:36.30475+02	4	1	LYS2	\N	6
-33	ADE1	2010-05-26 17:35:36.30475+02	4	1	ADE1	\N	7
-34	KANMX	2010-05-26 17:35:36.30475+02	4	1	KanMX	\N	8
-35	NATMX	2010-05-26 17:35:36.30475+02	4	1	NatMX	\N	9
-36	HYGMX	2010-05-26 17:35:36.30475+02	4	1	HygMX	\N	10
-37	URA3MX	2010-05-26 17:35:36.30475+02	4	1	Ura3MX	\N	11
-38	HIS3MX	2010-05-26 17:35:36.30475+02	4	1	His3MX	\N	12
-39	BLA	2010-05-26 17:37:11.497201+02	5	1	\N	\N	1
-40	KAN	2010-05-26 17:37:11.497201+02	5	1	\N	\N	2
-41	CAM	2010-05-26 17:37:11.497201+02	5	1	\N	\N	3
-7	ROBERT_GNUGGE	2010-05-26 17:29:55.9819+02	2	1	Robert Gnuegge	\N	5
-44	96_WELL	2010-05-27 17:48:24.846982+02	6	1	96 Well (8x12)	\N	2
-45	384_WELL	2010-05-27 17:48:35.150109+02	6	1	384 Well (16x24)	\N	3
-46	A	2010-05-27 17:58:08.636202+02	7	1	\N	\N	1
-47	B	2010-05-27 17:58:08.636202+02	7	1	\N	\N	2
-48	C	2010-05-27 17:58:08.636202+02	7	1	\N	\N	3
-49	D	2010-05-27 17:58:08.636202+02	7	1	\N	\N	4
-50	E	2010-05-27 17:58:08.636202+02	7	1	\N	\N	5
-51	F	2010-05-27 17:58:08.636202+02	7	1	\N	\N	6
-52	G	2010-05-27 17:58:08.636202+02	7	1	\N	\N	7
-53	H	2010-05-27 17:58:08.636202+02	7	1	\N	\N	8
-54	I	2010-05-27 17:58:08.636202+02	7	1	\N	\N	9
-55	J	2010-05-27 17:58:08.636202+02	7	1	\N	\N	10
-56	K	2010-05-27 17:58:08.636202+02	7	1	\N	\N	11
-57	L	2010-05-27 17:58:08.636202+02	7	1	\N	\N	12
-58	M	2010-05-27 17:58:08.636202+02	7	1	\N	\N	13
-59	N	2010-05-27 17:58:08.636202+02	7	1	\N	\N	14
-60	O	2010-05-27 17:58:08.636202+02	7	1	\N	\N	15
-61	P	2010-05-27 17:58:08.636202+02	7	1	\N	\N	16
-10	PBLUESCRIPT_II_KS_PLUS	2010-05-26 17:32:30.058024+02	3	1	pBluescript II KS +	\N	1
-42	81_BOX	2010-05-26 21:54:23.206312+02	6	1	81 Box (9x9)	\N	1
-\.
-
-
---
--- Data for Name: data; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data (id, code, dsty_id, dast_id, expe_id, data_producer_code, production_timestamp, samp_id, registration_timestamp, is_placeholder, is_valid, modification_timestamp, is_derived) FROM stdin;
-\.
-
-
---
--- Data for Name: data_set_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_properties (id, ds_id, dstpt_id, value, cvte_id, mate_prop_id, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: data_set_relationships; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_relationships (data_id_parent, data_id_child) FROM stdin;
-\.
-
-
---
--- Data for Name: data_set_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_type_property_types (id, dsty_id, prty_id, is_mandatory, is_managed_internally, pers_id_registerer, registration_timestamp, ordinal, section) FROM stdin;
-1	1	17	t	f	1	2010-05-30 12:56:12.273594+02	1	\N
-2	2	17	t	f	1	2010-05-30 12:56:22.039873+02	1	\N
-3	3	17	t	f	1	2010-05-30 12:56:29.902648+02	1	\N
-4	4	17	t	f	1	2010-05-30 12:56:29.902648+02	1	\N
-\.
-
-
---
--- Data for Name: data_set_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_types (id, code, description, dbin_id, modification_timestamp, main_ds_pattern, main_ds_path) FROM stdin;
-1	UNKNOWN	\N	1	2010-05-26 17:41:21.272491+02	\N	\N
-2	SEQ_FILE	\N	1	2010-05-26 17:41:21.272491+02	generated\*.svg	\N
-3	RAW_DATA	\N	1	2010-05-26 17:41:58.696032+02	\N	\N
-4	VERIFICATION	\N	1	2010-05-26 17:42:07.328466+02	*.*	\N
-\.
-
-
---
--- Data for Name: data_store_service_data_set_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_store_service_data_set_types (data_store_service_id, data_set_type_id) FROM stdin;
-\.
-
-
---
--- Data for Name: data_store_services; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_store_services (id, key, label, kind, data_store_id) FROM stdin;
-\.
-
-
---
--- Data for Name: data_stores; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_stores (id, dbin_id, code, download_url, remote_url, session_token, registration_timestamp, modification_timestamp, is_archiver_configured) FROM stdin;
-1	1	DSS1	http://localhost:8889	http://127.0.0.1:8889	100602084423180-FD91B3AB8DF8337EC55D3A7443C03192	2010-05-26 13:38:36.62686+02	2010-06-02 08:44:23.384+02	f
-\.
-
-
---
--- Data for Name: data_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_types (id, code, description) FROM stdin;
-1	VARCHAR	Short text
-2	MULTILINE_VARCHAR	Long text
-3	INTEGER	Integer number
-4	REAL	Real number, i.e. an inexact, variable-precision numeric type
-5	BOOLEAN	True or False
-6	TIMESTAMP	Both date and time. Format: yyyy-mm-dd hh:mm:ss
-7	CONTROLLEDVOCABULARY	Controlled Vocabulary
-8	MATERIAL	Reference to a material
-9	HYPERLINK	Address of a web page
-\.
-
-
---
--- Data for Name: database_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY database_instances (id, code, uuid, is_original_source, registration_timestamp) FROM stdin;
-1	CSB	7ABDB8A8-969C-4E83-BC56-487752B8E6B7	t	2010-05-26 13:38:36.62686+02
-\.
-
-
---
--- Data for Name: database_version_logs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY database_version_logs (db_version, module_name, run_status, run_status_timestamp, module_code, run_exception) FROM stdin;
-053	./source//sql/postgresql/migration/migration-052-053.sql	SUCCESS	2010-06-07 08:14:25.176	-- Migration from 052 to 053\\012\\012-- Change code uniqueness check for samples of specific type.\\012-- If sample_types.is_unique_code flag is set to 'true', codes of samples of the type will need to\\012-- be unique no matter if they are contained in a container or not. Otherwise standard uniqueness \\012-- check is performed (taking container connection into consideration).\\012\\012ALTER TABLE sample_types ADD COLUMN is_unique_code boolean_char NOT NULL DEFAULT false;\\012\\012CREATE OR REPLACE FUNCTION SAMPLE_CODE_UNIQUENESS_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   counter  INTEGER;\\012   unique_type_code  BOOLEAN_CHAR;\\012BEGIN\\012  LOCK TABLE samples IN EXCLUSIVE MODE;\\012  \\012  SELECT is_unique_code into unique_type_code FROM sample_types WHERE id = NEW.saty_id;\\012  \\012  IF (unique_type_code) THEN\\012    IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and saty_id = NEW.saty_id and dbin_id = NEW.dbin_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample of the same type with the same code already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011ELSIF (NEW.grou_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and saty_id = NEW.saty_id and grou_id = NEW.grou_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample of the same type with the same code already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011END IF;\\012  ELSE \\011\\012\\011  IF (NEW.samp_id_part_of is NULL) THEN\\012\\011\\011  IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011  SELECT count(*) into counter FROM samples \\012\\011\\011      where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and dbin_id = NEW.dbin_id;\\012        IF (counter > 0) THEN\\012\\011\\011\\011\\011  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code already exists.', NEW.code;\\012        END IF;\\012\\011\\011  ELSIF (NEW.grou_id is not NULL) THEN\\012\\011\\011\\011  SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011  where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and grou_id = NEW.grou_id;\\012\\011\\011\\011  IF (counter > 0) THEN\\012\\011\\011\\011\\011  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample with the same code already exists.', NEW.code;\\012\\011\\011\\011  END IF;\\012      END IF;\\012    ELSE\\012\\011\\011  IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011  SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011  where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and dbin_id = NEW.dbin_id;\\012\\011\\011\\011  IF (counter > 0) THEN\\012\\011\\011\\011\\011  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code and being the part of the same container already exists.', NEW.code;\\012\\011\\011\\011  END IF;\\012\\011\\011  ELSIF (NEW.grou_id is not NULL) THEN\\012\\011\\011\\011  SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011  where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and grou_id = NEW.grou_id;\\012\\011\\011\\011  IF (counter > 0) THEN\\012\\011\\011\\011\\011  RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample with the same code and being the part of the same container already exists.', NEW.code;\\012\\011\\011\\011  END IF;\\012\\011\\011  END IF;\\012     END IF;   \\012  END IF;\\012  \\012  RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012	\N
-\.
-
-
---
--- Data for Name: events; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY events (id, event_type, description, reason, pers_id_registerer, registration_timestamp, entity_type, identifier) FROM stdin;
-\.
-
-
---
--- Data for Name: experiment_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiment_properties (id, expe_id, etpt_id, value, cvte_id, mate_prop_id, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: experiment_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiment_type_property_types (id, exty_id, prty_id, is_mandatory, is_managed_internally, pers_id_registerer, registration_timestamp, ordinal, section) FROM stdin;
-\.
-
-
---
--- Data for Name: experiment_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiment_types (id, code, description, dbin_id, modification_timestamp) FROM stdin;
-1	PLASMID	\N	1	2010-05-26 13:41:56.662019+02
-\.
-
-
---
--- Data for Name: experiments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiments (id, perm_id, code, exty_id, mate_id_study_object, pers_id_registerer, registration_timestamp, modification_timestamp, proj_id, inva_id, is_public) FROM stdin;
-1	20100526134230750-1	EXP_1	1	\N	1	2010-05-26 13:42:30.711108+02	2010-05-31 13:46:27.159+02	1	\N	f
-\.
-
-
---
--- Data for Name: external_data; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY external_data (data_id, location, ffty_id, loty_id, cvte_id_stor_fmt, is_complete, cvte_id_store, status) FROM stdin;
-\.
-
-
---
--- Data for Name: file_format_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY file_format_types (id, code, description, dbin_id) FROM stdin;
-1	PROPRIETARY	Proprietary File Format	1
-2	DIRECTORY		1
-3	GB		1
-4	FASTA		1
-5	XDNA		1
-6	AB1		1
-7	FA		1
-\.
-
-
---
--- Data for Name: filters; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY filters (id, dbin_id, name, description, registration_timestamp, pers_id_registerer, modification_timestamp, expression, is_public, grid_id) FROM stdin;
-\.
-
-
---
--- Data for Name: grid_custom_columns; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY grid_custom_columns (id, dbin_id, code, label, description, registration_timestamp, pers_id_registerer, modification_timestamp, expression, is_public, grid_id) FROM stdin;
-\.
-
-
---
--- Data for Name: groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY groups (id, code, dbin_id, description, registration_timestamp, pers_id_registerer) FROM stdin;
-1	YEAST_LAB	1	\N	2010-05-26 13:40:16.222552+02	1
-\.
-
-
---
--- Data for Name: invalidations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY invalidations (id, pers_id_registerer, registration_timestamp, reason) FROM stdin;
-\.
-
-
---
--- Data for Name: locator_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY locator_types (id, code, description) FROM stdin;
-1	RELATIVE_LOCATION	Relative Location
-\.
-
-
---
--- Data for Name: material_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY material_properties (id, mate_id, mtpt_id, value, registration_timestamp, modification_timestamp, pers_id_registerer, cvte_id, mate_prop_id) FROM stdin;
-\.
-
-
---
--- Data for Name: material_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY material_type_property_types (id, maty_id, prty_id, is_mandatory, is_managed_internally, registration_timestamp, pers_id_registerer, ordinal, section) FROM stdin;
-\.
-
-
---
--- Data for Name: material_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY material_types (id, code, description, dbin_id, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: materials; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY materials (id, code, maty_id, pers_id_registerer, registration_timestamp, modification_timestamp, dbin_id) FROM stdin;
-\.
-
-
---
--- Data for Name: persons; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY persons (id, first_name, last_name, user_id, email, dbin_id, grou_id, registration_timestamp, pers_id_registerer, display_settings) FROM stdin;
-6	Tomasz Ryszard	Pylak	tpylak	tomasz.pylak@bsse.ethz.ch	1	1	2010-05-28 14:15:04.232136+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-7	Robert	Gnügge	rgnuegge	robert.gnuegge@bsse.ethz.ch	1	1	2010-05-31 15:49:28.331889+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-8	Kristina	Elfström	elfstrok	kristina.elfstroem@bsse.ethz.ch	1	1	2010-05-31 15:50:01.381873+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-9	Diana Silvia Marina	Ottoz	ottozd	diana.ottoz@bsse.ethz.ch	1	1	2010-05-31 17:04:02.897602+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-14		ETL server	etlserver_csb	piotr.buczek@bsse.ethz.ch	1	1	2010-06-01 13:59:41.111995+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-5	Fabian	Rudolf	rudolff	fabian.rudolf@bsse.ethz.ch	1	1	2010-05-27 17:13:31.758869+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-10	Izabela Maria	Adamczyk	izabelaa	izabela.adamczyk@bsse.ethz.ch	1	1	2010-06-01 09:53:00.914766+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-11	Bernd	Rinn	brinn	bernd.rinn@bsse.ethz.ch	1	1	2010-06-01 09:59:37.172417+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-12	Franz-Josef	Elmer	felmer	franz-josef.elmer@bsse.ethz.ch	1	1	2010-06-01 10:00:46.008847+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-13	Chandrasekhar	Ramakrishnan	cramakri	cramakri@inf.ethz.ch	1	1	2010-06-01 10:00:46.008847+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-4	Piotr	Buczek	buczekp	piotr.buczek@bsse.ethz.ch	1	1	2010-05-27 15:54:23.647329+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-1		System User	system		1	1	2010-05-26 13:38:36.62686+02	\N	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\030w\\010\\000\\000\\000 \\000\\000\\000\\015t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\036w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\206q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000ht\\000\\007SUBCODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\351t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000it\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\000\\000\\000\\000\\000Wt\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000Pt\\000\\007PROJECTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\001\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\001\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\001\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\001\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\001\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\001\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\001\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\001\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\001\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\247t\\000\\020containerParent1sq\\000~\\000\\012\\000\\000\\000\\000\\000\\332t\\000\\024generatedFromParent1xt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\026w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\267q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\001\\000\\000\\000\\000\\347q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000it\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\001\\000\\000\\000\\000\\216t\\000\\027property-USER-FILE_NAMExt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\240sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\246sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\257sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\261sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\273sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\000\\000\\000\\000\\332q\\000~\\000\\217sq\\000~\\000\\012\\001\\000\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\000\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\000\\000\\000\\000)q\\000~\\000\\207sq\\000~\\000\\012\\000\\000\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\000\\000\\000\\000|q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000\\200q\\000~\\000ssq\\000~\\000\\012\\000\\000\\000\\000\\000mq\\000~\\000usq\\000~\\000\\012\\000\\000\\000\\000\\000\\357q\\000~\\000wsq\\000~\\000\\012\\001\\000\\000\\000\\000\\200q\\000~\\000{sq\\000~\\000\\012\\000\\000\\000\\000\\000\\177q\\000~\\000\\177sq\\000~\\000\\012\\000\\000\\000\\000\\000aq\\000~\\000\\201sq\\000~\\000\\012\\000\\000\\000\\000\\000\\301q\\000~\\000\\203sq\\000~\\000\\012\\000\\000\\000\\000\\000\\303q\\000~\\000ysq\\000~\\000\\012\\000\\000\\000\\000\\0018q\\000~\\000\\205xt\\000,sample-details-grid-SAMPLE-(all)-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000\\215sq\\000~\\000\\012\\000\\001\\000\\000\\0000q\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000@q\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000Eq\\000~\\000\\217sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205xt\\000&entity-browser-grid-SAMPLE-PLASMID_BOXsq\\000~\\000\\010\\000\\000\\000\\020w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\247q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\000\\000\\000\\000xq\\000~\\000\\213xt\\000\\027attachment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\007w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\011FILE_NAMEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010PERMLINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007VERSIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\005TITLEsq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\004t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\001t\\0003attachment-sectiongeneric-sample-viewer-PLASMID_BOXsq\\000~\\001E\\000t\\000+sample-sectiongeneric-sample-viewer-PLASMIDq\\000~\\001Ht\\0001data-set-sectiongeneric-sample-viewer-PLASMID_BOXq\\000~\\001Hx
-\.
-
-
---
--- Data for Name: projects; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY projects (id, code, grou_id, pers_id_leader, description, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-1	PLASMIDS	1	\N	\N	1	2010-05-26 13:40:44.011979+02	2010-05-26 13:42:30.763+02
-\.
-
-
---
--- Data for Name: property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY property_types (id, code, description, label, daty_id, registration_timestamp, pers_id_registerer, covo_id, is_managed_internally, is_internal_namespace, dbin_id, maty_prop_id) FROM stdin;
-2	OWNER	Owner	Owner	7	2010-05-26 17:43:09.455462+02	1	2	f	f	1	\N
-3	OWNER_NUMBER	Owner Number	Owner Number	1	2010-05-26 17:44:12.71825+02	1	\N	f	f	1	\N
-4	PLASMID_NAME	Plasmid Name	Plasmid Name	1	2010-05-26 17:44:49.704455+02	1	\N	f	f	1	\N
-5	BACKBONE	Backbone	Backbone	7	2010-05-26 17:45:12.139095+02	1	3	f	f	1	\N
-6	BACTERIAL_ANTIBIOTIC_RESISTANCE	Bacterial Antibiotic Resistance	Bacterial Antibiotic Resistance	7	2010-05-26 17:46:13.565449+02	1	5	f	f	1	\N
-7	YEAST_MARKER	(Yeast) Marker	(Yeast) Marker	7	2010-05-26 17:46:45.413022+02	1	4	f	f	1	\N
-8	OTHER_MARKER	Other Marker	Other Marker	1	2010-05-26 17:47:27.064274+02	1	\N	f	f	1	\N
-9	FLANKING_RESTRICTION_ENZYMES	Flanking Restriction Enzymes	Flanking Restriction Enzymes	1	2010-05-26 17:47:52.936812+02	1	\N	f	f	1	\N
-10	COMMENTS	Comments	Comments	2	2010-05-26 17:48:11.007632+02	1	\N	f	f	1	\N
-15	BOX_SIZE	Box Size	Box Size	7	2010-05-26 21:54:56.547721+02	1	6	f	f	1	\N
-13	COLUMN	Column number in the Box	Column	3	2010-05-26 18:38:35.546129+02	1	\N	f	f	1	\N
-16	ROW	Row letter in the Box	Row	7	2010-05-27 17:58:56.942478+02	1	7	f	f	1	\N
-14	DERIVATIVE_OF	Codes (separated by commas) of those Plasmids that the current Plasmid is a combination of. One of the Plasmid is the Parent.	Derivative Of	1	2010-05-26 21:45:36.120436+02	1	\N	f	f	1	\N
-17	FILE_NAME	Name of the original file stored in DSS	Original File Name	1	2010-05-30 12:55:28.819182+02	1	\N	f	f	1	\N
-\.
-
-
---
--- Data for Name: queries; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY queries (id, dbin_id, name, description, registration_timestamp, pers_id_registerer, modification_timestamp, expression, is_public, query_type, db_key) FROM stdin;
-\.
-
-
---
--- Data for Name: role_assignments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY role_assignments (id, role_code, grou_id, dbin_id, pers_id_grantee, ag_id_grantee, pers_id_registerer, registration_timestamp) FROM stdin;
-1	ADMIN	\N	1	1	\N	1	2010-05-26 13:39:42.830149+02
-7	USER	1	\N	\N	1	1	2010-05-31 13:56:25.85998+02
-6	ADMIN	\N	1	5	\N	1	2010-05-27 21:11:29.554356+02
-8	ADMIN	\N	1	\N	2	1	2010-05-31 21:14:11.261376+02
-9	ETL_SERVER	\N	1	14	\N	1	2010-06-01 14:00:28.560623+02
-\.
-
-
---
--- Data for Name: sample_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY sample_properties (id, samp_id, stpt_id, value, cvte_id, mate_prop_id, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: sample_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY sample_type_property_types (id, saty_id, prty_id, is_mandatory, is_managed_internally, pers_id_registerer, registration_timestamp, is_displayed, ordinal, section) FROM stdin;
-1	1	16	t	f	1	2010-05-27 17:59:42.28433+02	t	1	Storage Information
-2	1	13	t	f	1	2010-05-26 19:08:07.246686+02	t	2	Storage Information
-3	1	2	t	f	1	2010-05-26 19:13:10.256579+02	t	3	Plasmid Data
-4	1	3	f	f	1	2010-05-26 19:11:49.533054+02	t	4	Plasmid Data
-5	1	4	t	f	1	2010-05-26 19:14:56.30574+02	t	5	Plasmid Data
-6	1	5	t	f	1	2010-05-26 18:39:38.450567+02	t	6	Plasmid Data
-7	1	14	f	f	1	2010-05-26 21:46:21.937645+02	t	7	Plasmid Data
-8	1	6	t	f	1	2010-05-26 19:06:55.50256+02	t	8	Plasmid Data
-9	1	7	f	f	1	2010-05-26 19:15:29.812545+02	t	9	Plasmid Data
-10	1	8	f	f	1	2010-05-26 19:10:09.014083+02	t	10	Plasmid Data
-11	1	9	f	f	1	2010-05-26 19:10:01.329441+02	t	11	Plasmid Data
-12	1	10	f	f	1	2010-05-26 19:09:07.086779+02	t	12	Plasmid Data
-20	2	15	t	f	1	2010-05-26 21:55:14.652494+02	t	1	\N
-\.
-
-
---
--- Data for Name: sample_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY sample_types (id, code, description, dbin_id, is_listable, generated_from_depth, part_of_depth, modification_timestamp, is_auto_generated_code, generated_code_prefix, is_subcode_unique) FROM stdin;
-1	PLASMID	\N	1	t	1	1	2010-05-26 13:43:50.663104+02	f	FRP_	t
-2	PLASMID_BOX	\N	1	t	0	0	2010-05-26 21:51:13.659151+02	f	BOX_	t
-\.
-
-
---
--- Data for Name: samples; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY samples (id, perm_id, code, expe_id, samp_id_top, samp_id_generated_from, saty_id, registration_timestamp, modification_timestamp, pers_id_registerer, inva_id, samp_id_control_layout, dbin_id, grou_id, samp_id_part_of) FROM stdin;
-\.
-
-
---
--- Name: ag_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: ag_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_pk PRIMARY KEY (id);
-
-
---
--- Name: agp_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY authorization_group_persons
-    ADD CONSTRAINT agp_pk PRIMARY KEY (pers_id, ag_id);
-
-
---
--- Name: atta_expe_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_expe_bk_uk UNIQUE (expe_id, file_name, version);
-
-
---
--- Name: atta_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_pk PRIMARY KEY (id);
-
-
---
--- Name: atta_proj_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_proj_bk_uk UNIQUE (proj_id, file_name, version);
-
-
---
--- Name: atta_samp_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_samp_bk_uk UNIQUE (samp_id, file_name, version);
-
-
---
--- Name: covo_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_bk_uk UNIQUE (code, is_internal_namespace, dbin_id);
-
-
---
--- Name: covo_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_pk PRIMARY KEY (id);
-
-
---
--- Name: cvte_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_bk_uk UNIQUE (code, covo_id);
-
-
---
--- Name: cvte_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_pk PRIMARY KEY (id);
-
-
---
--- Name: dast_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_stores
-    ADD CONSTRAINT dast_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: dast_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_stores
-    ADD CONSTRAINT dast_pk PRIMARY KEY (id);
-
-
---
--- Name: data_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_bk_uk UNIQUE (code);
-
-
---
--- Name: data_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_pk PRIMARY KEY (id);
-
-
---
--- Name: daty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_types
-    ADD CONSTRAINT daty_bk_uk UNIQUE (code);
-
-
---
--- Name: daty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_types
-    ADD CONSTRAINT daty_pk PRIMARY KEY (id);
-
-
---
--- Name: dbin_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY database_instances
-    ADD CONSTRAINT dbin_bk_uk UNIQUE (code);
-
-
---
--- Name: dbin_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY database_instances
-    ADD CONSTRAINT dbin_pk PRIMARY KEY (id);
-
-
---
--- Name: dbin_uuid_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY database_instances
-    ADD CONSTRAINT dbin_uuid_uk UNIQUE (uuid);
-
-
---
--- Name: dspr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_bk_uk UNIQUE (ds_id, dstpt_id);
-
-
---
--- Name: dspr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_pk PRIMARY KEY (id);
-
-
---
--- Name: dsre_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_relationships
-    ADD CONSTRAINT dsre_bk_uk UNIQUE (data_id_child, data_id_parent);
-
-
---
--- Name: dssdst_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_store_service_data_set_types
-    ADD CONSTRAINT dssdst_bk_uk UNIQUE (data_store_service_id, data_set_type_id);
-
-
---
--- Name: dsse_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_store_services
-    ADD CONSTRAINT dsse_bk_uk UNIQUE (key, data_store_id);
-
-
---
--- Name: dsse_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_store_services
-    ADD CONSTRAINT dsse_pk PRIMARY KEY (id);
-
-
---
--- Name: dstpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_bk_uk UNIQUE (dsty_id, prty_id);
-
-
---
--- Name: dstpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_pk PRIMARY KEY (id);
-
-
---
--- Name: dsty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_types
-    ADD CONSTRAINT dsty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: dsty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_types
-    ADD CONSTRAINT dsty_pk PRIMARY KEY (id);
-
-
---
--- Name: etpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_bk_uk UNIQUE (exty_id, prty_id);
-
-
---
--- Name: etpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_pk PRIMARY KEY (id);
-
-
---
--- Name: evnt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY events
-    ADD CONSTRAINT evnt_pk PRIMARY KEY (id);
-
-
---
--- Name: exac_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachment_contents
-    ADD CONSTRAINT exac_pk PRIMARY KEY (id);
-
-
---
--- Name: exda_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_bk_uk UNIQUE (location, loty_id);
-
-
---
--- Name: exda_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_pk PRIMARY KEY (data_id);
-
-
---
--- Name: expe_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_bk_uk UNIQUE (code, proj_id);
-
-
---
--- Name: expe_pi_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_pi_uk UNIQUE (perm_id);
-
-
---
--- Name: expe_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_pk PRIMARY KEY (id);
-
-
---
--- Name: expr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_bk_uk UNIQUE (expe_id, etpt_id);
-
-
---
--- Name: expr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_pk PRIMARY KEY (id);
-
-
---
--- Name: exty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_types
-    ADD CONSTRAINT exty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: exty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_types
-    ADD CONSTRAINT exty_pk PRIMARY KEY (id);
-
-
---
--- Name: ffty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY file_format_types
-    ADD CONSTRAINT ffty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: ffty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY file_format_types
-    ADD CONSTRAINT ffty_pk PRIMARY KEY (id);
-
-
---
--- Name: filt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_bk_uk UNIQUE (name, dbin_id, grid_id);
-
-
---
--- Name: filt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_pk PRIMARY KEY (id);
-
-
---
--- Name: grid_custom_columns_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_bk_uk UNIQUE (code, dbin_id, grid_id);
-
-
---
--- Name: grid_custom_columns_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_pk PRIMARY KEY (id);
-
-
---
--- Name: grou_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: grou_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_pk PRIMARY KEY (id);
-
-
---
--- Name: inva_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY invalidations
-    ADD CONSTRAINT inva_pk PRIMARY KEY (id);
-
-
---
--- Name: loty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY locator_types
-    ADD CONSTRAINT loty_bk_uk UNIQUE (code);
-
-
---
--- Name: loty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY locator_types
-    ADD CONSTRAINT loty_pk PRIMARY KEY (id);
-
-
---
--- Name: mapr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_bk_uk UNIQUE (mate_id, mtpt_id);
-
-
---
--- Name: mapr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_pk PRIMARY KEY (id);
-
-
---
--- Name: mate_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_bk_uk UNIQUE (code, maty_id, dbin_id);
-
-
---
--- Name: mate_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_pk PRIMARY KEY (id);
-
-
---
--- Name: maty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_types
-    ADD CONSTRAINT maty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: maty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_types
-    ADD CONSTRAINT maty_pk PRIMARY KEY (id);
-
-
---
--- Name: mtpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_bk_uk UNIQUE (maty_id, prty_id);
-
-
---
--- Name: mtpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_pk PRIMARY KEY (id);
-
-
---
--- Name: pers_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_bk_uk UNIQUE (dbin_id, user_id);
-
-
---
--- Name: pers_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_pk PRIMARY KEY (id);
-
-
---
--- Name: proj_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_bk_uk UNIQUE (code, grou_id);
-
-
---
--- Name: proj_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_pk PRIMARY KEY (id);
-
-
---
--- Name: prty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_bk_uk UNIQUE (code, is_internal_namespace, dbin_id);
-
-
---
--- Name: prty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_pk PRIMARY KEY (id);
-
-
---
--- Name: quer_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_bk_uk UNIQUE (name, dbin_id);
-
-
---
--- Name: quer_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_pk PRIMARY KEY (id);
-
-
---
--- Name: roas_ag_group_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_ag_group_bk_uk UNIQUE (ag_id_grantee, role_code, grou_id);
-
-
---
--- Name: roas_ag_instance_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_ag_instance_bk_uk UNIQUE (ag_id_grantee, role_code, dbin_id);
-
-
---
--- Name: roas_pe_group_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pe_group_bk_uk UNIQUE (pers_id_grantee, role_code, grou_id);
-
-
---
--- Name: roas_pe_instance_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pe_instance_bk_uk UNIQUE (pers_id_grantee, role_code, dbin_id);
-
-
---
--- Name: roas_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pk PRIMARY KEY (id);
-
-
---
--- Name: samp_pi_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_pi_uk UNIQUE (perm_id);
-
-
---
--- Name: samp_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_pk PRIMARY KEY (id);
-
-
---
--- Name: sapr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_bk_uk UNIQUE (samp_id, stpt_id);
-
-
---
--- Name: sapr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_pk PRIMARY KEY (id);
-
-
---
--- Name: saty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_types
-    ADD CONSTRAINT saty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: saty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_types
-    ADD CONSTRAINT saty_pk PRIMARY KEY (id);
-
-
---
--- Name: stpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_bk_uk UNIQUE (saty_id, prty_id);
-
-
---
--- Name: stpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_pk PRIMARY KEY (id);
-
-
---
--- Name: atta_exac_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_exac_fk_i ON attachments USING btree (exac_id);
-
-
---
--- Name: atta_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_expe_fk_i ON attachments USING btree (expe_id);
-
-
---
--- Name: atta_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_pers_fk_i ON attachments USING btree (pers_id_registerer);
-
-
---
--- Name: atta_proj_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_proj_fk_i ON attachments USING btree (proj_id);
-
-
---
--- Name: atta_samp_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_samp_fk_i ON attachments USING btree (samp_id);
-
-
---
--- Name: covo_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX covo_pers_fk_i ON controlled_vocabularies USING btree (pers_id_registerer);
-
-
---
--- Name: cvte_covo_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX cvte_covo_fk_i ON controlled_vocabulary_terms USING btree (covo_id);
-
-
---
--- Name: cvte_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX cvte_pers_fk_i ON controlled_vocabulary_terms USING btree (pers_id_registerer);
-
-
---
--- Name: dast_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dast_dbin_fk_i ON data_stores USING btree (dbin_id);
-
-
---
--- Name: data_dsty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX data_dsty_fk_i ON data USING btree (dsty_id);
-
-
---
--- Name: data_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX data_expe_fk_i ON data USING btree (expe_id);
-
-
---
--- Name: data_samp_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX data_samp_fk_i ON data USING btree (samp_id);
-
-
---
--- Name: dspr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_cvte_fk_i ON data_set_properties USING btree (cvte_id);
-
-
---
--- Name: dspr_ds_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_ds_fk_i ON data_set_properties USING btree (ds_id);
-
-
---
--- Name: dspr_dstpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_dstpt_fk_i ON data_set_properties USING btree (dstpt_id);
-
-
---
--- Name: dspr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_pers_fk_i ON data_set_properties USING btree (pers_id_registerer);
-
-
---
--- Name: dsre_data_fk_i_child; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dsre_data_fk_i_child ON data_set_relationships USING btree (data_id_child);
-
-
---
--- Name: dsre_data_fk_i_parent; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dsre_data_fk_i_parent ON data_set_relationships USING btree (data_id_parent);
-
-
---
--- Name: dssdst_ds_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dssdst_ds_fk_i ON data_store_service_data_set_types USING btree (data_store_service_id);
-
-
---
--- Name: dssdst_dst_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dssdst_dst_fk_i ON data_store_service_data_set_types USING btree (data_set_type_id);
-
-
---
--- Name: dsse_ds_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dsse_ds_fk_i ON data_store_services USING btree (data_store_id);
-
-
---
--- Name: dstpt_dsty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dstpt_dsty_fk_i ON data_set_type_property_types USING btree (dsty_id);
-
-
---
--- Name: dstpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dstpt_pers_fk_i ON data_set_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: dstpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dstpt_prty_fk_i ON data_set_type_property_types USING btree (prty_id);
-
-
---
--- Name: etpt_exty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX etpt_exty_fk_i ON experiment_type_property_types USING btree (exty_id);
-
-
---
--- Name: etpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX etpt_pers_fk_i ON experiment_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: etpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX etpt_prty_fk_i ON experiment_type_property_types USING btree (prty_id);
-
-
---
--- Name: evnt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX evnt_pers_fk_i ON events USING btree (pers_id_registerer);
-
-
---
--- Name: exda_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_cvte_fk_i ON external_data USING btree (cvte_id_stor_fmt);
-
-
---
--- Name: exda_cvte_stored_on_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_cvte_stored_on_fk_i ON external_data USING btree (cvte_id_store);
-
-
---
--- Name: exda_ffty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_ffty_fk_i ON external_data USING btree (ffty_id);
-
-
---
--- Name: exda_loty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_loty_fk_i ON external_data USING btree (loty_id);
-
-
---
--- Name: expe_exty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_exty_fk_i ON experiments USING btree (exty_id);
-
-
---
--- Name: expe_inva_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_inva_fk_i ON experiments USING btree (inva_id);
-
-
---
--- Name: expe_mate_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_mate_fk_i ON experiments USING btree (mate_id_study_object);
-
-
---
--- Name: expe_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_pers_fk_i ON experiments USING btree (pers_id_registerer);
-
-
---
--- Name: expe_proj_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_proj_fk_i ON experiments USING btree (proj_id);
-
-
---
--- Name: expr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_cvte_fk_i ON experiment_properties USING btree (cvte_id);
-
-
---
--- Name: expr_etpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_etpt_fk_i ON experiment_properties USING btree (etpt_id);
-
-
---
--- Name: expr_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_expe_fk_i ON experiment_properties USING btree (expe_id);
-
-
---
--- Name: expr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_pers_fk_i ON experiment_properties USING btree (pers_id_registerer);
-
-
---
--- Name: filt_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX filt_dbin_fk_i ON filters USING btree (dbin_id);
-
-
---
--- Name: filt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX filt_pers_fk_i ON filters USING btree (pers_id_registerer);
-
-
---
--- Name: grid_custom_columns_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grid_custom_columns_dbin_fk_i ON grid_custom_columns USING btree (dbin_id);
-
-
---
--- Name: grid_custom_columns_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grid_custom_columns_pers_fk_i ON grid_custom_columns USING btree (pers_id_registerer);
-
-
---
--- Name: grou_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grou_dbin_fk_i ON groups USING btree (dbin_id);
-
-
---
--- Name: grou_pers_registered_by_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grou_pers_registered_by_fk_i ON groups USING btree (pers_id_registerer);
-
-
---
--- Name: inva_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX inva_pers_fk_i ON invalidations USING btree (pers_id_registerer);
-
-
---
--- Name: mapr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_cvte_fk_i ON material_properties USING btree (cvte_id);
-
-
---
--- Name: mapr_mate_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_mate_fk_i ON material_properties USING btree (mate_id);
-
-
---
--- Name: mapr_mtpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_mtpt_fk_i ON material_properties USING btree (mtpt_id);
-
-
---
--- Name: mapr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_pers_fk_i ON material_properties USING btree (pers_id_registerer);
-
-
---
--- Name: mate_maty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mate_maty_fk_i ON materials USING btree (maty_id);
-
-
---
--- Name: mate_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mate_pers_fk_i ON materials USING btree (pers_id_registerer);
-
-
---
--- Name: mtpt_maty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mtpt_maty_fk_i ON material_type_property_types USING btree (maty_id);
-
-
---
--- Name: mtpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mtpt_pers_fk_i ON material_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: mtpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mtpt_prty_fk_i ON material_type_property_types USING btree (prty_id);
-
-
---
--- Name: pers_grou_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX pers_grou_fk_i ON persons USING btree (grou_id);
-
-
---
--- Name: proj_grou_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX proj_grou_fk_i ON projects USING btree (grou_id);
-
-
---
--- Name: proj_pers_fk_i_leader; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX proj_pers_fk_i_leader ON projects USING btree (pers_id_leader);
-
-
---
--- Name: proj_pers_fk_i_registerer; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX proj_pers_fk_i_registerer ON projects USING btree (pers_id_registerer);
-
-
---
--- Name: prty_covo_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX prty_covo_fk_i ON property_types USING btree (covo_id);
-
-
---
--- Name: prty_daty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX prty_daty_fk_i ON property_types USING btree (daty_id);
-
-
---
--- Name: prty_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX prty_pers_fk_i ON property_types USING btree (pers_id_registerer);
-
-
---
--- Name: roas_ag_fk_i_grantee; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_ag_fk_i_grantee ON role_assignments USING btree (ag_id_grantee);
-
-
---
--- Name: roas_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_dbin_fk_i ON role_assignments USING btree (dbin_id);
-
-
---
--- Name: roas_grou_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_grou_fk_i ON role_assignments USING btree (grou_id);
-
-
---
--- Name: roas_pers_fk_i_grantee; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_pers_fk_i_grantee ON role_assignments USING btree (pers_id_grantee);
-
-
---
--- Name: roas_pers_fk_i_registerer; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_pers_fk_i_registerer ON role_assignments USING btree (pers_id_registerer);
-
-
---
--- Name: samp_code_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_code_i ON samples USING btree (code);
-
-
---
--- Name: samp_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_expe_fk_i ON samples USING btree (expe_id);
-
-
---
--- Name: samp_inva_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_inva_fk_i ON samples USING btree (inva_id);
-
-
---
--- Name: samp_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_pers_fk_i ON samples USING btree (pers_id_registerer);
-
-
---
--- Name: samp_samp_fk_i_control_layout; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_control_layout ON samples USING btree (samp_id_control_layout);
-
-
---
--- Name: samp_samp_fk_i_generated_from; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_generated_from ON samples USING btree (samp_id_generated_from);
-
-
---
--- Name: samp_samp_fk_i_part_of; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_part_of ON samples USING btree (samp_id_part_of);
-
-
---
--- Name: samp_samp_fk_i_top; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_top ON samples USING btree (samp_id_top);
-
-
---
--- Name: samp_saty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_saty_fk_i ON samples USING btree (saty_id);
-
-
---
--- Name: sapr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_cvte_fk_i ON sample_properties USING btree (cvte_id);
-
-
---
--- Name: sapr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_pers_fk_i ON sample_properties USING btree (pers_id_registerer);
-
-
---
--- Name: sapr_samp_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_samp_fk_i ON sample_properties USING btree (samp_id);
-
-
---
--- Name: sapr_stpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_stpt_fk_i ON sample_properties USING btree (stpt_id);
-
-
---
--- Name: stpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX stpt_pers_fk_i ON sample_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: stpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX stpt_prty_fk_i ON sample_type_property_types USING btree (prty_id);
-
-
---
--- Name: stpt_saty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX stpt_saty_fk_i ON sample_type_property_types USING btree (saty_id);
-
-
---
--- Name: check_dataset_relationships_on_data_table_modification; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE CONSTRAINT TRIGGER check_dataset_relationships_on_data_table_modification
-    AFTER INSERT OR UPDATE ON data
-DEFERRABLE INITIALLY DEFERRED
-    FOR EACH ROW
-    EXECUTE PROCEDURE check_dataset_relationships_on_data_table_modification();
-
-
---
--- Name: check_dataset_relationships_on_relationships_table_modification; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE CONSTRAINT TRIGGER check_dataset_relationships_on_relationships_table_modification
-    AFTER INSERT OR UPDATE ON data_set_relationships
-DEFERRABLE INITIALLY DEFERRED
-    FOR EACH ROW
-    EXECUTE PROCEDURE check_dataset_relationships_on_relationships_table_modification();
-
-
---
--- Name: controlled_vocabulary_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER controlled_vocabulary_check
-    BEFORE INSERT OR UPDATE ON property_types
-    FOR EACH ROW
-    EXECUTE PROCEDURE controlled_vocabulary_check();
-
-
---
--- Name: data_set_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER data_set_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON data_set_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE data_set_property_with_material_data_type_check();
-
-
---
--- Name: experiment_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER experiment_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON experiment_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE experiment_property_with_material_data_type_check();
-
-
---
--- Name: external_data_storage_format_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER external_data_storage_format_check
-    BEFORE INSERT OR UPDATE ON external_data
-    FOR EACH ROW
-    EXECUTE PROCEDURE external_data_storage_format_check();
-
-
---
--- Name: material_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER material_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON material_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE material_property_with_material_data_type_check();
-
-
---
--- Name: sample_code_uniqueness_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER sample_code_uniqueness_check
-    BEFORE INSERT OR UPDATE ON samples
-    FOR EACH ROW
-    EXECUTE PROCEDURE sample_code_uniqueness_check();
-
-
---
--- Name: sample_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER sample_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON sample_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE sample_property_with_material_data_type_check();
-
-
---
--- Name: sample_subcode_uniqueness_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER sample_subcode_uniqueness_check
-    BEFORE INSERT OR UPDATE ON samples
-    FOR EACH ROW
-    EXECUTE PROCEDURE sample_subcode_uniqueness_check();
-
-
---
--- Name: ag_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: ag_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: agp_ag_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_group_persons
-    ADD CONSTRAINT agp_ag_fk FOREIGN KEY (ag_id) REFERENCES authorization_groups(id);
-
-
---
--- Name: agp_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_group_persons
-    ADD CONSTRAINT agp_pers_fk FOREIGN KEY (pers_id) REFERENCES persons(id);
-
-
---
--- Name: atta_cont_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_cont_fk FOREIGN KEY (exac_id) REFERENCES attachment_contents(id);
-
-
---
--- Name: atta_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: atta_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: atta_proj_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_proj_fk FOREIGN KEY (proj_id) REFERENCES projects(id);
-
-
---
--- Name: atta_samp_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);
-
-
---
--- Name: covo_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: covo_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: cvte_covo_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_covo_fk FOREIGN KEY (covo_id) REFERENCES controlled_vocabularies(id);
-
-
---
--- Name: cvte_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: dast_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_stores
-    ADD CONSTRAINT dast_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: data_dast_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_dast_fk FOREIGN KEY (dast_id) REFERENCES data_stores(id);
-
-
---
--- Name: data_dsty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_dsty_fk FOREIGN KEY (dsty_id) REFERENCES data_set_types(id);
-
-
---
--- Name: data_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: data_samp_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);
-
-
---
--- Name: dspr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: dspr_ds_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_ds_fk FOREIGN KEY (ds_id) REFERENCES data(id);
-
-
---
--- Name: dspr_dstpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_dstpt_fk FOREIGN KEY (dstpt_id) REFERENCES data_set_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dspr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: dspr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: dsre_data_fk_child; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_relationships
-    ADD CONSTRAINT dsre_data_fk_child FOREIGN KEY (data_id_child) REFERENCES data(id);
-
-
---
--- Name: dsre_data_fk_parent; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_relationships
-    ADD CONSTRAINT dsre_data_fk_parent FOREIGN KEY (data_id_parent) REFERENCES data(id);
-
-
---
--- Name: dssdst_ds_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_store_service_data_set_types
-    ADD CONSTRAINT dssdst_ds_fk FOREIGN KEY (data_store_service_id) REFERENCES data_store_services(id) ON DELETE CASCADE;
-
-
---
--- Name: dssdst_dst_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_store_service_data_set_types
-    ADD CONSTRAINT dssdst_dst_fk FOREIGN KEY (data_set_type_id) REFERENCES data_set_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dsse_ds_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_store_services
-    ADD CONSTRAINT dsse_ds_fk FOREIGN KEY (data_store_id) REFERENCES data_stores(id) ON DELETE CASCADE;
-
-
---
--- Name: dstpt_dsty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_dsty_fk FOREIGN KEY (dsty_id) REFERENCES data_set_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dstpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: dstpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dsty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_types
-    ADD CONSTRAINT dsty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: etpt_exty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_exty_fk FOREIGN KEY (exty_id) REFERENCES experiment_types(id) ON DELETE CASCADE;
-
-
---
--- Name: etpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: etpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: evnt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY events
-    ADD CONSTRAINT evnt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: exda_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_cvte_fk FOREIGN KEY (cvte_id_stor_fmt) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: exda_cvte_stored_on_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_cvte_stored_on_fk FOREIGN KEY (cvte_id_store) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: exda_data_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_data_fk FOREIGN KEY (data_id) REFERENCES data(id);
-
-
---
--- Name: exda_ffty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_ffty_fk FOREIGN KEY (ffty_id) REFERENCES file_format_types(id);
-
-
---
--- Name: exda_loty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_loty_fk FOREIGN KEY (loty_id) REFERENCES locator_types(id);
-
-
---
--- Name: expe_exty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_exty_fk FOREIGN KEY (exty_id) REFERENCES experiment_types(id);
-
-
---
--- Name: expe_inva_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_inva_fk FOREIGN KEY (inva_id) REFERENCES invalidations(id);
-
-
---
--- Name: expe_mate_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_mate_fk FOREIGN KEY (mate_id_study_object) REFERENCES materials(id);
-
-
---
--- Name: expe_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: expe_proj_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_proj_fk FOREIGN KEY (proj_id) REFERENCES projects(id);
-
-
---
--- Name: expr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: expr_etpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_etpt_fk FOREIGN KEY (etpt_id) REFERENCES experiment_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: expr_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: expr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: expr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: exty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_types
-    ADD CONSTRAINT exty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: ffty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY file_format_types
-    ADD CONSTRAINT ffty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: filt_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: filt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: grid_custom_columns_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: grid_custom_columns_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: grou_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: grou_pers_fk_registerer; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: inva_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY invalidations
-    ADD CONSTRAINT inva_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: mapr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: mapr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: mapr_mate_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_mate_fk FOREIGN KEY (mate_id) REFERENCES materials(id);
-
-
---
--- Name: mapr_mtpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_mtpt_fk FOREIGN KEY (mtpt_id) REFERENCES material_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: mapr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: mate_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: mate_maty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_maty_fk FOREIGN KEY (maty_id) REFERENCES material_types(id);
-
-
---
--- Name: mate_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: maty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_types
-    ADD CONSTRAINT maty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: mtpt_maty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_maty_fk FOREIGN KEY (maty_id) REFERENCES material_types(id) ON DELETE CASCADE;
-
-
---
--- Name: mtpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: mtpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: pers_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: pers_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: pers_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: proj_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: proj_pers_fk_leader; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_pers_fk_leader FOREIGN KEY (pers_id_leader) REFERENCES persons(id);
-
-
---
--- Name: proj_pers_fk_registerer; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: prty_covo_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_covo_fk FOREIGN KEY (covo_id) REFERENCES controlled_vocabularies(id);
-
-
---
--- Name: prty_daty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_daty_fk FOREIGN KEY (daty_id) REFERENCES data_types(id);
-
-
---
--- Name: prty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: prty_maty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_maty_fk FOREIGN KEY (maty_prop_id) REFERENCES material_types(id) ON DELETE CASCADE;
-
-
---
--- Name: prty_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: quer_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: quer_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: roas_ag_fk_grantee; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_ag_fk_grantee FOREIGN KEY (ag_id_grantee) REFERENCES authorization_groups(id);
-
-
---
--- Name: roas_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: roas_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: roas_pers_fk_grantee; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pers_fk_grantee FOREIGN KEY (pers_id_grantee) REFERENCES persons(id);
-
-
---
--- Name: roas_pers_fk_registerer; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: samp_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: samp_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: samp_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: samp_inva_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_inva_fk FOREIGN KEY (inva_id) REFERENCES invalidations(id);
-
-
---
--- Name: samp_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: samp_samp_fk_control_layout; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_control_layout FOREIGN KEY (samp_id_control_layout) REFERENCES samples(id);
-
-
---
--- Name: samp_samp_fk_generated_from; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_generated_from FOREIGN KEY (samp_id_generated_from) REFERENCES samples(id);
-
-
---
--- Name: samp_samp_fk_part_of; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_part_of FOREIGN KEY (samp_id_part_of) REFERENCES samples(id);
-
-
---
--- Name: samp_samp_fk_top; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_top FOREIGN KEY (samp_id_top) REFERENCES samples(id);
-
-
---
--- Name: samp_saty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_saty_fk FOREIGN KEY (saty_id) REFERENCES sample_types(id);
-
-
---
--- Name: sapr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: sapr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: sapr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: sapr_samp_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);
-
-
---
--- Name: sapr_stpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_stpt_fk FOREIGN KEY (stpt_id) REFERENCES sample_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: saty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_types
-    ADD CONSTRAINT saty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: stpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: stpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: stpt_saty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_saty_fk FOREIGN KEY (saty_id) REFERENCES sample_types(id) ON DELETE CASCADE;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/plasmid/resource/db/plasmids.sql b/plasmid/resource/db/plasmids.sql
deleted file mode 100644
index 596c73888da4da22bc96bc0d9eacac1d8ba5f741..0000000000000000000000000000000000000000
--- a/plasmid/resource/db/plasmids.sql
+++ /dev/null
@@ -1,4625 +0,0 @@
---
--- PostgreSQL database dump
---
-
-SET statement_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = off;
-SET check_function_bodies = false;
-SET client_min_messages = warning;
-SET escape_string_warning = off;
-
---
--- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -
---
-
-CREATE PROCEDURAL LANGUAGE plpgsql;
-
-
-SET search_path = public, pg_catalog;
-
---
--- Name: archiving_status; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN archiving_status AS character varying(100)
-	CONSTRAINT archiving_status_check CHECK (((VALUE)::text = ANY ((ARRAY['LOCKED'::character varying, 'AVAILABLE'::character varying, 'ARCHIVED'::character varying, 'ARCHIVE_PENDING'::character varying, 'UNARCHIVE_PENDING'::character varying])::text[])));
-
-
---
--- Name: authorization_role; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN authorization_role AS character varying(40)
-	CONSTRAINT authorization_role_check CHECK (((VALUE)::text = ANY ((ARRAY['ADMIN'::character varying, 'POWER_USER'::character varying, 'USER'::character varying, 'OBSERVER'::character varying, 'ETL_SERVER'::character varying])::text[])));
-
-
---
--- Name: boolean_char; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN boolean_char AS boolean DEFAULT false;
-
-
---
--- Name: boolean_char_or_unknown; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN boolean_char_or_unknown AS character(1) DEFAULT 'U'::bpchar
-	CONSTRAINT boolean_char_or_unknown_check CHECK ((VALUE = ANY (ARRAY['F'::bpchar, 'T'::bpchar, 'U'::bpchar])));
-
-
---
--- Name: code; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN code AS character varying(60);
-
-
---
--- Name: column_label; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN column_label AS character varying(128);
-
-
---
--- Name: data_store_service_kind; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN data_store_service_kind AS character varying(40)
-	CONSTRAINT data_store_service_kind_check CHECK (((VALUE)::text = ANY ((ARRAY['PROCESSING'::character varying, 'QUERIES'::character varying])::text[])));
-
-
---
--- Name: description_2000; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN description_2000 AS character varying(2000);
-
-
---
--- Name: event_type; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN event_type AS character varying(40)
-	CONSTRAINT event_type_check CHECK (((VALUE)::text = ANY ((ARRAY['DELETION'::character varying, 'INVALIDATION'::character varying, 'MOVEMENT'::character varying])::text[])));
-
-
---
--- Name: file; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN file AS bytea;
-
-
---
--- Name: file_name; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN file_name AS character varying(100);
-
-
---
--- Name: generic_value; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN generic_value AS character varying(1024);
-
-
---
--- Name: grid_expression; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN grid_expression AS character varying(2000);
-
-
---
--- Name: grid_id; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN grid_id AS character varying(200);
-
-
---
--- Name: object_name; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN object_name AS character varying(50);
-
-
---
--- Name: ordinal_int; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN ordinal_int AS bigint
-	CONSTRAINT ordinal_int_check CHECK ((VALUE > 0));
-
-
---
--- Name: query_type; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN query_type AS character varying(40)
-	CONSTRAINT query_type_check CHECK (((VALUE)::text = ANY ((ARRAY['GENERIC'::character varying, 'EXPERIMENT'::character varying, 'SAMPLE'::character varying, 'DATA_SET'::character varying, 'MATERIAL'::character varying])::text[])));
-
-
---
--- Name: real_value; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN real_value AS real;
-
-
---
--- Name: tech_id; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN tech_id AS bigint;
-
-
---
--- Name: time_stamp; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN time_stamp AS timestamp with time zone;
-
-
---
--- Name: time_stamp_dfl; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN time_stamp_dfl AS timestamp with time zone NOT NULL DEFAULT now();
-
-
---
--- Name: title_100; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN title_100 AS character varying(100);
-
-
---
--- Name: user_id; Type: DOMAIN; Schema: public; Owner: -
---
-
-CREATE DOMAIN user_id AS character varying(50);
-
-
---
--- Name: check_dataset_relationships_on_data_table_modification(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION check_dataset_relationships_on_data_table_modification() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-	counter	INTEGER;
-BEGIN
-	-- if there is a connection with a Sample there should not be any connection with a parent Data Set
-	IF (NEW.samp_id IS NOT NULL) THEN
-		-- count number of parents
-		SELECT count(*) INTO counter 
-			FROM data_set_relationships 
-			WHERE data_id_child = NEW.id;
-		IF (counter > 0) THEN
-			RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected with a Sample and a parent Data Set at the same time.', NEW.code;
-		END IF;
-	END IF;
-  RETURN NEW;
-END;
-$$;
-
-
---
--- Name: check_dataset_relationships_on_relationships_table_modification(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION check_dataset_relationships_on_relationships_table_modification() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-	counter	INTEGER;
-	sample_id	TECH_ID;
-	data_code	CODE;
-BEGIN
-	-- child will have a parent added so it should not be connected with any sample
-	SELECT samp_id, code INTO sample_id, data_code 
-		FROM data 
-		WHERE id = NEW.data_id_child;
-	IF (sample_id IS NOT NULL) THEN
-		RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected to a Sample and to a parent Data Set at the same time.', data_code;
-	END IF;
-	RETURN NEW;
-END;
-$$;
-
-
---
--- Name: controlled_vocabulary_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION controlled_vocabulary_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_code  CODE;
-BEGIN
-
-   select code into v_code from data_types where id = NEW.daty_id;
-
-   -- Check if the data is of type "CONTROLLEDVOCABULARY"
-   if v_code = 'CONTROLLEDVOCABULARY' then
-      if NEW.covo_id IS NULL then
-         RAISE EXCEPTION 'Insert/Update of Property Type (Code: %) failed, as its Data Type is CONTROLLEDVOCABULARY, but it is not linked to a Controlled Vocabulary.', NEW.code;
-      end if;
-   end if;
-
-   RETURN NEW;
-
-END;
-$$;
-
-
---
--- Name: data_set_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION data_set_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from data_set_type_property_types dstpt, property_types pt 
-			 where NEW.dstpt_id = dstpt.id AND dstpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-												 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: experiment_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION experiment_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from experiment_type_property_types etpt, property_types pt 
-			 where NEW.etpt_id = etpt.id AND etpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-												 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: external_data_storage_format_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION external_data_storage_format_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_covo_code  CODE;
-   data_code CODE;
-BEGIN
-
-   select code into v_covo_code from controlled_vocabularies
-      where is_internal_namespace = true and 
-         id = (select covo_id from controlled_vocabulary_terms where id = NEW.cvte_id_stor_fmt);
-   -- Check if the data storage format is a term of the controlled vocabulary "STORAGE_FORMAT"
-   if v_covo_code != 'STORAGE_FORMAT' then
-      select code into data_code from data where id = NEW.data_id; 
-      RAISE EXCEPTION 'Insert/Update of Data (Code: %) failed, as its Storage Format is %, but is required to be STORAGE_FORMAT.', data_code, v_covo_code;
-   end if;
-
-   RETURN NEW;
-
-END;
-$$;
-
-
---
--- Name: material_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION material_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from material_type_property_types etpt, property_types pt 
-			 where NEW.mtpt_id = etpt.id AND etpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-							 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: rename_sequence(character varying, character varying); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION rename_sequence(old_name character varying, new_name character varying) RETURNS integer
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-  CURR_SEQ_VAL   INTEGER;
-BEGIN
-  SELECT INTO CURR_SEQ_VAL NEXTVAL(OLD_NAME);
-  EXECUTE 'CREATE SEQUENCE ' || NEW_NAME || ' START WITH ' || CURR_SEQ_VAL;
-  EXECUTE 'DROP SEQUENCE ' || OLD_NAME;
-  RETURN CURR_SEQ_VAL;
-END;
-$$;
-
-
---
--- Name: sample_code_uniqueness_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION sample_code_uniqueness_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   counter  INTEGER;
-BEGIN
-    LOCK TABLE samples IN EXCLUSIVE MODE;
-	IF (NEW.samp_id_part_of is NULL) THEN
-		IF (NEW.dbin_id is not NULL) THEN
-			SELECT count(*) into counter FROM samples 
-				where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and dbin_id = NEW.dbin_id;
-			IF (counter > 0) THEN
-				RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code already exists.', NEW.code;
-			END IF;
-		ELSIF (NEW.grou_id is not NULL) THEN
-			SELECT count(*) into counter FROM samples 
-				where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and grou_id = NEW.grou_id;
-			IF (counter > 0) THEN
-				RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because group sample with the same code already exists.', NEW.code;
-			END IF;
-		END IF;
-        ELSE
-		IF (NEW.dbin_id is not NULL) THEN
-			SELECT count(*) into counter FROM samples 
-				where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and dbin_id = NEW.dbin_id;
-			IF (counter > 0) THEN
-				RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code and being the part of the same parent already exists.', NEW.code;
-			END IF;
-		ELSIF (NEW.grou_id is not NULL) THEN
-			SELECT count(*) into counter FROM samples 
-				where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and grou_id = NEW.grou_id;
-			IF (counter > 0) THEN
-				RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because group sample with the same code and being the part of the same parent already exists.', NEW.code;
-			END IF;
-		END IF;
-        END IF;   
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: sample_property_with_material_data_type_check(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION sample_property_with_material_data_type_check() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-DECLARE
-   v_type_id  CODE;
-   v_type_id_prop  CODE;
-BEGIN
-   if NEW.mate_prop_id IS NOT NULL then
-			-- find material type id of the property type 
-			select pt.maty_prop_id into v_type_id_prop 
-			  from sample_type_property_types etpt, property_types pt 
-			 where NEW.stpt_id = etpt.id AND etpt.prty_id = pt.id;
-		
-			if v_type_id_prop IS NOT NULL then
-				-- find material type id of the material which consists the entity's property value
-				select entity.maty_id into v_type_id 
-				  from materials entity
-				 where NEW.mate_prop_id = entity.id;
-				if v_type_id != v_type_id_prop then
-					RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', 
-												 NEW.mate_prop_id, v_type_id, v_type_id_prop;
-				end if;
-			end if;
-   end if;
-   RETURN NEW;
-END;
-$$;
-
-
---
--- Name: attachment_content_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE attachment_content_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: attachment_content_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('attachment_content_id_seq', 1, true);
-
-
-SET default_tablespace = '';
-
-SET default_with_oids = false;
-
---
--- Name: attachment_contents; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE attachment_contents (
-    id tech_id NOT NULL,
-    value file NOT NULL
-);
-
-
---
--- Name: attachment_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE attachment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: attachment_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('attachment_id_seq', 1, true);
-
-
---
--- Name: attachments; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE attachments (
-    id tech_id NOT NULL,
-    expe_id tech_id,
-    samp_id tech_id,
-    proj_id tech_id,
-    exac_id tech_id NOT NULL,
-    file_name file_name NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    version integer NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    title title_100,
-    description description_2000,
-    CONSTRAINT atta_arc_ck CHECK ((((((expe_id IS NOT NULL) AND (proj_id IS NULL)) AND (samp_id IS NULL)) OR (((expe_id IS NULL) AND (proj_id IS NOT NULL)) AND (samp_id IS NULL))) OR (((expe_id IS NULL) AND (proj_id IS NULL)) AND (samp_id IS NOT NULL))))
-);
-
-
---
--- Name: authorization_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE authorization_group_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: authorization_group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('authorization_group_id_seq', 2, false);
-
-
---
--- Name: authorization_group_persons; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE authorization_group_persons (
-    ag_id tech_id NOT NULL,
-    pers_id tech_id NOT NULL
-);
-
-
---
--- Name: authorization_groups; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE authorization_groups (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: code_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE code_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: code_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('code_seq', 100, true);
-
-
---
--- Name: controlled_vocabularies; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE controlled_vocabularies (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    is_internal_namespace boolean_char DEFAULT false NOT NULL,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_chosen_from_list boolean_char DEFAULT true NOT NULL,
-    source_uri character varying(250)
-);
-
-
---
--- Name: controlled_vocabulary_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE controlled_vocabulary_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: controlled_vocabulary_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('controlled_vocabulary_id_seq', 7, true);
-
-
---
--- Name: controlled_vocabulary_terms; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE controlled_vocabulary_terms (
-    id tech_id NOT NULL,
-    code object_name NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    covo_id tech_id NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    label column_label,
-    description description_2000,
-    ordinal ordinal_int NOT NULL,
-    CONSTRAINT cvte_ck CHECK (((ordinal)::bigint > 0))
-);
-
-
---
--- Name: cvte_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE cvte_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: cvte_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('cvte_id_seq', 61, true);
-
-
---
--- Name: data; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data (
-    id tech_id NOT NULL,
-    code code,
-    dsty_id tech_id NOT NULL,
-    dast_id tech_id NOT NULL,
-    expe_id tech_id NOT NULL,
-    data_producer_code code,
-    production_timestamp time_stamp,
-    samp_id tech_id,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    is_placeholder boolean_char DEFAULT false,
-    is_valid boolean_char DEFAULT true,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_derived boolean_char NOT NULL
-);
-
-
---
--- Name: data_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_id_seq', 1, true);
-
-
---
--- Name: data_set_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_properties (
-    id tech_id NOT NULL,
-    ds_id tech_id NOT NULL,
-    dstpt_id tech_id NOT NULL,
-    value generic_value,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    CONSTRAINT dspr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: data_set_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_set_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_set_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_set_property_id_seq', 9, true);
-
-
---
--- Name: data_set_relationship_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_set_relationship_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_set_relationship_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_set_relationship_id_seq', 1, false);
-
-
---
--- Name: data_set_relationships; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_relationships (
-    data_id_parent tech_id NOT NULL,
-    data_id_child tech_id NOT NULL
-);
-
-
---
--- Name: data_set_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_set_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_set_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_set_type_id_seq', 4, true);
-
-
---
--- Name: data_set_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_type_property_types (
-    id tech_id NOT NULL,
-    dsty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: data_set_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_set_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    main_ds_pattern character varying(300),
-    main_ds_path character varying(1000)
-);
-
-
---
--- Name: data_store_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_store_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_store_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_store_id_seq', 1, true);
-
-
---
--- Name: data_store_service_data_set_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_store_service_data_set_types (
-    data_store_service_id tech_id NOT NULL,
-    data_set_type_id tech_id NOT NULL
-);
-
-
---
--- Name: data_store_services; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_store_services (
-    id tech_id NOT NULL,
-    key character varying(256) NOT NULL,
-    label character varying(256) NOT NULL,
-    kind data_store_service_kind NOT NULL,
-    data_store_id tech_id NOT NULL
-);
-
-
---
--- Name: data_store_services_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_store_services_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_store_services_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_store_services_id_seq', 12, true);
-
-
---
--- Name: data_stores; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_stores (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    code code NOT NULL,
-    download_url character varying(1024) NOT NULL,
-    remote_url character varying(250) NOT NULL,
-    session_token character varying(50) NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_archiver_configured boolean_char DEFAULT false NOT NULL
-);
-
-
---
--- Name: data_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE data_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: data_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('data_type_id_seq', 9, true);
-
-
---
--- Name: data_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE data_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000 NOT NULL
-);
-
-
---
--- Name: database_instance_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE database_instance_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: database_instance_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('database_instance_id_seq', 1, true);
-
-
---
--- Name: database_instances; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE database_instances (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    uuid code NOT NULL,
-    is_original_source boolean_char DEFAULT false NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL
-);
-
-
---
--- Name: database_version_logs; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE database_version_logs (
-    db_version character varying(4) NOT NULL,
-    module_name character varying(250),
-    run_status character varying(10),
-    run_status_timestamp timestamp without time zone,
-    module_code bytea,
-    run_exception bytea
-);
-
-
---
--- Name: dstpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE dstpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: dstpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('dstpt_id_seq', 3, true);
-
-
---
--- Name: etpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE etpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: etpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('etpt_id_seq', 1, false);
-
-
---
--- Name: event_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE event_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: event_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('event_id_seq', 1, true);
-
-
---
--- Name: events; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE events (
-    id tech_id NOT NULL,
-    event_type event_type NOT NULL,
-    description description_2000,
-    reason description_2000,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    entity_type character varying(80) NOT NULL,
-    identifier character varying(250) NOT NULL,
-    CONSTRAINT evnt_et_enum_ck CHECK (((entity_type)::text = ANY ((ARRAY['ATTACHMENT'::character varying, 'DATASET'::character varying, 'EXPERIMENT'::character varying, 'GROUP'::character varying, 'MATERIAL'::character varying, 'PROJECT'::character varying, 'PROPERTY_TYPE'::character varying, 'SAMPLE'::character varying, 'VOCABULARY'::character varying, 'AUTHORIZATION_GROUP'::character varying])::text[])))
-);
-
-
---
--- Name: experiment_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE experiment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: experiment_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('experiment_id_seq', 1, true);
-
-
---
--- Name: experiment_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiment_properties (
-    id tech_id NOT NULL,
-    expe_id tech_id NOT NULL,
-    etpt_id tech_id NOT NULL,
-    value generic_value,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    CONSTRAINT expr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: experiment_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE experiment_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: experiment_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('experiment_property_id_seq', 1, false);
-
-
---
--- Name: experiment_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE experiment_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: experiment_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('experiment_type_id_seq', 1, true);
-
-
---
--- Name: experiment_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiment_type_property_types (
-    id tech_id NOT NULL,
-    exty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: experiment_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiment_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: experiments; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE experiments (
-    id tech_id NOT NULL,
-    perm_id code NOT NULL,
-    code code NOT NULL,
-    exty_id tech_id NOT NULL,
-    mate_id_study_object tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    proj_id tech_id NOT NULL,
-    inva_id tech_id,
-    is_public boolean_char DEFAULT false NOT NULL
-);
-
-
---
--- Name: external_data; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE external_data (
-    data_id tech_id NOT NULL,
-    location character varying(1024) NOT NULL,
-    ffty_id tech_id NOT NULL,
-    loty_id tech_id NOT NULL,
-    cvte_id_stor_fmt tech_id NOT NULL,
-    is_complete boolean_char_or_unknown DEFAULT 'U'::bpchar NOT NULL,
-    cvte_id_store tech_id,
-    status archiving_status DEFAULT 'AVAILABLE'::character varying NOT NULL
-);
-
-
---
--- Name: file_format_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE file_format_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: file_format_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('file_format_type_id_seq', 7, true);
-
-
---
--- Name: file_format_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE file_format_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL
-);
-
-
---
--- Name: filter_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE filter_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: filter_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('filter_id_seq', 1, true);
-
-
---
--- Name: filters; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE filters (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    name character varying(200) NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    expression character varying(2000) NOT NULL,
-    is_public boolean NOT NULL,
-    grid_id character varying(200) NOT NULL
-);
-
-
---
--- Name: grid_custom_columns; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE grid_custom_columns (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    code character varying(200) NOT NULL,
-    label column_label NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    expression grid_expression NOT NULL,
-    is_public boolean NOT NULL,
-    grid_id grid_id NOT NULL
-);
-
-
---
--- Name: grid_custom_columns_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE grid_custom_columns_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: grid_custom_columns_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('grid_custom_columns_id_seq', 1, false);
-
-
---
--- Name: group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE group_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('group_id_seq', 1, true);
-
-
---
--- Name: groups; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE groups (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    dbin_id tech_id NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL
-);
-
-
---
--- Name: invalidation_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE invalidation_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: invalidation_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('invalidation_id_seq', 1, false);
-
-
---
--- Name: invalidations; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE invalidations (
-    id tech_id NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    reason description_2000
-);
-
-
---
--- Name: locator_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE locator_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: locator_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('locator_type_id_seq', 1, true);
-
-
---
--- Name: locator_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE locator_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000
-);
-
-
---
--- Name: material_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE material_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: material_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('material_id_seq', 1, false);
-
-
---
--- Name: material_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE material_properties (
-    id tech_id NOT NULL,
-    mate_id tech_id NOT NULL,
-    mtpt_id tech_id NOT NULL,
-    value generic_value,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    pers_id_registerer tech_id NOT NULL,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    CONSTRAINT mapr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: material_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE material_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: material_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('material_property_id_seq', 1, false);
-
-
---
--- Name: material_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE material_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: material_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('material_type_id_seq', 2, true);
-
-
---
--- Name: material_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE material_type_property_types (
-    id tech_id NOT NULL,
-    maty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: material_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE material_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: materials; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE materials (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    maty_id tech_id NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    dbin_id tech_id NOT NULL
-);
-
-
---
--- Name: mtpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE mtpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: mtpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('mtpt_id_seq', 1, false);
-
-
---
--- Name: perm_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE perm_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: perm_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('perm_id_seq', 100, true);
-
-
---
--- Name: person_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE person_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: person_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('person_id_seq', 14, true);
-
-
---
--- Name: persons; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE persons (
-    id tech_id NOT NULL,
-    first_name character varying(30),
-    last_name character varying(30),
-    user_id user_id NOT NULL,
-    email object_name,
-    dbin_id tech_id NOT NULL,
-    grou_id tech_id,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id,
-    display_settings file
-);
-
-
---
--- Name: project_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE project_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: project_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('project_id_seq', 1, true);
-
-
---
--- Name: projects; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE projects (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    grou_id tech_id NOT NULL,
-    pers_id_leader tech_id,
-    description description_2000,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now()
-);
-
-
---
--- Name: property_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE property_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: property_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('property_type_id_seq', 18, true);
-
-
---
--- Name: property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE property_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000 NOT NULL,
-    label column_label NOT NULL,
-    daty_id tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    covo_id tech_id,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    is_internal_namespace boolean_char DEFAULT false NOT NULL,
-    dbin_id tech_id NOT NULL,
-    maty_prop_id tech_id
-);
-
-
---
--- Name: queries; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE queries (
-    id tech_id NOT NULL,
-    dbin_id tech_id NOT NULL,
-    name character varying(200) NOT NULL,
-    description description_2000,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    expression character varying(2000) NOT NULL,
-    is_public boolean NOT NULL,
-    query_type query_type NOT NULL,
-    db_key code DEFAULT '1'::character varying NOT NULL
-);
-
-
---
--- Name: query_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE query_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: query_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('query_id_seq', 1, false);
-
-
---
--- Name: role_assignment_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE role_assignment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: role_assignment_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('role_assignment_id_seq', 9, true);
-
-
---
--- Name: role_assignments; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE role_assignments (
-    id tech_id NOT NULL,
-    role_code authorization_role NOT NULL,
-    grou_id tech_id,
-    dbin_id tech_id,
-    pers_id_grantee tech_id,
-    ag_id_grantee tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    CONSTRAINT roas_ag_pers_arc_ck CHECK ((((ag_id_grantee IS NOT NULL) AND (pers_id_grantee IS NULL)) OR ((ag_id_grantee IS NULL) AND (pers_id_grantee IS NOT NULL)))),
-    CONSTRAINT roas_dbin_grou_arc_ck CHECK ((((dbin_id IS NOT NULL) AND (grou_id IS NULL)) OR ((dbin_id IS NULL) AND (grou_id IS NOT NULL))))
-);
-
-
---
--- Name: sample_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE sample_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: sample_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('sample_id_seq', 1, true);
-
-
---
--- Name: sample_properties; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE sample_properties (
-    id tech_id NOT NULL,
-    samp_id tech_id NOT NULL,
-    stpt_id tech_id NOT NULL,
-    value generic_value,
-    cvte_id tech_id,
-    mate_prop_id tech_id,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    CONSTRAINT sapr_ck CHECK ((((((value IS NOT NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NULL)) OR (((value IS NULL) AND (cvte_id IS NOT NULL)) AND (mate_prop_id IS NULL))) OR (((value IS NULL) AND (cvte_id IS NULL)) AND (mate_prop_id IS NOT NULL))))
-);
-
-
---
--- Name: sample_property_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE sample_property_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: sample_property_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('sample_property_id_seq', 1, true);
-
-
---
--- Name: sample_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE sample_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: sample_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('sample_type_id_seq', 2, true);
-
-
---
--- Name: sample_type_property_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE sample_type_property_types (
-    id tech_id NOT NULL,
-    saty_id tech_id NOT NULL,
-    prty_id tech_id NOT NULL,
-    is_mandatory boolean_char DEFAULT false NOT NULL,
-    is_managed_internally boolean_char DEFAULT false NOT NULL,
-    pers_id_registerer tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    is_displayed boolean_char DEFAULT true NOT NULL,
-    ordinal ordinal_int NOT NULL,
-    section description_2000
-);
-
-
---
--- Name: sample_types; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE sample_types (
-    id tech_id NOT NULL,
-    code code NOT NULL,
-    description description_2000,
-    dbin_id tech_id NOT NULL,
-    is_listable boolean_char DEFAULT true NOT NULL,
-    generated_from_depth integer DEFAULT 0 NOT NULL,
-    part_of_depth integer DEFAULT 0 NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    is_auto_generated_code boolean_char DEFAULT false NOT NULL,
-    generated_code_prefix code DEFAULT 'S'::character varying NOT NULL
-);
-
-
---
--- Name: samples; Type: TABLE; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE TABLE samples (
-    id tech_id NOT NULL,
-    perm_id code NOT NULL,
-    code code NOT NULL,
-    expe_id tech_id,
-    samp_id_top tech_id,
-    samp_id_generated_from tech_id,
-    saty_id tech_id NOT NULL,
-    registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL,
-    modification_timestamp time_stamp DEFAULT now(),
-    pers_id_registerer tech_id NOT NULL,
-    inva_id tech_id,
-    samp_id_control_layout tech_id,
-    dbin_id tech_id,
-    grou_id tech_id,
-    samp_id_part_of tech_id,
-    CONSTRAINT samp_dbin_grou_arc_ck CHECK ((((dbin_id IS NOT NULL) AND (grou_id IS NULL)) OR ((dbin_id IS NULL) AND (grou_id IS NOT NULL))))
-);
-
-
---
--- Name: stpt_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE stpt_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MAXVALUE
-    NO MINVALUE
-    CACHE 1;
-
-
---
--- Name: stpt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
---
-
-SELECT pg_catalog.setval('stpt_id_seq', 18, true);
-
-
---
--- Data for Name: attachment_contents; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY attachment_contents (id, value) FROM stdin;
-\.
-
-
---
--- Data for Name: attachments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY attachments (id, expe_id, samp_id, proj_id, exac_id, file_name, registration_timestamp, version, pers_id_registerer, title, description) FROM stdin;
-\.
-
-
---
--- Data for Name: authorization_groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY authorization_groups (id, dbin_id, code, description, registration_timestamp, pers_id_registerer, modification_timestamp) FROM stdin;
-1	1	CISD_ADMINS	\N	2010-05-31 21:13:52.3511+02	1	2010-06-01 10:00:46.224+02
-\.
-
-
---
--- Data for Name: authorization_group_persons; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY authorization_group_persons (ag_id, pers_id) FROM stdin;
-1	3
-1	4
-1	5
-1	6
-1	7
-1	8
-\.
-
---
--- Data for Name: controlled_vocabularies; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY controlled_vocabularies (id, code, description, registration_timestamp, pers_id_registerer, is_managed_internally, is_internal_namespace, dbin_id, modification_timestamp, is_chosen_from_list, source_uri) FROM stdin;
-1	STORAGE_FORMAT	The on-disk storage format of a data set	2010-05-26 13:38:36.62686+02	1	t	t	1	2010-05-26 13:38:36.62686+02	t	\N
-2	OWNER	\N	2010-05-26 17:29:55.9819+02	1	f	f	1	2010-05-26 17:29:56.019+02	t	\N
-5	BACTERIAL_ANTIBIOTIC_RESISTANCE	Bacterial Antibiotic Resistance	2010-05-26 17:37:11.497201+02	1	f	f	1	2010-05-26 17:37:11.497+02	t	\N
-4	YEAST_MARKER	Yeast Marker	2010-05-26 17:35:36.30475+02	1	f	f	1	2010-05-26 17:35:36.305+02	t	\N
-3	BACKBONE	\N	2010-05-26 17:32:30.058024+02	1	f	f	1	2010-05-26 17:32:30.058+02	t	\N
-6	BOX_SIZE	\N	2010-05-26 21:54:23.206312+02	1	f	f	1	2010-05-27 17:48:35.162+02	t	\N
-7	STORAGE_POSITION_ROW	Row in the Box	2010-05-27 17:58:08.636202+02	1	f	f	1	2010-05-27 17:58:08.651+02	t	\N
-\.
-
-
---
--- Data for Name: controlled_vocabulary_terms; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY controlled_vocabulary_terms (id, code, registration_timestamp, covo_id, pers_id_registerer, label, description, ordinal) FROM stdin;
-1	PROPRIETARY	2010-05-26 13:38:36.62686+02	1	1	\N	\N	1
-2	BDS_DIRECTORY	2010-05-26 13:38:36.62686+02	1	1	\N	\N	2
-3	FABIAN_RUDOLF	2010-05-26 17:29:55.9819+02	2	1	Fabian Rudolf	\N	1
-4	KRISTINA_ELFSTROM	2010-05-26 17:29:55.9819+02	2	1	Kristina Elfström	\N	2
-5	DIANA_OTTOZ	2010-05-26 17:29:55.9819+02	2	1	Diana Ottoz	\N	3
-6	BEATA_MIERZWA	2010-05-26 17:29:55.9819+02	2	1	Beata Mierzwa	\N	4
-8	MAREIKE_BONGERS	2010-05-26 17:29:55.9819+02	2	1	Mareike Bongers	\N	6
-9	MARIO_MARICHISIO	2010-05-26 17:29:55.9819+02	2	1	Mario Marchisio	\N	7
-11	PBSN	2010-05-26 17:32:30.058024+02	3	1	pBSN	\N	2
-12	PSPPOLY_A	2010-05-26 17:32:30.058024+02	3	1	pSPpoly(A)	\N	3
-13	PF6A	2010-05-26 17:32:30.058024+02	3	1	pF6a	\N	4
-14	PKERG10Y	2010-05-26 17:32:30.058024+02	3	1	pKERG10y	\N	5
-15	PKERG11Y	2010-05-26 17:32:30.058024+02	3	1	pKERG11y	\N	6
-16	PKERG12Y	2010-05-26 17:32:30.058024+02	3	1	pKERG12y	\N	7
-17	PKERG20Y	2010-05-26 17:32:30.058024+02	3	1	pKERG20y	\N	8
-18	PKERG21Y	2010-05-26 17:32:30.058024+02	3	1	pKERG21y	\N	9
-19	PKERG22Y	2010-05-26 17:32:30.058024+02	3	1	pKERG22y	\N	10
-20	PRS30Y	2010-05-26 17:32:30.058024+02	3	1	pRS30y	\N	11
-21	PRS31Y	2010-05-26 17:32:30.058024+02	3	1	pRS31y	\N	12
-22	PRS40Y	2010-05-26 17:32:30.058024+02	3	1	pRS40y	\N	13
-23	PRS41Y	2010-05-26 17:32:30.058024+02	3	1	pRS41y	\N	14
-24	PRS42Y	2010-05-26 17:32:30.058024+02	3	1	pRS42y	\N	15
-25	PET22B	2010-05-26 17:32:30.058024+02	3	1	pET22b	\N	16
-26	UNKNOWN	2010-05-26 17:32:30.058024+02	3	1	(unknown)	\N	17
-27	URA3	2010-05-26 17:35:36.30475+02	4	1	URA3	\N	1
-28	HIS3	2010-05-26 17:35:36.30475+02	4	1	HIS3	\N	2
-29	LEU2	2010-05-26 17:35:36.30475+02	4	1	LEU2	\N	3
-30	TRP1	2010-05-26 17:35:36.30475+02	4	1	TRP1	\N	4
-31	MET15	2010-05-26 17:35:36.30475+02	4	1	MET15	\N	5
-32	LYS2	2010-05-26 17:35:36.30475+02	4	1	LYS2	\N	6
-33	ADE1	2010-05-26 17:35:36.30475+02	4	1	ADE1	\N	7
-34	KANMX	2010-05-26 17:35:36.30475+02	4	1	KanMX	\N	8
-35	NATMX	2010-05-26 17:35:36.30475+02	4	1	NatMX	\N	9
-36	HYGMX	2010-05-26 17:35:36.30475+02	4	1	HygMX	\N	10
-37	URA3MX	2010-05-26 17:35:36.30475+02	4	1	Ura3MX	\N	11
-38	HIS3MX	2010-05-26 17:35:36.30475+02	4	1	His3MX	\N	12
-39	BLA	2010-05-26 17:37:11.497201+02	5	1	\N	\N	1
-40	KAN	2010-05-26 17:37:11.497201+02	5	1	\N	\N	2
-41	CAM	2010-05-26 17:37:11.497201+02	5	1	\N	\N	3
-7	ROBERT_GNUGGE	2010-05-26 17:29:55.9819+02	2	1	Robert Gnuegge	\N	5
-44	96_WELL	2010-05-27 17:48:24.846982+02	6	1	96 Well (8x12)	\N	2
-45	384_WELL	2010-05-27 17:48:35.150109+02	6	1	384 Well (16x24)	\N	3
-46	A	2010-05-27 17:58:08.636202+02	7	1	\N	\N	1
-47	B	2010-05-27 17:58:08.636202+02	7	1	\N	\N	2
-48	C	2010-05-27 17:58:08.636202+02	7	1	\N	\N	3
-49	D	2010-05-27 17:58:08.636202+02	7	1	\N	\N	4
-50	E	2010-05-27 17:58:08.636202+02	7	1	\N	\N	5
-51	F	2010-05-27 17:58:08.636202+02	7	1	\N	\N	6
-52	G	2010-05-27 17:58:08.636202+02	7	1	\N	\N	7
-53	H	2010-05-27 17:58:08.636202+02	7	1	\N	\N	8
-54	I	2010-05-27 17:58:08.636202+02	7	1	\N	\N	9
-55	J	2010-05-27 17:58:08.636202+02	7	1	\N	\N	10
-56	K	2010-05-27 17:58:08.636202+02	7	1	\N	\N	11
-57	L	2010-05-27 17:58:08.636202+02	7	1	\N	\N	12
-58	M	2010-05-27 17:58:08.636202+02	7	1	\N	\N	13
-59	N	2010-05-27 17:58:08.636202+02	7	1	\N	\N	14
-60	O	2010-05-27 17:58:08.636202+02	7	1	\N	\N	15
-61	P	2010-05-27 17:58:08.636202+02	7	1	\N	\N	16
-10	PBLUESCRIPT_II_KS_PLUS	2010-05-26 17:32:30.058024+02	3	1	pBluescript II KS +	\N	1
-42	81_BOX	2010-05-26 21:54:23.206312+02	6	1	81 Box (9x9)	\N	1
-\.
-
-
---
--- Data for Name: data; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data (id, code, dsty_id, dast_id, expe_id, data_producer_code, production_timestamp, samp_id, registration_timestamp, is_placeholder, is_valid, modification_timestamp, is_derived) FROM stdin;
-\.
-
-
---
--- Data for Name: data_set_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_properties (id, ds_id, dstpt_id, value, cvte_id, mate_prop_id, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: data_set_relationships; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_relationships (data_id_parent, data_id_child) FROM stdin;
-\.
-
-
---
--- Data for Name: data_set_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_type_property_types (id, dsty_id, prty_id, is_mandatory, is_managed_internally, pers_id_registerer, registration_timestamp, ordinal, section) FROM stdin;
-1	1	17	t	f	1	2010-05-30 12:56:12.273594+02	1	\N
-2	2	17	t	f	1	2010-05-30 12:56:22.039873+02	1	\N
-3	3	17	t	f	1	2010-05-30 12:56:29.902648+02	1	\N
-4	4	17	t	f	1	2010-05-30 12:56:29.902648+02	1	\N
-\.
-
-
---
--- Data for Name: data_set_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_set_types (id, code, description, dbin_id, modification_timestamp, main_ds_pattern, main_ds_path) FROM stdin;
-1	UNKNOWN	\N	1	2010-05-26 17:41:21.272491+02	\N	\N
-2	SEQ_FILE	\N	1	2010-05-26 17:41:21.272491+02	generated\*.svg	\N
-3	RAW_DATA	\N	1	2010-05-26 17:41:58.696032+02	\N	\N
-4	VERIFICATION	\N	1	2010-05-26 17:42:07.328466+02	*.*	\N
-\.
-
-
---
--- Data for Name: data_store_service_data_set_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_store_service_data_set_types (data_store_service_id, data_set_type_id) FROM stdin;
-\.
-
-
---
--- Data for Name: data_store_services; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_store_services (id, key, label, kind, data_store_id) FROM stdin;
-\.
-
-
---
--- Data for Name: data_stores; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_stores (id, dbin_id, code, download_url, remote_url, session_token, registration_timestamp, modification_timestamp, is_archiver_configured) FROM stdin;
-\.
-
-
---
--- Data for Name: data_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY data_types (id, code, description) FROM stdin;
-1	VARCHAR	Short text
-2	MULTILINE_VARCHAR	Long text
-3	INTEGER	Integer number
-4	REAL	Real number, i.e. an inexact, variable-precision numeric type
-5	BOOLEAN	True or False
-6	TIMESTAMP	Both date and time. Format: yyyy-mm-dd hh:mm:ss
-7	CONTROLLEDVOCABULARY	Controlled Vocabulary
-8	MATERIAL	Reference to a material
-9	HYPERLINK	Address of a web page
-\.
-
-
---
--- Data for Name: database_instances; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY database_instances (id, code, uuid, is_original_source, registration_timestamp) FROM stdin;
-1	CISD	7ABDB8A8-969C-4E83-BC56-487752B8E6B7	t	2010-05-26 13:38:36.62686+02
-\.
-
-
---
--- Data for Name: database_version_logs; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY database_version_logs (db_version, module_name, run_status, run_status_timestamp, module_code, run_exception) FROM stdin;
-052	./source//sql/postgresql/052/domains-052.sql	SUCCESS	2010-05-26 13:38:35.286	-- Creating domains\\012\\012CREATE DOMAIN AUTHORIZATION_ROLE AS VARCHAR(40) CHECK (VALUE IN ('ADMIN', 'POWER_USER', 'USER', 'OBSERVER', 'ETL_SERVER'));\\012CREATE DOMAIN BOOLEAN_CHAR AS BOOLEAN DEFAULT FALSE;\\012CREATE DOMAIN BOOLEAN_CHAR_OR_UNKNOWN AS CHAR(1) DEFAULT 'U' CHECK (VALUE IN ('F', 'T', 'U'));\\012CREATE DOMAIN CODE AS VARCHAR(60);\\012CREATE DOMAIN COLUMN_LABEL AS VARCHAR(128);\\012CREATE DOMAIN DATA_STORE_SERVICE_KIND AS VARCHAR(40) CHECK (VALUE IN ('PROCESSING', 'QUERIES'));\\012CREATE DOMAIN EVENT_TYPE AS VARCHAR(40) CHECK (VALUE IN ('DELETION', 'INVALIDATION', 'MOVEMENT'));\\012CREATE DOMAIN FILE AS BYTEA;\\012CREATE DOMAIN FILE_NAME AS VARCHAR(100);\\012CREATE DOMAIN GENERIC_VALUE AS VARCHAR(1024);\\012CREATE DOMAIN OBJECT_NAME AS VARCHAR(50);\\012CREATE DOMAIN REAL_VALUE AS REAL;\\012CREATE DOMAIN TECH_ID AS BIGINT;\\012CREATE DOMAIN TIME_STAMP AS TIMESTAMP WITH TIME ZONE;\\012CREATE DOMAIN TIME_STAMP_DFL AS TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP;\\012CREATE DOMAIN USER_ID AS VARCHAR(50);\\012CREATE DOMAIN TITLE_100 AS VARCHAR(100);\\012CREATE DOMAIN GRID_EXPRESSION AS VARCHAR(2000);\\012CREATE DOMAIN GRID_ID AS VARCHAR(200);\\012CREATE DOMAIN ORDINAL_INT AS BIGINT CHECK (VALUE > 0);\\012CREATE DOMAIN DESCRIPTION_2000 AS VARCHAR(2000);\\012CREATE DOMAIN ARCHIVING_STATUS AS VARCHAR(100) CHECK (VALUE IN ('LOCKED', 'AVAILABLE', 'ARCHIVED', 'ARCHIVE_PENDING', 'UNARCHIVE_PENDING'));\\012CREATE DOMAIN QUERY_TYPE AS VARCHAR(40) CHECK (VALUE IN ('GENERIC', 'EXPERIMENT', 'SAMPLE', 'DATA_SET', 'MATERIAL'));\\012	\N
-052	./source//sql/generic/052/schema-052.sql	SUCCESS	2010-05-26 13:38:36.471	-- D:\\\\DDL\\\\postgresql\\\\schema-023.sql\\012--\\012-- Generated for ANSI SQL92 on Fri Jul 04  15:13:22 2008 by Server Generator 10.1.2.6.18\\012------------------------------------------------------------------------------------\\012--\\012--  Post-Generation Modifications:\\012--\\012--  1. Changed domain FILE from BIT(32000) to BYTEA\\012--  2. Changed domain TECH_ID from NUMERIC(20) to BIGINT\\012--  3. Changed domain BOOLEAN_CHAR from CHAR(1) DEFAULT F to BOOLEAN DEFAULT FALSE\\012--  4. Removed the check constraints to handle boolean values in Oracle for the\\012--     tables MATERIAL_TYPE_PROPERTY_TYPES, EXPERIMENT_TYPE_PROPERTY_TYPES and\\012--     SAMPLE_TYPE_PROPERTY_TYPES (AVCON_%)\\012--  5. Added the ON DELETE CASCADE qualifier to the foreign keys MAPR_MTPT_FK,\\012--     EXPR_ETPT_FK and SAPR_STPT_FK\\012--  6. Add the check constraint directly on the domain BOOLEAN_CHAR_OR_UNKNOWN\\012--     CREATE DOMAIN BOOLEAN_CHAR_OR_UNKNOWN AS CHAR(1) CHECK (VALUE in ('F', 'T', 'U')) DEFAULT 'U';\\012--  7. Add the WITH TIMEZONE qualifier to the domain TIME_STAMP\\012--     CREATE DOMAIN TIME_STAMP AS TIMESTAMP WITH TIME ZONE;\\012--  8. Add the WITH TIMEZONE and NOT NULL qualifiers to the domain TIME_STAMP_DFL\\012--     CREATE DOMAIN TIME_STAMP_DFL AS TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP;\\012--  9. Extend the domain EVENT_TYPE by adding the CHECK constraint\\012--     CREATE DOMAIN EVENT_TYPE AS VARCHAR(40) CHECK (VALUE in ('DELETION', 'INVALIDATION', 'MOVEMENT'));\\012--  10. Extend the domain AUTHORIZATION_ROLE by adding the CHECK constraint\\012--     CREATE DOMAIN AUTHORIZATION_ROLE as VARCHAR(40) CHECK (VALUE IN ('ADMIN', 'POWER_USER', 'USER', 'OBSERVER', 'ETL_SERVER'));\\012--  11. Added the Sequence and Index sections\\012--  12. Added DATABASE_INSTANCES.GLOBAL_CODE column for UUID\\012--  13. DATABASE_INSTANCES.GLOBAL_CODE renamed to DATABASE_INSTANCES.UUID\\012--  14. OBSERVABLE_TYPES renamed to DATA_SET_TYPES\\012--  15. OBSERVABLE_TYPE_ID_SEQ renamed to DATA_SET_TYPE_ID_SEQ\\012--  16. DATA.OBTY_ID renamed to DATA.DSTY_ID;\\012--  17. some others - the source model should be updated to make these Post-Generation Modifications minimal \\012------------------------------------------------------------------------------------\\012\\012-- Creating tables\\012\\012CREATE TABLE CONTROLLED_VOCABULARIES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_INTERNAL_NAMESPACE BOOLEAN_CHAR NOT NULL DEFAULT 'F',DBIN_ID TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, IS_CHOSEN_FROM_LIST BOOLEAN_CHAR NOT NULL DEFAULT TRUE, SOURCE_URI CHARACTER VARYING(250));\\012CREATE TABLE CONTROLLED_VOCABULARY_TERMS (ID TECH_ID NOT NULL,CODE OBJECT_NAME NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,COVO_ID TECH_ID NOT NULL,PERS_ID_REGISTERER TECH_ID NOT NULL,LABEL COLUMN_LABEL, DESCRIPTION DESCRIPTION_2000, ORDINAL ORDINAL_INT NOT NULL);\\012CREATE TABLE DATA (ID TECH_ID NOT NULL,CODE CODE,DSTY_ID TECH_ID NOT NULL,DAST_ID TECH_ID NOT NULL,EXPE_ID TECH_ID NOT NULL,DATA_PRODUCER_CODE CODE,PRODUCTION_TIMESTAMP TIME_STAMP,SAMP_ID TECH_ID,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,IS_PLACEHOLDER BOOLEAN_CHAR DEFAULT 'F',IS_VALID BOOLEAN_CHAR DEFAULT 'T', MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, IS_DERIVED BOOLEAN_CHAR NOT NULL);\\012CREATE TABLE DATABASE_INSTANCES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,UUID CODE NOT NULL,IS_ORIGINAL_SOURCE BOOLEAN_CHAR NOT NULL DEFAULT 'F',REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE DATA_SET_RELATIONSHIPS (DATA_ID_PARENT TECH_ID NOT NULL,DATA_ID_CHILD TECH_ID NOT NULL);\\012CREATE TABLE DATA_STORES (ID TECH_ID NOT NULL,DBIN_ID TECH_ID NOT NULL,CODE CODE NOT NULL,DOWNLOAD_URL VARCHAR(1024) NOT NULL,REMOTE_URL VARCHAR(250) NOT NULL,SESSION_TOKEN VARCHAR(50) NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, IS_ARCHIVER_CONFIGURED BOOLEAN_CHAR NOT NULL DEFAULT 'F');\\012CREATE TABLE DATA_STORE_SERVICES  (ID TECH_ID NOT NULL, KEY VARCHAR(256) NOT NULL, LABEL VARCHAR(256) NOT NULL, KIND DATA_STORE_SERVICE_KIND NOT NULL, DATA_STORE_ID TECH_ID NOT NULL);\\012CREATE TABLE DATA_STORE_SERVICE_DATA_SET_TYPES (DATA_STORE_SERVICE_ID TECH_ID NOT NULL, DATA_SET_TYPE_ID TECH_ID NOT NULL);\\012CREATE TABLE DATA_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000 NOT NULL);\\012CREATE TABLE EVENTS (ID TECH_ID NOT NULL,EVENT_TYPE EVENT_TYPE NOT NULL,DESCRIPTION DESCRIPTION_2000,REASON DESCRIPTION_2000,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, entity_type VARCHAR(80) NOT NULL, identifier VARCHAR(250) NOT NULL);\\012CREATE TABLE EXPERIMENTS (ID TECH_ID NOT NULL,PERM_ID CODE NOT NULL,CODE CODE NOT NULL,EXTY_ID TECH_ID NOT NULL,MATE_ID_STUDY_OBJECT TECH_ID,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, PROJ_ID TECH_ID NOT NULL,INVA_ID TECH_ID,IS_PUBLIC BOOLEAN_CHAR NOT NULL DEFAULT 'F');\\012CREATE TABLE ATTACHMENTS (ID TECH_ID NOT NULL,EXPE_ID TECH_ID,SAMP_ID TECH_ID,PROJ_ID TECH_ID,EXAC_ID TECH_ID NOT NULL,FILE_NAME FILE_NAME NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,VERSION INTEGER NOT NULL,PERS_ID_REGISTERER TECH_ID NOT NULL, title TITLE_100, description DESCRIPTION_2000);\\012CREATE TABLE ATTACHMENT_CONTENTS (ID TECH_ID NOT NULL,VALUE FILE NOT NULL);\\012CREATE TABLE EXPERIMENT_PROPERTIES (ID TECH_ID NOT NULL,EXPE_ID TECH_ID NOT NULL,ETPT_ID TECH_ID NOT NULL,VALUE GENERIC_VALUE,CVTE_ID TECH_ID, MATE_PROP_ID TECH_ID, PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE EXPERIMENT_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000,DBIN_ID TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE EXPERIMENT_TYPE_PROPERTY_TYPES (ID TECH_ID NOT NULL,EXTY_ID TECH_ID NOT NULL,PRTY_ID TECH_ID NOT NULL,IS_MANDATORY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, ORDINAL ORDINAL_INT NOT NULL, SECTION DESCRIPTION_2000);\\012CREATE TABLE EXTERNAL_DATA (DATA_ID TECH_ID NOT NULL,LOCATION VARCHAR(1024) NOT NULL,FFTY_ID TECH_ID NOT NULL,LOTY_ID TECH_ID NOT NULL,CVTE_ID_STOR_FMT TECH_ID NOT NULL,IS_COMPLETE BOOLEAN_CHAR_OR_UNKNOWN NOT NULL DEFAULT 'U',CVTE_ID_STORE TECH_ID, STATUS ARCHIVING_STATUS NOT NULL DEFAULT 'AVAILABLE');\\012CREATE TABLE FILE_FORMAT_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000,DBIN_ID TECH_ID NOT NULL);\\012CREATE TABLE GRID_CUSTOM_COLUMNS (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, CODE VARCHAR(200) NOT NULL, LABEL column_label NOT NULL, DESCRIPTION DESCRIPTION_2000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, PERS_ID_REGISTERER TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, EXPRESSION GRID_EXPRESSION NOT NULL, IS_PUBLIC BOOLEAN NOT NULL, GRID_ID GRID_ID NOT NULL);\\012CREATE TABLE GROUPS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DBIN_ID TECH_ID NOT NULL,DESCRIPTION DESCRIPTION_2000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL);\\012CREATE TABLE INVALIDATIONS (ID TECH_ID NOT NULL,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,REASON DESCRIPTION_2000);\\012CREATE TABLE LOCATOR_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000);\\012CREATE TABLE MATERIALS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,MATY_ID TECH_ID NOT NULL,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, DBIN_ID TECH_ID NOT NULL);\\012CREATE TABLE MATERIAL_PROPERTIES (ID TECH_ID NOT NULL,MATE_ID TECH_ID NOT NULL,MTPT_ID TECH_ID NOT NULL,VALUE GENERIC_VALUE,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, PERS_ID_REGISTERER TECH_ID NOT NULL,CVTE_ID TECH_ID, MATE_PROP_ID TECH_ID);\\012CREATE TABLE MATERIAL_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000,DBIN_ID TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE MATERIAL_TYPE_PROPERTY_TYPES (ID TECH_ID NOT NULL,MATY_ID TECH_ID NOT NULL,PRTY_ID TECH_ID NOT NULL,IS_MANDATORY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL, ORDINAL ORDINAL_INT NOT NULL, SECTION DESCRIPTION_2000);\\012CREATE TABLE DATA_SET_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000,DBIN_ID TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, MAIN_DS_PATTERN VARCHAR(300), MAIN_DS_PATH VARCHAR(1000));\\012CREATE TABLE PERSONS (ID TECH_ID NOT NULL,FIRST_NAME VARCHAR(30),LAST_NAME VARCHAR(30),USER_ID USER_ID NOT NULL,EMAIL OBJECT_NAME,DBIN_ID TECH_ID NOT NULL,GROU_ID TECH_ID,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID, DISPLAY_SETTINGS FILE);\\012CREATE TABLE PROJECTS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,GROU_ID TECH_ID NOT NULL,PERS_ID_LEADER TECH_ID,DESCRIPTION DESCRIPTION_2000,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE PROPERTY_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000 NOT NULL,LABEL COLUMN_LABEL NOT NULL,DATY_ID TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,COVO_ID TECH_ID,IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_INTERNAL_NAMESPACE BOOLEAN_CHAR NOT NULL DEFAULT 'F',DBIN_ID TECH_ID NOT NULL, MATY_PROP_ID TECH_ID);\\012CREATE TABLE ROLE_ASSIGNMENTS (ID TECH_ID NOT NULL,ROLE_CODE AUTHORIZATION_ROLE NOT NULL,GROU_ID TECH_ID,DBIN_ID TECH_ID,PERS_ID_GRANTEE TECH_ID, AG_ID_GRANTEE TECH_ID, PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE SAMPLES (ID TECH_ID NOT NULL,PERM_ID CODE NOT NULL,CODE CODE NOT NULL,EXPE_ID TECH_ID,SAMP_ID_TOP TECH_ID,SAMP_ID_GENERATED_FROM TECH_ID,SATY_ID TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,INVA_ID TECH_ID,SAMP_ID_CONTROL_LAYOUT TECH_ID,DBIN_ID TECH_ID,GROU_ID TECH_ID,SAMP_ID_PART_OF TECH_ID);\\012CREATE TABLE SAMPLE_PROPERTIES (ID TECH_ID NOT NULL,SAMP_ID TECH_ID NOT NULL,STPT_ID TECH_ID NOT NULL,VALUE GENERIC_VALUE,CVTE_ID TECH_ID,MATE_PROP_ID TECH_ID,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE SAMPLE_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_2000,DBIN_ID TECH_ID NOT NULL, IS_LISTABLE BOOLEAN_CHAR NOT NULL DEFAULT 'T', GENERATED_FROM_DEPTH INTEGER NOT NULL DEFAULT 0, PART_OF_DEPTH INTEGER NOT NULL DEFAULT 0, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, is_auto_generated_code BOOLEAN_CHAR NOT NULL DEFAULT 'F', generated_code_prefix CODE NOT NULL DEFAULT 'S');\\012CREATE TABLE SAMPLE_TYPE_PROPERTY_TYPES (ID TECH_ID NOT NULL,SATY_ID TECH_ID NOT NULL,PRTY_ID TECH_ID NOT NULL,IS_MANDATORY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, IS_DISPLAYED BOOLEAN_CHAR NOT NULL DEFAULT 'T', ORDINAL ORDINAL_INT NOT NULL, SECTION DESCRIPTION_2000);\\012\\012CREATE TABLE DATA_SET_PROPERTIES (ID TECH_ID NOT NULL,DS_ID TECH_ID NOT NULL,DSTPT_ID TECH_ID NOT NULL,VALUE GENERIC_VALUE,CVTE_ID TECH_ID, MATE_PROP_ID TECH_ID, PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE DATA_SET_TYPE_PROPERTY_TYPES (ID TECH_ID NOT NULL,DSTY_ID TECH_ID NOT NULL,PRTY_ID TECH_ID NOT NULL,IS_MANDATORY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, ORDINAL ORDINAL_INT NOT NULL, SECTION DESCRIPTION_2000);\\012\\012CREATE TABLE AUTHORIZATION_GROUPS (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, CODE CODE NOT NULL, DESCRIPTION DESCRIPTION_2000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, PERS_ID_REGISTERER TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE AUTHORIZATION_GROUP_PERSONS (AG_ID TECH_ID NOT NULL, PERS_ID TECH_ID NOT NULL);\\012\\012CREATE TABLE FILTERS (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, NAME VARCHAR(200) NOT NULL, DESCRIPTION DESCRIPTION_2000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, PERS_ID_REGISTERER TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, EXPRESSION VARCHAR(2000) NOT NULL, IS_PUBLIC BOOLEAN NOT NULL, GRID_ID VARCHAR(200) NOT NULL);\\012CREATE TABLE QUERIES (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, NAME VARCHAR(200) NOT NULL, DESCRIPTION DESCRIPTION_2000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, PERS_ID_REGISTERER TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, EXPRESSION VARCHAR(2000) NOT NULL, IS_PUBLIC BOOLEAN NOT NULL, QUERY_TYPE QUERY_TYPE NOT NULL, DB_KEY CODE NOT NULL DEFAULT '1');\\012\\012-- Creating sequences\\012\\012CREATE SEQUENCE CONTROLLED_VOCABULARY_ID_SEQ;\\012CREATE SEQUENCE CVTE_ID_SEQ;\\012CREATE SEQUENCE DATABASE_INSTANCE_ID_SEQ;\\012CREATE SEQUENCE DATA_ID_SEQ;\\012CREATE SEQUENCE DATA_SET_RELATIONSHIP_ID_SEQ;\\012CREATE SEQUENCE DATA_STORE_ID_SEQ;\\012CREATE SEQUENCE DATA_STORE_SERVICES_ID_SEQ;\\012CREATE SEQUENCE DATA_TYPE_ID_SEQ;\\012CREATE SEQUENCE ETPT_ID_SEQ;\\012CREATE SEQUENCE EVENT_ID_SEQ;\\012CREATE SEQUENCE ATTACHMENT_ID_SEQ;\\012CREATE SEQUENCE ATTACHMENT_CONTENT_ID_SEQ;\\012CREATE SEQUENCE EXPERIMENT_ID_SEQ;\\012CREATE SEQUENCE EXPERIMENT_PROPERTY_ID_SEQ;\\012CREATE SEQUENCE EXPERIMENT_TYPE_ID_SEQ;\\012CREATE SEQUENCE FILE_FORMAT_TYPE_ID_SEQ;\\012CREATE SEQUENCE GROUP_ID_SEQ;\\012CREATE SEQUENCE INVALIDATION_ID_SEQ;\\012CREATE SEQUENCE LOCATOR_TYPE_ID_SEQ;\\012CREATE SEQUENCE MATERIAL_ID_SEQ;\\012CREATE SEQUENCE MATERIAL_PROPERTY_ID_SEQ;\\012CREATE SEQUENCE MATERIAL_TYPE_ID_SEQ;\\012CREATE SEQUENCE MTPT_ID_SEQ;\\012CREATE SEQUENCE DATA_SET_TYPE_ID_SEQ;\\012CREATE SEQUENCE PERSON_ID_SEQ;\\012CREATE SEQUENCE PROJECT_ID_SEQ;\\012CREATE SEQUENCE PROPERTY_TYPE_ID_SEQ;\\012CREATE SEQUENCE ROLE_ASSIGNMENT_ID_SEQ;\\012CREATE SEQUENCE SAMPLE_ID_SEQ;\\012CREATE SEQUENCE SAMPLE_PROPERTY_ID_SEQ;\\012CREATE SEQUENCE SAMPLE_TYPE_ID_SEQ;\\012CREATE SEQUENCE STPT_ID_SEQ;\\012CREATE SEQUENCE DATA_SET_PROPERTY_ID_SEQ;\\012CREATE SEQUENCE DSTPT_ID_SEQ;\\012CREATE SEQUENCE CODE_SEQ;\\012CREATE SEQUENCE PERM_ID_SEQ;\\012CREATE SEQUENCE AUTHORIZATION_GROUP_ID_SEQ;\\012CREATE SEQUENCE FILTER_ID_SEQ;\\012CREATE SEQUENCE GRID_CUSTOM_COLUMNS_ID_SEQ;\\012CREATE SEQUENCE QUERY_ID_SEQ;\\012\\012-- Creating primary key constraints\\012\\012ALTER TABLE CONTROLLED_VOCABULARIES ADD CONSTRAINT COVO_PK PRIMARY KEY(ID);\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD CONSTRAINT CVTE_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA ADD CONSTRAINT DATA_PK PRIMARY KEY(ID);\\012ALTER TABLE DATABASE_INSTANCES ADD CONSTRAINT DBIN_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA_STORES ADD CONSTRAINT DAST_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA_STORE_SERVICES ADD CONSTRAINT DSSE_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA_TYPES ADD CONSTRAINT DATY_PK PRIMARY KEY(ID);\\012ALTER TABLE EVENTS ADD CONSTRAINT EVNT_PK PRIMARY KEY(ID);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_PK PRIMARY KEY(ID);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_PK PRIMARY KEY(ID);\\012ALTER TABLE ATTACHMENT_CONTENTS ADD CONSTRAINT EXAC_PK PRIMARY KEY(ID);\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_PK PRIMARY KEY(ID);\\012ALTER TABLE EXPERIMENT_TYPES ADD CONSTRAINT EXTY_PK PRIMARY KEY(ID);\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_PK PRIMARY KEY(ID);\\012ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_PK PRIMARY KEY(DATA_ID);\\012ALTER TABLE FILE_FORMAT_TYPES ADD CONSTRAINT FFTY_PK PRIMARY KEY(ID);\\012ALTER TABLE GROUPS ADD CONSTRAINT GROU_PK PRIMARY KEY(ID);\\012ALTER TABLE INVALIDATIONS ADD CONSTRAINT INVA_PK PRIMARY KEY(ID);\\012ALTER TABLE LOCATOR_TYPES ADD CONSTRAINT LOTY_PK PRIMARY KEY(ID);\\012ALTER TABLE MATERIALS ADD CONSTRAINT MATE_PK PRIMARY KEY(ID);\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_PK PRIMARY KEY(ID);\\012ALTER TABLE MATERIAL_TYPES ADD CONSTRAINT MATY_PK PRIMARY KEY(ID);\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA_SET_TYPES ADD CONSTRAINT DSTY_PK PRIMARY KEY(ID);\\012ALTER TABLE PERSONS ADD CONSTRAINT PERS_PK PRIMARY KEY(ID);\\012ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_PK PRIMARY KEY(ID);\\012ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_PK PRIMARY KEY(ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_PK PRIMARY KEY(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_PK PRIMARY KEY(ID);\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_PK PRIMARY KEY(ID);\\012ALTER TABLE SAMPLE_TYPES ADD CONSTRAINT SATY_PK PRIMARY KEY(ID);\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_PK PRIMARY KEY(ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_PK PRIMARY KEY(ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_PK PRIMARY KEY(PERS_ID,AG_ID);\\012ALTER TABLE FILTERS ADD CONSTRAINT FILT_PK PRIMARY KEY(ID);\\012ALTER TABLE GRID_CUSTOM_COLUMNS ADD CONSTRAINT GRID_CUSTOM_COLUMNS_PK PRIMARY KEY(ID);\\012ALTER TABLE QUERIES ADD CONSTRAINT QUER_PK PRIMARY KEY(ID);\\012\\012-- Creating unique constraints\\012\\012ALTER TABLE CONTROLLED_VOCABULARIES ADD CONSTRAINT COVO_BK_UK UNIQUE(CODE,IS_INTERNAL_NAMESPACE,DBIN_ID);\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD CONSTRAINT CVTE_BK_UK UNIQUE(CODE,COVO_ID);\\012ALTER TABLE DATA ADD CONSTRAINT DATA_BK_UK UNIQUE(CODE);\\012ALTER TABLE DATABASE_INSTANCES ADD CONSTRAINT DBIN_BK_UK UNIQUE(CODE);\\012ALTER TABLE DATABASE_INSTANCES ADD CONSTRAINT DBIN_UUID_UK UNIQUE(UUID);\\012ALTER TABLE DATA_SET_RELATIONSHIPS ADD CONSTRAINT DSRE_BK_UK UNIQUE(DATA_ID_CHILD,DATA_ID_PARENT);\\012ALTER TABLE DATA_STORE_SERVICES ADD CONSTRAINT DSSE_BK_UK UNIQUE(KEY, DATA_STORE_ID);\\012ALTER TABLE DATA_STORE_SERVICE_DATA_SET_TYPES ADD CONSTRAINT DSSDST_BK_UK UNIQUE(DATA_STORE_SERVICE_ID, DATA_SET_TYPE_ID);\\012ALTER TABLE DATA_STORES ADD CONSTRAINT DAST_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE DATA_TYPES ADD CONSTRAINT DATY_BK_UK UNIQUE(CODE);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_BK_UK UNIQUE(CODE,PROJ_ID);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_PI_UK UNIQUE(PERM_ID);\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_BK_UK UNIQUE(EXPE_ID,ETPT_ID);\\012ALTER TABLE EXPERIMENT_TYPES ADD CONSTRAINT EXTY_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_BK_UK UNIQUE(EXTY_ID,PRTY_ID);\\012ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_BK_UK UNIQUE(LOCATION,LOTY_ID);\\012ALTER TABLE FILE_FORMAT_TYPES ADD CONSTRAINT FFTY_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE GROUPS ADD CONSTRAINT GROU_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE LOCATOR_TYPES ADD CONSTRAINT LOTY_BK_UK UNIQUE(CODE);\\012ALTER TABLE MATERIALS ADD CONSTRAINT MATE_BK_UK UNIQUE(CODE,MATY_ID,DBIN_ID);\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_BK_UK UNIQUE(MATE_ID,MTPT_ID);\\012ALTER TABLE MATERIAL_TYPES ADD CONSTRAINT MATY_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_BK_UK UNIQUE(MATY_ID,PRTY_ID);\\012ALTER TABLE DATA_SET_TYPES ADD CONSTRAINT DSTY_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE PERSONS ADD CONSTRAINT PERS_BK_UK UNIQUE(DBIN_ID,USER_ID);\\012ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_BK_UK UNIQUE(CODE,GROU_ID);\\012ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_BK_UK UNIQUE(CODE,IS_INTERNAL_NAMESPACE,DBIN_ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_PE_GROUP_BK_UK UNIQUE(PERS_ID_GRANTEE,ROLE_CODE,GROU_ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_PE_INSTANCE_BK_UK UNIQUE(PERS_ID_GRANTEE,ROLE_CODE,DBIN_ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_AG_GROUP_BK_UK UNIQUE(AG_ID_GRANTEE,ROLE_CODE,GROU_ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_AG_INSTANCE_BK_UK UNIQUE(AG_ID_GRANTEE,ROLE_CODE,DBIN_ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_PI_UK UNIQUE(PERM_ID);\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_BK_UK UNIQUE(SAMP_ID,STPT_ID);\\012ALTER TABLE SAMPLE_TYPES ADD CONSTRAINT SATY_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_BK_UK UNIQUE(SATY_ID,PRTY_ID);\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_BK_UK UNIQUE(DSTY_ID,PRTY_ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_BK_UK UNIQUE(DS_ID,DSTPT_ID);\\012-- NOTE: following uniqueness constraints for attachments work, because (null != null) in Postgres \\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_EXPE_BK_UK UNIQUE(EXPE_ID,FILE_NAME,VERSION);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_PROJ_BK_UK UNIQUE(PROJ_ID,FILE_NAME,VERSION);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_SAMP_BK_UK UNIQUE(SAMP_ID,FILE_NAME,VERSION);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE FILTERS ADD CONSTRAINT FILT_BK_UK UNIQUE(NAME, DBIN_ID, GRID_ID);\\012ALTER TABLE GRID_CUSTOM_COLUMNS ADD CONSTRAINT GRID_CUSTOM_COLUMNS_BK_UK UNIQUE(CODE, DBIN_ID, GRID_ID);\\012ALTER TABLE QUERIES ADD CONSTRAINT QUER_BK_UK UNIQUE(NAME, DBIN_ID);\\012\\012-- Creating foreign key constraints\\012\\012ALTER TABLE CONTROLLED_VOCABULARIES ADD CONSTRAINT COVO_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE CONTROLLED_VOCABULARIES ADD CONSTRAINT COVO_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD CONSTRAINT CVTE_COVO_FK FOREIGN KEY (COVO_ID) REFERENCES CONTROLLED_VOCABULARIES(ID);\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD CONSTRAINT CVTE_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE DATA ADD CONSTRAINT DATA_DSTY_FK FOREIGN KEY (DSTY_ID) REFERENCES DATA_SET_TYPES(ID);\\012ALTER TABLE DATA ADD CONSTRAINT DATA_EXPE_FK FOREIGN KEY (EXPE_ID) REFERENCES EXPERIMENTS(ID);\\012ALTER TABLE DATA ADD CONSTRAINT DATA_SAMP_FK FOREIGN KEY (SAMP_ID) REFERENCES SAMPLES(ID);\\012ALTER TABLE DATA ADD CONSTRAINT DATA_DAST_FK FOREIGN KEY (DAST_ID) REFERENCES DATA_STORES(ID);\\012ALTER TABLE DATA_SET_RELATIONSHIPS ADD CONSTRAINT DSRE_DATA_FK_CHILD FOREIGN KEY (DATA_ID_CHILD) REFERENCES DATA(ID);\\012ALTER TABLE DATA_SET_RELATIONSHIPS ADD CONSTRAINT DSRE_DATA_FK_PARENT FOREIGN KEY (DATA_ID_PARENT) REFERENCES DATA(ID);\\012ALTER TABLE DATA_STORES ADD CONSTRAINT DAST_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE DATA_STORE_SERVICES ADD CONSTRAINT DSSE_DS_FK FOREIGN KEY (DATA_STORE_ID) REFERENCES DATA_STORES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_STORE_SERVICE_DATA_SET_TYPES ADD CONSTRAINT DSSDST_DS_FK FOREIGN KEY (DATA_STORE_SERVICE_ID) REFERENCES DATA_STORE_SERVICES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_STORE_SERVICE_DATA_SET_TYPES ADD CONSTRAINT DSSDST_DST_FK FOREIGN KEY (DATA_SET_TYPE_ID) REFERENCES DATA_SET_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE EVENTS ADD CONSTRAINT EVNT_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_EXTY_FK FOREIGN KEY (EXTY_ID) REFERENCES EXPERIMENT_TYPES(ID);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_INVA_FK FOREIGN KEY (INVA_ID) REFERENCES INVALIDATIONS(ID);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_MATE_FK FOREIGN KEY (MATE_ID_STUDY_OBJECT) REFERENCES MATERIALS(ID);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE EXPERIMENTS ADD CONSTRAINT EXPE_PROJ_FK FOREIGN KEY (PROJ_ID) REFERENCES PROJECTS(ID);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_EXPE_FK FOREIGN KEY (EXPE_ID) REFERENCES EXPERIMENTS(ID);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_PROJ_FK FOREIGN KEY (PROJ_ID) REFERENCES PROJECTS(ID);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_SAMP_FK FOREIGN KEY (SAMP_ID) REFERENCES SAMPLES(ID);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_CONT_FK FOREIGN KEY (EXAC_ID) REFERENCES ATTACHMENT_CONTENTS(ID);\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_CVTE_FK FOREIGN KEY (CVTE_ID) REFERENCES CONTROLLED_VOCABULARY_TERMS(ID);\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_ETPT_FK FOREIGN KEY (ETPT_ID) REFERENCES EXPERIMENT_TYPE_PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_EXPE_FK FOREIGN KEY (EXPE_ID) REFERENCES EXPERIMENTS(ID);\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_MAPR_FK FOREIGN KEY (MATE_PROP_ID) REFERENCES MATERIALS(ID);\\012ALTER TABLE EXPERIMENT_TYPES ADD CONSTRAINT EXTY_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_EXTY_FK FOREIGN KEY (EXTY_ID) REFERENCES EXPERIMENT_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_PRTY_FK FOREIGN KEY (PRTY_ID) REFERENCES PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_CVTE_FK FOREIGN KEY (CVTE_ID_STOR_FMT) REFERENCES CONTROLLED_VOCABULARY_TERMS(ID);\\012ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_CVTE_STORED_ON_FK FOREIGN KEY (CVTE_ID_STORE) REFERENCES CONTROLLED_VOCABULARY_TERMS(ID);\\012ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_DATA_FK FOREIGN KEY (DATA_ID) REFERENCES DATA(ID);\\012ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_FFTY_FK FOREIGN KEY (FFTY_ID) REFERENCES FILE_FORMAT_TYPES(ID);\\012ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_LOTY_FK FOREIGN KEY (LOTY_ID) REFERENCES LOCATOR_TYPES(ID);\\012ALTER TABLE FILE_FORMAT_TYPES ADD CONSTRAINT FFTY_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE GROUPS ADD CONSTRAINT GROU_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE GROUPS ADD CONSTRAINT GROU_PERS_FK_REGISTERER FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE INVALIDATIONS ADD CONSTRAINT INVA_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE MATERIALS ADD CONSTRAINT MATE_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE MATERIALS ADD CONSTRAINT MATE_MATY_FK FOREIGN KEY (MATY_ID) REFERENCES MATERIAL_TYPES(ID);\\012ALTER TABLE MATERIALS ADD CONSTRAINT MATE_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_CVTE_FK FOREIGN KEY (CVTE_ID) REFERENCES CONTROLLED_VOCABULARY_TERMS(ID);\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_MAPR_FK FOREIGN KEY (MATE_PROP_ID) REFERENCES MATERIALS(ID);\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_MATE_FK FOREIGN KEY (MATE_ID) REFERENCES MATERIALS(ID);\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_MTPT_FK FOREIGN KEY (MTPT_ID) REFERENCES MATERIAL_TYPE_PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE MATERIAL_TYPES ADD CONSTRAINT MATY_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_MATY_FK FOREIGN KEY (MATY_ID) REFERENCES MATERIAL_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_PRTY_FK FOREIGN KEY (PRTY_ID) REFERENCES PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_SET_TYPES ADD CONSTRAINT DSTY_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE PERSONS ADD CONSTRAINT PERS_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE PERSONS ADD CONSTRAINT PERS_GROU_FK FOREIGN KEY (GROU_ID) REFERENCES GROUPS(ID);\\012ALTER TABLE PERSONS ADD CONSTRAINT PERS_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_GROU_FK FOREIGN KEY (GROU_ID) REFERENCES GROUPS(ID);\\012ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_PERS_FK_LEADER FOREIGN KEY (PERS_ID_LEADER) REFERENCES PERSONS(ID);\\012ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_PERS_FK_REGISTERER FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_COVO_FK FOREIGN KEY (COVO_ID) REFERENCES CONTROLLED_VOCABULARIES(ID);\\012ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_DATY_FK FOREIGN KEY (DATY_ID) REFERENCES DATA_TYPES(ID);\\012ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_MATY_FK FOREIGN KEY (MATY_PROP_ID) REFERENCES MATERIAL_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_GROU_FK FOREIGN KEY (GROU_ID) REFERENCES GROUPS(ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_PERS_FK_GRANTEE FOREIGN KEY (PERS_ID_GRANTEE) REFERENCES PERSONS(ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_AG_FK_GRANTEE FOREIGN KEY (AG_ID_GRANTEE) REFERENCES AUTHORIZATION_GROUPS(ID);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_PERS_FK_REGISTERER FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_GROU_FK FOREIGN KEY (GROU_ID) REFERENCES GROUPS(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_INVA_FK FOREIGN KEY (INVA_ID) REFERENCES INVALIDATIONS(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_SAMP_FK_CONTROL_LAYOUT FOREIGN KEY (SAMP_ID_CONTROL_LAYOUT) REFERENCES SAMPLES(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_SAMP_FK_GENERATED_FROM FOREIGN KEY (SAMP_ID_GENERATED_FROM) REFERENCES SAMPLES(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_SAMP_FK_PART_OF FOREIGN KEY (SAMP_ID_PART_OF) REFERENCES SAMPLES(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_SAMP_FK_TOP FOREIGN KEY (SAMP_ID_TOP) REFERENCES SAMPLES(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_EXPE_FK FOREIGN KEY (EXPE_ID) REFERENCES EXPERIMENTS(ID);\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_SATY_FK FOREIGN KEY (SATY_ID) REFERENCES SAMPLE_TYPES(ID);\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_CVTE_FK FOREIGN KEY (CVTE_ID) REFERENCES CONTROLLED_VOCABULARY_TERMS(ID);\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_MAPR_FK FOREIGN KEY (MATE_PROP_ID) REFERENCES MATERIALS(ID);\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_SAMP_FK FOREIGN KEY (SAMP_ID) REFERENCES SAMPLES(ID);\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_STPT_FK FOREIGN KEY (STPT_ID) REFERENCES SAMPLE_TYPE_PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE SAMPLE_TYPES ADD CONSTRAINT SATY_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_PRTY_FK FOREIGN KEY (PRTY_ID) REFERENCES PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_SATY_FK FOREIGN KEY (SATY_ID) REFERENCES SAMPLE_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_DSTY_FK FOREIGN KEY (DSTY_ID) REFERENCES DATA_SET_TYPES(ID)  ON DELETE CASCADE;\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_PRTY_FK FOREIGN KEY (PRTY_ID) REFERENCES PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_CVTE_FK FOREIGN KEY (CVTE_ID) REFERENCES CONTROLLED_VOCABULARY_TERMS(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_DSTPT_FK FOREIGN KEY (DSTPT_ID) REFERENCES DATA_SET_TYPE_PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_DS_FK FOREIGN KEY (DS_ID) REFERENCES DATA(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_MAPR_FK FOREIGN KEY (MATE_PROP_ID) REFERENCES MATERIALS(ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_AG_FK FOREIGN KEY (AG_ID) REFERENCES AUTHORIZATION_GROUPS(ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_PERS_FK FOREIGN KEY (PERS_ID) REFERENCES PERSONS(ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012\\012ALTER TABLE FILTERS ADD CONSTRAINT FILT_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE FILTERS ADD CONSTRAINT FILT_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE GRID_CUSTOM_COLUMNS ADD CONSTRAINT GRID_CUSTOM_COLUMNS_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE GRID_CUSTOM_COLUMNS ADD CONSTRAINT GRID_CUSTOM_COLUMNS_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE QUERIES ADD CONSTRAINT QUER_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE QUERIES ADD CONSTRAINT QUER_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012\\012-- Creating check constraints\\012\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_DBIN_GROU_ARC_CK CHECK ((DBIN_ID IS NOT NULL AND GROU_ID IS NULL) OR (DBIN_ID IS NULL AND GROU_ID IS NOT NULL));\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_AG_PERS_ARC_CK CHECK ((AG_ID_GRANTEE IS NOT NULL AND PERS_ID_GRANTEE IS NULL) OR (AG_ID_GRANTEE IS NULL AND PERS_ID_GRANTEE IS NOT NULL));\\012\\012ALTER TABLE SAMPLES ADD CONSTRAINT SAMP_DBIN_GROU_ARC_CK CHECK ((DBIN_ID IS NOT NULL AND GROU_ID IS NULL) OR (DBIN_ID IS NULL AND GROU_ID IS NOT NULL));\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012ALTER TABLE ATTACHMENTS ADD CONSTRAINT ATTA_ARC_CK CHECK \\012\\011((EXPE_ID IS NOT NULL AND PROJ_ID IS NULL AND SAMP_ID IS NULL) OR \\012\\011 (EXPE_ID IS NULL AND PROJ_ID IS NOT NULL AND SAMP_ID IS NULL) OR\\012\\011 (EXPE_ID IS NULL AND PROJ_ID IS NULL AND SAMP_ID IS NOT NULL)\\012\\011);\\012ALTER TABLE events ADD CONSTRAINT evnt_et_enum_ck CHECK \\012\\011(entity_type IN ('ATTACHMENT', 'DATASET', 'EXPERIMENT', 'GROUP', 'MATERIAL', 'PROJECT', 'PROPERTY_TYPE', 'SAMPLE', 'VOCABULARY', 'AUTHORIZATION_GROUP')); \\012ALTER TABLE controlled_vocabulary_terms ADD CONSTRAINT cvte_ck CHECK (ordinal > 0);\\012\\012-- Creating indices\\012\\012CREATE INDEX COVO_PERS_FK_I ON CONTROLLED_VOCABULARIES (PERS_ID_REGISTERER);\\012CREATE INDEX CVTE_COVO_FK_I ON CONTROLLED_VOCABULARY_TERMS (COVO_ID);\\012CREATE INDEX CVTE_PERS_FK_I ON CONTROLLED_VOCABULARY_TERMS (PERS_ID_REGISTERER);\\012CREATE INDEX DATA_DSTY_FK_I ON DATA (DSTY_ID);\\012CREATE INDEX DATA_SAMP_FK_I ON DATA (SAMP_ID);\\012CREATE INDEX DATA_EXPE_FK_I ON DATA (EXPE_ID);\\012CREATE INDEX DAST_DBIN_FK_I ON DATA_STORES (DBIN_ID);\\012CREATE INDEX DSRE_DATA_FK_I_CHILD ON DATA_SET_RELATIONSHIPS (DATA_ID_CHILD);\\012CREATE INDEX DSRE_DATA_FK_I_PARENT ON DATA_SET_RELATIONSHIPS (DATA_ID_PARENT);\\012CREATE INDEX DSSE_DS_FK_I ON DATA_STORE_SERVICES (DATA_STORE_ID);\\012CREATE INDEX DSSDST_DS_FK_I ON DATA_STORE_SERVICE_DATA_SET_TYPES (DATA_STORE_SERVICE_ID);\\012CREATE INDEX DSSDST_DST_FK_I ON DATA_STORE_SERVICE_DATA_SET_TYPES (DATA_SET_TYPE_ID);\\012CREATE INDEX ETPT_EXTY_FK_I ON EXPERIMENT_TYPE_PROPERTY_TYPES (EXTY_ID);\\012CREATE INDEX ETPT_PERS_FK_I ON EXPERIMENT_TYPE_PROPERTY_TYPES (PERS_ID_REGISTERER);\\012CREATE INDEX ETPT_PRTY_FK_I ON EXPERIMENT_TYPE_PROPERTY_TYPES (PRTY_ID);\\012CREATE INDEX EVNT_PERS_FK_I ON EVENTS (PERS_ID_REGISTERER);\\012CREATE INDEX ATTA_EXPE_FK_I ON ATTACHMENTS (EXPE_ID);\\012CREATE INDEX ATTA_SAMP_FK_I ON ATTACHMENTS (SAMP_ID);\\012CREATE INDEX ATTA_PROJ_FK_I ON ATTACHMENTS (PROJ_ID);\\012CREATE INDEX ATTA_PERS_FK_I ON ATTACHMENTS (PERS_ID_REGISTERER);\\012CREATE INDEX ATTA_EXAC_FK_I ON ATTACHMENTS (EXAC_ID);\\012CREATE INDEX EXDA_CVTE_FK_I ON EXTERNAL_DATA (CVTE_ID_STOR_FMT);\\012CREATE INDEX EXDA_CVTE_STORED_ON_FK_I ON EXTERNAL_DATA (CVTE_ID_STORE);\\012CREATE INDEX EXDA_FFTY_FK_I ON EXTERNAL_DATA (FFTY_ID);\\012CREATE INDEX EXDA_LOTY_FK_I ON EXTERNAL_DATA (LOTY_ID);\\012CREATE INDEX EXPE_EXTY_FK_I ON EXPERIMENTS (EXTY_ID);\\012CREATE INDEX EXPE_INVA_FK_I ON EXPERIMENTS (INVA_ID);\\012CREATE INDEX EXPE_MATE_FK_I ON EXPERIMENTS (MATE_ID_STUDY_OBJECT);\\012CREATE INDEX EXPE_PERS_FK_I ON EXPERIMENTS (PERS_ID_REGISTERER);\\012CREATE INDEX EXPE_PROJ_FK_I ON EXPERIMENTS (PROJ_ID);\\012CREATE INDEX EXPR_CVTE_FK_I ON EXPERIMENT_PROPERTIES (CVTE_ID);\\012CREATE INDEX EXPR_ETPT_FK_I ON EXPERIMENT_PROPERTIES (ETPT_ID);\\012CREATE INDEX EXPR_EXPE_FK_I ON EXPERIMENT_PROPERTIES (EXPE_ID);\\012CREATE INDEX EXPR_PERS_FK_I ON EXPERIMENT_PROPERTIES (PERS_ID_REGISTERER);\\012CREATE INDEX GROU_DBIN_FK_I ON GROUPS (DBIN_ID);\\012CREATE INDEX GROU_PERS_REGISTERED_BY_FK_I ON GROUPS (PERS_ID_REGISTERER);\\012CREATE INDEX INVA_PERS_FK_I ON INVALIDATIONS (PERS_ID_REGISTERER);\\012CREATE INDEX MAPR_CVTE_FK_I ON MATERIAL_PROPERTIES (CVTE_ID);\\012CREATE INDEX MAPR_MATE_FK_I ON MATERIAL_PROPERTIES (MATE_ID);\\012CREATE INDEX MAPR_MTPT_FK_I ON MATERIAL_PROPERTIES (MTPT_ID);\\012CREATE INDEX MAPR_PERS_FK_I ON MATERIAL_PROPERTIES (PERS_ID_REGISTERER);\\012CREATE INDEX MATE_MATY_FK_I ON MATERIALS (MATY_ID);\\012CREATE INDEX MATE_PERS_FK_I ON MATERIALS (PERS_ID_REGISTERER);\\012CREATE INDEX MTPT_MATY_FK_I ON MATERIAL_TYPE_PROPERTY_TYPES (MATY_ID);\\012CREATE INDEX MTPT_PERS_FK_I ON MATERIAL_TYPE_PROPERTY_TYPES (PERS_ID_REGISTERER);\\012CREATE INDEX MTPT_PRTY_FK_I ON MATERIAL_TYPE_PROPERTY_TYPES (PRTY_ID);\\012CREATE INDEX PERS_GROU_FK_I ON PERSONS (GROU_ID);\\012CREATE INDEX PROJ_GROU_FK_I ON PROJECTS (GROU_ID);\\012CREATE INDEX PROJ_PERS_FK_I_LEADER ON PROJECTS (PERS_ID_LEADER);\\012CREATE INDEX PROJ_PERS_FK_I_REGISTERER ON PROJECTS (PERS_ID_REGISTERER);\\012CREATE INDEX PRTY_COVO_FK_I ON PROPERTY_TYPES (COVO_ID);\\012CREATE INDEX PRTY_DATY_FK_I ON PROPERTY_TYPES (DATY_ID);\\012CREATE INDEX PRTY_PERS_FK_I ON PROPERTY_TYPES (PERS_ID_REGISTERER);\\012CREATE INDEX ROAS_DBIN_FK_I ON ROLE_ASSIGNMENTS (DBIN_ID);\\012CREATE INDEX ROAS_GROU_FK_I ON ROLE_ASSIGNMENTS (GROU_ID);\\012CREATE INDEX ROAS_PERS_FK_I_GRANTEE ON ROLE_ASSIGNMENTS (PERS_ID_GRANTEE);\\012CREATE INDEX ROAS_AG_FK_I_GRANTEE ON ROLE_ASSIGNMENTS (AG_ID_GRANTEE);\\012CREATE INDEX ROAS_PERS_FK_I_REGISTERER ON ROLE_ASSIGNMENTS (PERS_ID_REGISTERER);\\012CREATE INDEX SAMP_INVA_FK_I ON SAMPLES (INVA_ID);\\012CREATE INDEX SAMP_PERS_FK_I ON SAMPLES (PERS_ID_REGISTERER);\\012CREATE INDEX SAMP_SAMP_FK_I_CONTROL_LAYOUT ON SAMPLES (SAMP_ID_CONTROL_LAYOUT);\\012CREATE INDEX SAMP_SAMP_FK_I_GENERATED_FROM ON SAMPLES (SAMP_ID_GENERATED_FROM);\\012CREATE INDEX SAMP_SAMP_FK_I_PART_OF ON SAMPLES (SAMP_ID_PART_OF);\\012CREATE INDEX SAMP_SAMP_FK_I_TOP ON SAMPLES (SAMP_ID_TOP);\\012CREATE INDEX SAMP_EXPE_FK_I ON SAMPLES (EXPE_ID);\\012CREATE INDEX SAMP_CODE_I ON SAMPLES (CODE);\\012CREATE INDEX SAMP_SATY_FK_I ON SAMPLES (SATY_ID);\\012CREATE INDEX SAPR_CVTE_FK_I ON SAMPLE_PROPERTIES (CVTE_ID);\\012CREATE INDEX SAPR_PERS_FK_I ON SAMPLE_PROPERTIES (PERS_ID_REGISTERER);\\012CREATE INDEX SAPR_SAMP_FK_I ON SAMPLE_PROPERTIES (SAMP_ID);\\012CREATE INDEX SAPR_STPT_FK_I ON SAMPLE_PROPERTIES (STPT_ID);\\012CREATE INDEX STPT_PERS_FK_I ON SAMPLE_TYPE_PROPERTY_TYPES (PERS_ID_REGISTERER);\\012CREATE INDEX STPT_PRTY_FK_I ON SAMPLE_TYPE_PROPERTY_TYPES (PRTY_ID);\\012CREATE INDEX STPT_SATY_FK_I ON SAMPLE_TYPE_PROPERTY_TYPES (SATY_ID);\\012CREATE INDEX DSPR_CVTE_FK_I ON DATA_SET_PROPERTIES (CVTE_ID);\\012CREATE INDEX DSPR_DSTPT_FK_I ON DATA_SET_PROPERTIES (DSTPT_ID);\\012CREATE INDEX DSPR_DS_FK_I ON DATA_SET_PROPERTIES (DS_ID);\\012CREATE INDEX DSPR_PERS_FK_I ON DATA_SET_PROPERTIES (PERS_ID_REGISTERER);\\012CREATE INDEX DSTPT_DSTY_FK_I ON DATA_SET_TYPE_PROPERTY_TYPES (DSTY_ID);\\012CREATE INDEX DSTPT_PERS_FK_I ON DATA_SET_TYPE_PROPERTY_TYPES (PERS_ID_REGISTERER);\\012CREATE INDEX DSTPT_PRTY_FK_I ON DATA_SET_TYPE_PROPERTY_TYPES (PRTY_ID);\\012CREATE INDEX FILT_PERS_FK_I ON FILTERS (PERS_ID_REGISTERER);\\012CREATE INDEX FILT_DBIN_FK_I ON FILTERS (DBIN_ID);\\012CREATE INDEX GRID_CUSTOM_COLUMNS_PERS_FK_I ON GRID_CUSTOM_COLUMNS (PERS_ID_REGISTERER);\\012CREATE INDEX GRID_CUSTOM_COLUMNS_DBIN_FK_I ON GRID_CUSTOM_COLUMNS (DBIN_ID);\\012	\N
-052	./source//sql/postgresql/052/function-052.sql	SUCCESS	2010-05-26 13:38:36.559	-- Creating Functions\\012\\012------------------------------------------------------------------------------------\\012--  Purpose:  Create function RENAME_SEQUENCE() that is required for renaming the sequences belonging to tables\\012------------------------------------------------------------------------------------\\012CREATE FUNCTION RENAME_SEQUENCE(OLD_NAME VARCHAR, NEW_NAME VARCHAR) RETURNS INTEGER AS $$\\012DECLARE\\012  CURR_SEQ_VAL   INTEGER;\\012BEGIN\\012  SELECT INTO CURR_SEQ_VAL NEXTVAL(OLD_NAME);\\012  EXECUTE 'CREATE SEQUENCE ' || NEW_NAME || ' START WITH ' || CURR_SEQ_VAL;\\012  EXECUTE 'DROP SEQUENCE ' || OLD_NAME;\\012  RETURN CURR_SEQ_VAL;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012\\012------------------------------------------------------------------------------------\\012--  Purpose:  Create trigger CONTROLLED_VOCABULARY_CHECK \\012------------------------------------------------------------------------------------\\012\\012CREATE OR REPLACE FUNCTION CONTROLLED_VOCABULARY_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   v_code  CODE;\\012BEGIN\\012\\012   select code into v_code from data_types where id = NEW.daty_id;\\012\\012   -- Check if the data is of type "CONTROLLEDVOCABULARY"\\012   if v_code = 'CONTROLLEDVOCABULARY' then\\012      if NEW.covo_id IS NULL then\\012         RAISE EXCEPTION 'Insert/Update of Property Type (Code: %) failed, as its Data Type is CONTROLLEDVOCABULARY, but it is not linked to a Controlled Vocabulary.', NEW.code;\\012      end if;\\012   end if;\\012\\012   RETURN NEW;\\012\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER CONTROLLED_VOCABULARY_CHECK BEFORE INSERT OR UPDATE ON PROPERTY_TYPES\\012    FOR EACH ROW EXECUTE PROCEDURE CONTROLLED_VOCABULARY_CHECK();\\012\\012\\012------------------------------------------------------------------------------------\\012--  Purpose:  Create trigger EXTERNAL_DATA_STORAGE_FORMAT_CHECK \\012------------------------------------------------------------------------------------\\012\\012CREATE OR REPLACE FUNCTION EXTERNAL_DATA_STORAGE_FORMAT_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   v_covo_code  CODE;\\012   data_code CODE;\\012BEGIN\\012\\012   select code into v_covo_code from controlled_vocabularies\\012      where is_internal_namespace = true and \\012         id = (select covo_id from controlled_vocabulary_terms where id = NEW.cvte_id_stor_fmt);\\012   -- Check if the data storage format is a term of the controlled vocabulary "STORAGE_FORMAT"\\012   if v_covo_code != 'STORAGE_FORMAT' then\\012      select code into data_code from data where id = NEW.data_id; \\012      RAISE EXCEPTION 'Insert/Update of Data (Code: %) failed, as its Storage Format is %, but is required to be STORAGE_FORMAT.', data_code, v_covo_code;\\012   end if;\\012\\012   RETURN NEW;\\012\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER EXTERNAL_DATA_STORAGE_FORMAT_CHECK BEFORE INSERT OR UPDATE ON EXTERNAL_DATA\\012    FOR EACH ROW EXECUTE PROCEDURE EXTERNAL_DATA_STORAGE_FORMAT_CHECK();\\012\\012   \\012------------------------------------------------------------------------------------\\012--  Purpose:  Create trigger SAMPLE_CODE_UNIQUENESS_CHECK \\012------------------------------------------------------------------------------------\\012\\012CREATE OR REPLACE FUNCTION SAMPLE_CODE_UNIQUENESS_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   counter  INTEGER;\\012BEGIN\\012    LOCK TABLE samples IN EXCLUSIVE MODE;\\012\\011IF (NEW.samp_id_part_of is NULL) THEN\\012\\011\\011IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and dbin_id = NEW.dbin_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011ELSIF (NEW.grou_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and grou_id = NEW.grou_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because group sample with the same code already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011END IF;\\012        ELSE\\012\\011\\011IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and dbin_id = NEW.dbin_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code and being the part of the same parent already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011ELSIF (NEW.grou_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and grou_id = NEW.grou_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because group sample with the same code and being the part of the same parent already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011END IF;\\012        END IF;   \\012   RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER SAMPLE_CODE_UNIQUENESS_CHECK BEFORE INSERT OR UPDATE ON SAMPLES\\012    FOR EACH ROW EXECUTE PROCEDURE SAMPLE_CODE_UNIQUENESS_CHECK();\\012    \\012------------------------------------------------------------------------------------\\012--  Purpose:  Create trigger MATERIAL/SAMPLE/EXPERIMENT/DATA_SET _PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK\\012--            It checks that if material property value is assigned to the entity,\\012--\\011\\011\\011\\011\\011\\011then the material type is equal to the one described by property type.\\012------------------------------------------------------------------------------------\\012\\012CREATE OR REPLACE FUNCTION MATERIAL_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   v_type_id  CODE;\\012   v_type_id_prop  CODE;\\012BEGIN\\012   if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011  from material_type_property_types etpt, property_types pt \\012\\011\\011\\011 where NEW.mtpt_id = etpt.id AND etpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011  from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012   end if;\\012   RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER MATERIAL_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON material_properties\\012    FOR EACH ROW EXECUTE PROCEDURE MATERIAL_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK();\\012    \\012CREATE OR REPLACE FUNCTION SAMPLE_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   v_type_id  CODE;\\012   v_type_id_prop  CODE;\\012BEGIN\\012   if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011  from sample_type_property_types etpt, property_types pt \\012\\011\\011\\011 where NEW.stpt_id = etpt.id AND etpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011  from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012   end if;\\012   RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER SAMPLE_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON sample_properties\\012    FOR EACH ROW EXECUTE PROCEDURE SAMPLE_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK();\\012    \\012CREATE OR REPLACE FUNCTION EXPERIMENT_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   v_type_id  CODE;\\012   v_type_id_prop  CODE;\\012BEGIN\\012   if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011  from experiment_type_property_types etpt, property_types pt \\012\\011\\011\\011 where NEW.etpt_id = etpt.id AND etpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011  from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012   end if;\\012   RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER EXPERIMENT_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON experiment_properties\\012    FOR EACH ROW EXECUTE PROCEDURE EXPERIMENT_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK();\\012 \\012 -- data set\\012CREATE OR REPLACE FUNCTION DATA_SET_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012   v_type_id  CODE;\\012   v_type_id_prop  CODE;\\012BEGIN\\012   if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011  from data_set_type_property_types dstpt, property_types pt \\012\\011\\011\\011 where NEW.dstpt_id = dstpt.id AND dstpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011  from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012   end if;\\012   RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER DATA_SET_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON data_set_properties\\012    FOR EACH ROW EXECUTE PROCEDURE DATA_SET_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK();   \\012    \\012---------------------------------------------------------------------------------------------------\\012--  Purpose:  Create DEFERRED triggers:\\012--            * check_dataset_relationships_on_data_table_modification,\\012--            * check_dataset_relationships_on_relationships_table_modification.\\012--            They check that after all modifications of database (just before commit) \\012--            if 'data'/'data_set_relationships' tables are among modified tables \\012--            dataset is not connected with a sample and a parent dataset at the same time.\\012--            This connections are held in two different tables so simple immediate trigger \\012--            with arc check cannot be used and we need two deferred triggers.\\012----------------------------------------------------------------------------------------------------\\012\\012-- trigger for 'data' table\\012\\012CREATE OR REPLACE FUNCTION check_dataset_relationships_on_data_table_modification() RETURNS trigger AS $$\\012DECLARE\\012\\011counter\\011INTEGER;\\012BEGIN\\012\\011-- if there is a connection with a Sample there should not be any connection with a parent Data Set\\012\\011IF (NEW.samp_id IS NOT NULL) THEN\\012\\011\\011-- count number of parents\\012\\011\\011SELECT count(*) INTO counter \\012\\011\\011\\011FROM data_set_relationships \\012\\011\\011\\011WHERE data_id_child = NEW.id;\\012\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected with a Sample and a parent Data Set at the same time.', NEW.code;\\012\\011\\011END IF;\\012\\011END IF;\\012  RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE CONSTRAINT TRIGGER check_dataset_relationships_on_data_table_modification \\012  AFTER INSERT OR UPDATE ON data\\012\\011DEFERRABLE INITIALLY DEFERRED\\012\\011FOR EACH ROW \\012\\011EXECUTE PROCEDURE check_dataset_relationships_on_data_table_modification();\\012\\012-- trigger for 'data_set_relationships'\\012\\012CREATE OR REPLACE FUNCTION check_dataset_relationships_on_relationships_table_modification() RETURNS trigger AS $$\\012DECLARE\\012\\011counter\\011INTEGER;\\012\\011sample_id\\011TECH_ID;\\012\\011data_code\\011CODE;\\012BEGIN\\012\\011-- child will have a parent added so it should not be connected with any sample\\012\\011SELECT samp_id, code INTO sample_id, data_code \\012\\011\\011FROM data \\012\\011\\011WHERE id = NEW.data_id_child;\\012\\011IF (sample_id IS NOT NULL) THEN\\012\\011\\011RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected to a Sample and to a parent Data Set at the same time.', data_code;\\012\\011END IF;\\012\\011RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012  \\012CREATE CONSTRAINT TRIGGER check_dataset_relationships_on_relationships_table_modification \\012  AFTER INSERT OR UPDATE ON data_set_relationships\\012\\011DEFERRABLE INITIALLY DEFERRED\\012\\011FOR EACH ROW \\012\\011EXECUTE PROCEDURE check_dataset_relationships_on_relationships_table_modification();\\012	\N
-052	./source//sql/postgresql/052/grants-052.sql	SUCCESS	2010-05-26 13:38:36.615	-- Granting SELECT privilege to group OPENBIS_READONLY\\012\\012GRANT SELECT ON SEQUENCE attachment_content_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE attachment_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE code_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE controlled_vocabulary_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE cvte_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE data_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE data_set_property_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE data_set_relationship_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE data_set_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE data_store_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE DATA_STORE_SERVICES_ID_SEQ TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE data_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE database_instance_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE dstpt_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE etpt_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE event_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE experiment_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE experiment_property_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE experiment_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE file_format_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE group_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE invalidation_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE locator_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE material_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE material_property_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE material_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE mtpt_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE perm_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE person_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE project_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE property_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE role_assignment_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE sample_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE sample_property_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE sample_type_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE stpt_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE authorization_group_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE filter_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE query_id_seq TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE attachment_contents TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE attachments TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE controlled_vocabularies TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE controlled_vocabulary_terms TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE data TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE data_set_properties TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE data_set_relationships TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE data_set_type_property_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE data_set_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE data_stores TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE data_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE DATA_STORE_SERVICES TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE DATA_STORE_SERVICE_DATA_SET_TYPES TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE database_instances TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE database_version_logs TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE events TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE experiment_properties TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE experiment_type_property_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE experiment_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE experiments TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE external_data TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE file_format_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE groups TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE invalidations TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE locator_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE material_properties TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE material_type_property_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE material_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE materials TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE persons TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE projects TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE property_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE role_assignments TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE sample_properties TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE sample_type_property_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE sample_types TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE samples TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE authorization_groups TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE authorization_group_persons TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE filters TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE queries TO GROUP OPENBIS_READONLY;\\012	\N
-052	./source//sql/generic/052/data-052.sql	SUCCESS	2010-05-26 13:38:36.686	----------------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table DATABASE_INSTANCES\\012----------------------------------------------------------------------------\\012\\012INSERT INTO database_instances(\\012              id\\012            , code\\012\\011    \\011, uuid\\012            , is_original_source)\\012    VALUES (  nextval('DATABASE_INSTANCE_ID_SEQ')\\012            , 'SYSTEM_DEFAULT'\\012\\011    \\011, 'SYSTEM_DEFAULT'\\012            , 'T');\\012\\012----------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table DATA_STORES\\012----------------------------------------------------------------------\\012\\012insert into data_stores\\012(id\\012,code\\012,download_url\\012,remote_url\\012,session_token\\012,dbin_id)\\012values\\012(nextval('DATA_STORE_ID_SEQ')\\012,'STANDARD'\\012,''\\012,''\\012,''\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012----------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table PERSONS\\012-----------------------------------------------------------------------\\012\\012insert into persons\\012(id\\012,first_name\\012,last_name\\012,user_id\\012,email\\012,dbin_id)\\012values\\012(nextval('PERSON_ID_SEQ')\\012,''\\012,'System User'\\012,'system'\\012,''\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT') );\\012\\012-----------------------------------------------------------------------------------\\012--  Purpose:  Create Controlled Vocabulary STORAGE_FORMAT\\012-----------------------------------------------------------------------------------\\012insert into controlled_vocabularies \\012       ( id\\012       , code\\012       , is_internal_namespace      \\012       , description\\012       , pers_id_registerer\\012       , is_managed_internally\\012       , dbin_id)\\012values  (nextval('CONTROLLED_VOCABULARY_ID_SEQ')\\012       , 'STORAGE_FORMAT'\\012       , true\\012       , 'The on-disk storage format of a data set'\\012       , (select id from persons where user_id ='system')\\012       , true\\012       , (select id from database_instances where code = 'SYSTEM_DEFAULT'));\\012\\012\\012-----------------------------------------------------------------------------------\\012--  Purpose:  Create Controlled Vocabulary Terms for STORAGE_FORMAT\\012-----------------------------------------------------------------------------------\\012insert into controlled_vocabulary_terms \\012       ( id\\012       , code\\012       , covo_id \\012       , pers_id_registerer\\012       , ordinal )\\012values  (nextval('CVTE_ID_SEQ')\\012       , 'PROPRIETARY'\\012       , (select id from controlled_vocabularies where code = 'STORAGE_FORMAT' and is_internal_namespace = true)\\012       , (select id from persons where user_id ='system')\\012       , 1);\\012\\012insert into controlled_vocabulary_terms \\012       ( id\\012       , code\\012       , covo_id \\012       , pers_id_registerer\\012       , ordinal)\\012values  (nextval('CVTE_ID_SEQ')\\012       , 'BDS_DIRECTORY'\\012       , (select id from controlled_vocabularies where code = 'STORAGE_FORMAT' and is_internal_namespace = true)\\012       , (select id from persons where user_id ='system')\\012       , 2);\\012\\012------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table DATA_TYPES\\012------------------------------------------------------------------\\012\\012insert into data_types\\012(id\\012,code\\012,description)\\012values \\012(nextval('DATA_TYPE_ID_SEQ')\\012,'VARCHAR'\\012,'Short text'\\012);\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'MULTILINE_VARCHAR'\\012 ,'Long text'\\012);\\012\\012insert into data_types\\012(id\\012,code\\012,description)\\012values \\012(nextval('DATA_TYPE_ID_SEQ')\\012,'INTEGER'\\012,'Integer number'\\012);\\012\\012insert into data_types\\012(id\\012,code\\012,description)\\012values \\012(nextval('DATA_TYPE_ID_SEQ')\\012,'REAL'\\012,'Real number, i.e. an inexact, variable-precision numeric type'\\012);\\012\\012insert into data_types\\012(id\\012,code\\012,description)\\012values \\012(nextval('DATA_TYPE_ID_SEQ')\\012,'BOOLEAN'\\012,'True or False'\\012);\\012\\012insert into data_types\\012(id\\012,code\\012,description)\\012values \\012(nextval('DATA_TYPE_ID_SEQ')\\012,'TIMESTAMP'\\012,'Both date and time. Format: yyyy-mm-dd hh:mm:ss'\\012);\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'CONTROLLEDVOCABULARY'\\012 ,'Controlled Vocabulary'\\012);\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'MATERIAL'\\012 ,'Reference to a material'\\012);\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'HYPERLINK'\\012 ,'Address of a web page'\\012);\\012\\012----------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table PROPERTY_TYPES\\012-----------------------------------------------------------------------\\012\\012insert into property_types\\012(id\\012,code\\012,description\\012,label\\012,daty_id\\012,pers_id_registerer\\012,dbin_id)\\012values \\012(nextval('PROPERTY_TYPE_ID_SEQ')\\012,'DESCRIPTION'\\012,'A Description'\\012,'Description'\\012,(select id from data_types where code ='VARCHAR')\\012,(select id from persons where user_id ='system')\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012--------------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table DATA_SET_TYPES\\012--------------------------------------------------------------------------\\012\\012insert into data_set_types\\012(id\\012,code\\012,description\\012,dbin_id)\\012values \\012(nextval('DATA_SET_TYPE_ID_SEQ')\\012,'UNKNOWN'\\012,'Unknown'\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012-------------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table FILE_FORMAT_TYPES\\012-------------------------------------------------------------------------\\012\\012insert into file_format_types\\012(id\\012,code\\012,description\\012,dbin_id)\\012values \\012(nextval('FILE_FORMAT_TYPE_ID_SEQ')\\012,'HDF5'\\012,'Hierarchical Data Format File, version 5'\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012insert into file_format_types\\012(id\\012,code\\012,description\\012,dbin_id)\\012values \\012(nextval('FILE_FORMAT_TYPE_ID_SEQ')\\012,'PROPRIETARY'\\012,'Proprietary Format File'\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012insert into file_format_types\\012(id\\012,code\\012,description\\012,dbin_id)\\012values \\012(nextval('FILE_FORMAT_TYPE_ID_SEQ')\\012,'SRF'\\012,'Sequence Read Format File'\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012insert into file_format_types\\012(id\\012,code\\012,description\\012,dbin_id)\\012values \\012(nextval('FILE_FORMAT_TYPE_ID_SEQ')\\012,'TIFF'\\012,'TIFF File'\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012insert into file_format_types\\012(id\\012,code\\012,description\\012,dbin_id)\\012values \\012(nextval('FILE_FORMAT_TYPE_ID_SEQ')\\012,'TSV'\\012,'Tab Separated Values File'\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012insert into file_format_types\\012(id\\012,code\\012,description\\012,dbin_id)\\012values \\012(nextval('FILE_FORMAT_TYPE_ID_SEQ')\\012,'XML'\\012,'XML File'\\012,(select id from database_instances where code = 'SYSTEM_DEFAULT')\\012);\\012\\012---------------------------------------------------------------------\\012--  Purpose:  Insert an initial data set into the table LOCATOR_TYPES\\012---------------------------------------------------------------------\\012\\012insert into locator_types\\012(id\\012,code\\012,description)\\012values \\012(nextval('LOCATOR_TYPE_ID_SEQ')\\012,'RELATIVE_LOCATION'\\012,'Relative Location'\\012);\\012	\N
-\.
-
-
---
--- Data for Name: events; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY events (id, event_type, description, reason, pers_id_registerer, registration_timestamp, entity_type, identifier) FROM stdin;
-\.
-
-
---
--- Data for Name: experiment_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiment_properties (id, expe_id, etpt_id, value, cvte_id, mate_prop_id, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: experiment_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiment_type_property_types (id, exty_id, prty_id, is_mandatory, is_managed_internally, pers_id_registerer, registration_timestamp, ordinal, section) FROM stdin;
-\.
-
-
---
--- Data for Name: experiment_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiment_types (id, code, description, dbin_id, modification_timestamp) FROM stdin;
-1	PLASMID	\N	1	2010-05-26 13:41:56.662019+02
-\.
-
-
---
--- Data for Name: experiments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY experiments (id, perm_id, code, exty_id, mate_id_study_object, pers_id_registerer, registration_timestamp, modification_timestamp, proj_id, inva_id, is_public) FROM stdin;
-\.
-
-
---
--- Data for Name: external_data; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY external_data (data_id, location, ffty_id, loty_id, cvte_id_stor_fmt, is_complete, cvte_id_store, status) FROM stdin;
-\.
-
-
---
--- Data for Name: file_format_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY file_format_types (id, code, description, dbin_id) FROM stdin;
-1	PROPRIETARY	Proprietary File Format	1
-2	DIRECTORY		1
-3	GB		1
-4	FASTA		1
-5	XDNA		1
-6	AB1		1
-7	FA		1
-\.
-
-
---
--- Data for Name: filters; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY filters (id, dbin_id, name, description, registration_timestamp, pers_id_registerer, modification_timestamp, expression, is_public, grid_id) FROM stdin;
-\.
-
-
---
--- Data for Name: grid_custom_columns; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY grid_custom_columns (id, dbin_id, code, label, description, registration_timestamp, pers_id_registerer, modification_timestamp, expression, is_public, grid_id) FROM stdin;
-\.
-
-
---
--- Data for Name: groups; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY groups (id, code, dbin_id, description, registration_timestamp, pers_id_registerer) FROM stdin;
-\.
-
-
---
--- Data for Name: invalidations; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY invalidations (id, pers_id_registerer, registration_timestamp, reason) FROM stdin;
-\.
-
-
---
--- Data for Name: locator_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY locator_types (id, code, description) FROM stdin;
-1	RELATIVE_LOCATION	Relative Location
-\.
-
-
---
--- Data for Name: material_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY material_properties (id, mate_id, mtpt_id, value, registration_timestamp, modification_timestamp, pers_id_registerer, cvte_id, mate_prop_id) FROM stdin;
-\.
-
-
---
--- Data for Name: material_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY material_type_property_types (id, maty_id, prty_id, is_mandatory, is_managed_internally, registration_timestamp, pers_id_registerer, ordinal, section) FROM stdin;
-\.
-
-
---
--- Data for Name: material_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY material_types (id, code, description, dbin_id, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: materials; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY materials (id, code, maty_id, pers_id_registerer, registration_timestamp, modification_timestamp, dbin_id) FROM stdin;
-\.
-
-
---
--- Data for Name: persons; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY persons (id, first_name, last_name, user_id, email, dbin_id, grou_id, registration_timestamp, pers_id_registerer, display_settings) FROM stdin;
-1		System User	system		1	\N	2010-05-26 13:38:36.62686+02	\N	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\012t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\252t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\357q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\000\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\236sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\251sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\257sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\261sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\034w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\213xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\001\\002\\001x
-2		ETL server	etlserver	piotr.buczek@bsse.ethz.ch	1	\N	2010-06-01 13:59:41.111995+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\012t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\252t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\357q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\000\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\236sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\251sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\257sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\261sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\034w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\213xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\001\\002\\001x
-3	Izabela Maria	Adamczyk	izabelaa	izabela.adamczyk@bsse.ethz.ch	1	\N	2010-06-01 09:53:00.914766+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\012t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\252t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\357q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\000\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\236sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\251sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\257sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\261sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\034w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\213xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\001\\002\\001x
-4	Piotr	Buczek	buczekp	piotr.buczek@bsse.ethz.ch	1	\N	2010-05-27 15:54:23.647329+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\007t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\000\\300\\001x
-5	Franz-Josef	Elmer	felmer	franz-josef.elmer@bsse.ethz.ch	1	\N	2010-06-01 10:00:46.008847+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\012t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\252t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\357q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\000\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\236sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\251sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\257sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\261sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\034w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\213xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\001\\002\\001x
-6	Tomasz Ryszard	Pylak	tpylak	tomasz.pylak@bsse.ethz.ch	1	\N	2010-05-28 14:15:04.232136+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\007t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\357q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\000\\300\\001x
-7	Chandrasekhar	Ramakrishnan	cramakri	cramakri@inf.ethz.ch	1	\N	2010-06-01 10:00:46.008847+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\012t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\252t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\357q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\000\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\236sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\251sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\257sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\261sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\034w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\213xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\001\\002\\001x
-8	Bernd	Rinn	brinn	bernd.rinn@bsse.ethz.ch	1	\N	2010-06-01 09:59:37.172417+02	1	\\254\\355\\000\\005sr\\000Ach.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\005Z\\000)displayCustomColumnDebuggingErrorMessagesZ\\000\\025useWildcardSearchModeL\\000\\016columnSettingst\\000\\017Ljava/util/Map;L\\000\\035realNumberFormatingParameterst\\000QLch/systemsx/cisd/openbis/generic/shared/basic/dto/RealNumberFormatingParameters;L\\000\\017sectionSettingsq\\000~\\000\\001xp\\000\\000sr\\000\\027java.util.LinkedHashMap4\\300N\\\\\\020l\\300\\373\\002\\000\\001Z\\000\\013accessOrderxr\\000\\021java.util.HashMap\\005\\007\\332\\301\\303\\026`\\321\\003\\000\\002F\\000\\012loadFactorI\\000\\011thresholdxp?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\012t\\000\\027vocabulary-browser-gridsr\\000\\023java.util.ArrayListx\\201\\322\\035\\231\\307a\\235\\003\\000\\001I\\000\\004sizexp\\000\\000\\000\\007w\\004\\000\\000\\000\\012sr\\000?ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\004Z\\000\\011hasFilterZ\\000\\006hiddenI\\000\\005widthL\\000\\010columnIDt\\000\\022Ljava/lang/String;xp\\001\\000\\000\\000\\000\\377t\\000\\004CODEsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\013DESCRIPTIONsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\025IS_MANAGED_INTERNALLYsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013REGISTRATORsq\\000~\\000\\012\\000\\000\\000\\000\\001,t\\000\\021REGISTRATION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\001,t\\000\\014URL_TEMPLATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020SHOW_IN_CHOOSERSxt\\000\\025vocabulary-terms-gridsq\\000~\\000\\010\\000\\000\\000\\014w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\355q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\005LABELsq\\000~\\000\\012\\000\\001\\000\\000\\001,q\\000~\\000\\017sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\007ORDINALsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\003URLsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013TOTAL_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020EXPERIMENT_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\014SAMPLE_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_SET_USAGEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016MATERIAL_USAGExt\\000%property-type-assignment-browser-gridsq\\000~\\000\\010\\000\\000\\000\\011w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\001\\000\\000\\000\\001\\024t\\000\\022PROPERTY_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310t\\000\\020ENTITY_TYPE_CODEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_KINDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014IS_MANDATORYsq\\000~\\000\\012\\000\\000\\000\\000\\001Mt\\000\\011DATA_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000dq\\000~\\000!sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\007SECTIONxt\\000\\032property-type-browser-gridsq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\036sq\\000~\\000\\012\\001\\000\\000\\000\\000\\370q\\000~\\000\\015sq\\000~\\000\\012\\001\\000\\000\\000\\000\\310q\\000~\\000=sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\016DATA_TYPE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012VOCABULARYsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\015MATERIAL_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\017sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\014SAMPLE_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\020EXPERIMENT_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016MATERIAL_TYPESsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\016DATA_SET_TYPESxt\\000 entity-browser-grid-SAMPLE-(all)sq\\000~\\000\\010\\000\\000\\000\\035w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021DATABASE_INSTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\005GROUPsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007SUBCODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\252t\\000\\021SAMPLE_IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\013SAMPLE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022IS_INSTANCE_SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\012IS_INVALIDsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\012EXPERIMENTsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\025EXPERIMENT_IDENTIFIERsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\007PROJECTsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\007PERM_IDsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\021SHOW_DETAILS_LINKsq\\000~\\000\\012\\000\\000\\000\\000\\000\\352t\\000\\023property-USER-OWNERsq\\000~\\000\\012\\000\\000\\000\\000\\000}t\\000\\032property-USER-OWNER_NUMBERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\357t\\000\\032property-USER-PLASMID_NAMEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\303t\\000-property-USER-BACTERIAL_ANTIBIOTIC_RESISTANCEsq\\000~\\000\\012\\000\\000\\000\\000\\0011t\\000\\026property-USER-BACKBONEsq\\000~\\000\\012\\000\\000\\000\\000\\000_t\\000\\033property-USER-DERIVATIVE_OFsq\\000~\\000\\012\\000\\000\\000\\000\\000\\177t\\000\\032property-USER-YEAST_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000at\\000\\032property-USER-OTHER_MARKERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\301t\\000*property-USER-FLANKING_RESTRICTION_ENZYMESsq\\000~\\000\\012\\000\\000\\000\\000\\001At\\000\\026property-USER-COMMENTSsq\\000~\\000\\012\\000\\000\\000\\000\\000+t\\000\\021property-USER-ROWsq\\000~\\000\\012\\000\\000\\000\\000\\000(t\\000\\021property-USER-BOXsq\\000~\\000\\012\\000\\000\\000\\000\\000@t\\000\\024property-USER-COLUMNsq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\026property-USER-BOX_SIZExt\\000\\022search-result-gridsq\\000~\\000\\010\\000\\000\\000\\006w\\004\\000\\000\\000\\012sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\0009sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226t\\000\\013ENTITY_TYPEsq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\012IDENTIFIERsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\001\\000\\000\\000\\000\\262t\\000\\016MATCHING_FIELDsq\\000~\\000\\012\\000\\000\\000\\000\\000\\310t\\000\\015MATCHING_TEXTxt\\000$sample-details-grid-DATA_SET-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\357q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dt\\000\\006SAMPLEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xt\\000\\017EXPERIMENT_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\001\\013q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013SOURCE_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\013IS_COMPLETEsq\\000~\\000\\012\\000\\000\\000\\000\\002\\032t\\000\\010LOCATIONsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\006STATUSsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\020FILE_FORMAT_TYPEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\015DATA_SET_TYPEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310t\\000\\017PRODUCTION_DATEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226t\\000\\022DATA_PRODUCER_CODEsq\\000~\\000\\012\\000\\000\\000\\000\\000\\226t\\000\\017DATA_STORE_CODEsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$entity-browser-grid-EXPERIMENT-(all)sq\\000~\\000\\010\\000\\000\\000\\013w\\004\\000\\000\\000\\020sq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\321q\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000$data-set-search-result-grid-DATA_SETsq\\000~\\000\\010\\000\\000\\000\\025w\\004\\000\\000\\000\\031sq\\000~\\000\\012\\001\\000\\000\\000\\000\\331q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000\\236sq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000_sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000dq\\000~\\000isq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\244sq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\310q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\251sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\253sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\255sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\257sq\\000~\\000\\012\\001\\001\\000\\000\\000\\226q\\000~\\000\\261sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\263sq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000\\265sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\267sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000\\271sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qxt\\000"entity-browser-grid-SAMPLE-PLASMIDsq\\000~\\000\\010\\000\\000\\000\\034w\\004\\000\\000\\000&sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Xsq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000Zsq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000\\015sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000]sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000_sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000asq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000csq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000esq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000gsq\\000~\\000\\012\\000\\001\\000\\000\\000\\310q\\000~\\000isq\\000~\\000\\012\\001\\000\\000\\000\\000\\226q\\000~\\000ksq\\000~\\000\\012\\000\\000\\000\\000\\000\\226q\\000~\\000\\023sq\\000~\\000\\012\\000\\000\\000\\000\\001,q\\000~\\000\\025sq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000osq\\000~\\000\\012\\000\\001\\000\\000\\000\\226q\\000~\\000qsq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ssq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000usq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000wsq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000{sq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000}sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000ysq\\000~\\000\\012\\001\\001\\000\\000\\000xq\\000~\\000\\177sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\201sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\203sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\205sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\211sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\207sq\\000~\\000\\012\\000\\001\\000\\000\\000xq\\000~\\000\\213xx\\000sr\\000Och.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters\\000\\000\\000\\000\\000\\000\\000\\001\\002\\000\\003Z\\000\\020formatingEnabledI\\000\\011precisionZ\\000\\012scientificxp\\001\\000\\000\\000\\004\\000sq\\000~\\000\\005?@\\000\\000\\000\\000\\000\\014w\\010\\000\\000\\000\\020\\000\\000\\000\\002t\\000+sample-sectiongeneric-sample-viewer-PLASMIDsr\\000\\021java.lang.Boolean\\315 r\\200\\325\\234\\372\\356\\002\\000\\001Z\\000\\005valuexp\\000t\\000/attachment-sectiongeneric-sample-viewer-PLASMIDsq\\000~\\001\\002\\001x
-\.
-
-
---
--- Data for Name: projects; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY projects (id, code, grou_id, pers_id_leader, description, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY property_types (id, code, description, label, daty_id, registration_timestamp, pers_id_registerer, covo_id, is_managed_internally, is_internal_namespace, dbin_id, maty_prop_id) FROM stdin;
-2	OWNER	Owner	Owner	7	2010-05-26 17:43:09.455462+02	1	2	f	f	1	\N
-3	OWNER_NUMBER	Owner Number	Owner Number	1	2010-05-26 17:44:12.71825+02	1	\N	f	f	1	\N
-4	PLASMID_NAME	Plasmid Name	Plasmid Name	1	2010-05-26 17:44:49.704455+02	1	\N	f	f	1	\N
-5	BACKBONE	Backbone	Backbone	7	2010-05-26 17:45:12.139095+02	1	3	f	f	1	\N
-6	BACTERIAL_ANTIBIOTIC_RESISTANCE	Bacterial Antibiotic Resistance	Bacterial Antibiotic Resistance	7	2010-05-26 17:46:13.565449+02	1	5	f	f	1	\N
-7	YEAST_MARKER	(Yeast) Marker	(Yeast) Marker	7	2010-05-26 17:46:45.413022+02	1	4	f	f	1	\N
-8	OTHER_MARKER	Other Marker	Other Marker	1	2010-05-26 17:47:27.064274+02	1	\N	f	f	1	\N
-9	FLANKING_RESTRICTION_ENZYMES	Flanking Restriction Enzymes	Flanking Restriction Enzymes	1	2010-05-26 17:47:52.936812+02	1	\N	f	f	1	\N
-10	COMMENTS	Comments	Comments	2	2010-05-26 17:48:11.007632+02	1	\N	f	f	1	\N
-15	BOX_SIZE	Box Size	Box Size	7	2010-05-26 21:54:56.547721+02	1	6	f	f	1	\N
-13	COLUMN	Column number in the Box	Column	3	2010-05-26 18:38:35.546129+02	1	\N	f	f	1	\N
-16	ROW	Row letter in the Box	Row	7	2010-05-27 17:58:56.942478+02	1	7	f	f	1	\N
-14	DERIVATIVE_OF	Codes (separated by commas) of those Plasmids that the current Plasmid is a combination of. One of the Plasmid is the Parent.	Derivative Of	1	2010-05-26 21:45:36.120436+02	1	\N	f	f	1	\N
-17	FILE_NAME	Name of the original file stored in DSS	Original File Name	1	2010-05-30 12:55:28.819182+02	1	\N	f	f	1	\N
-\.
-
-
---
--- Data for Name: queries; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY queries (id, dbin_id, name, description, registration_timestamp, pers_id_registerer, modification_timestamp, expression, is_public, query_type, db_key) FROM stdin;
-\.
-
-
---
--- Data for Name: role_assignments; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY role_assignments (id, role_code, grou_id, dbin_id, pers_id_grantee, ag_id_grantee, pers_id_registerer, registration_timestamp) FROM stdin;
-1	ADMIN	\N	1	1	\N	1	2010-05-26 13:39:42.830149+02
-2	ETL_SERVER	\N	1	2	\N	4	2010-06-01 14:00:28.560623+02
-4	ADMIN	\N	1	\N	1	1	2010-05-31 21:14:11.261376+02
-\.
-
-
---
--- Data for Name: sample_properties; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY sample_properties (id, samp_id, stpt_id, value, cvte_id, mate_prop_id, pers_id_registerer, registration_timestamp, modification_timestamp) FROM stdin;
-\.
-
-
---
--- Data for Name: sample_type_property_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY sample_type_property_types (id, saty_id, prty_id, is_mandatory, is_managed_internally, pers_id_registerer, registration_timestamp, is_displayed, ordinal, section) FROM stdin;
-1	1	16	t	f	1	2010-05-27 17:59:42.28433+02	t	1	Storage Information
-2	1	13	t	f	1	2010-05-26 19:08:07.246686+02	t	2	Storage Information
-3	1	2	t	f	1	2010-05-26 19:13:10.256579+02	t	3	Plasmid Data
-4	1	3	f	f	1	2010-05-26 19:11:49.533054+02	t	4	Plasmid Data
-5	1	4	t	f	1	2010-05-26 19:14:56.30574+02	t	5	Plasmid Data
-6	1	5	t	f	1	2010-05-26 18:39:38.450567+02	t	6	Plasmid Data
-7	1	14	f	f	1	2010-05-26 21:46:21.937645+02	t	7	Plasmid Data
-8	1	6	t	f	1	2010-05-26 19:06:55.50256+02	t	8	Plasmid Data
-9	1	7	f	f	1	2010-05-26 19:15:29.812545+02	t	9	Plasmid Data
-10	1	8	f	f	1	2010-05-26 19:10:09.014083+02	t	10	Plasmid Data
-11	1	9	f	f	1	2010-05-26 19:10:01.329441+02	t	11	Plasmid Data
-12	1	10	f	f	1	2010-05-26 19:09:07.086779+02	t	12	Plasmid Data
-20	2	15	t	f	1	2010-05-26 21:55:14.652494+02	t	1	\N
-\.
-
-
---
--- Data for Name: sample_types; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY sample_types (id, code, description, dbin_id, is_listable, generated_from_depth, part_of_depth, modification_timestamp, is_auto_generated_code, generated_code_prefix) FROM stdin;
-2	PLASMID_BOX	\N	1	t	0	0	2010-05-26 21:51:13.659151+02	f	BOX_
-1	PLASMID	\N	1	t	1	1	2010-05-26 13:43:50.663104+02	f	FRP_
-\.
-
-
---
--- Data for Name: samples; Type: TABLE DATA; Schema: public; Owner: -
---
-
-COPY samples (id, perm_id, code, expe_id, samp_id_top, samp_id_generated_from, saty_id, registration_timestamp, modification_timestamp, pers_id_registerer, inva_id, samp_id_control_layout, dbin_id, grou_id, samp_id_part_of) FROM stdin;
-\.
-
-
---
--- Name: ag_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: ag_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_pk PRIMARY KEY (id);
-
-
---
--- Name: agp_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY authorization_group_persons
-    ADD CONSTRAINT agp_pk PRIMARY KEY (pers_id, ag_id);
-
-
---
--- Name: atta_expe_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_expe_bk_uk UNIQUE (expe_id, file_name, version);
-
-
---
--- Name: atta_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_pk PRIMARY KEY (id);
-
-
---
--- Name: atta_proj_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_proj_bk_uk UNIQUE (proj_id, file_name, version);
-
-
---
--- Name: atta_samp_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_samp_bk_uk UNIQUE (samp_id, file_name, version);
-
-
---
--- Name: covo_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_bk_uk UNIQUE (code, is_internal_namespace, dbin_id);
-
-
---
--- Name: covo_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_pk PRIMARY KEY (id);
-
-
---
--- Name: cvte_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_bk_uk UNIQUE (code, covo_id);
-
-
---
--- Name: cvte_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_pk PRIMARY KEY (id);
-
-
---
--- Name: dast_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_stores
-    ADD CONSTRAINT dast_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: dast_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_stores
-    ADD CONSTRAINT dast_pk PRIMARY KEY (id);
-
-
---
--- Name: data_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_bk_uk UNIQUE (code);
-
-
---
--- Name: data_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_pk PRIMARY KEY (id);
-
-
---
--- Name: daty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_types
-    ADD CONSTRAINT daty_bk_uk UNIQUE (code);
-
-
---
--- Name: daty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_types
-    ADD CONSTRAINT daty_pk PRIMARY KEY (id);
-
-
---
--- Name: dbin_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY database_instances
-    ADD CONSTRAINT dbin_bk_uk UNIQUE (code);
-
-
---
--- Name: dbin_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY database_instances
-    ADD CONSTRAINT dbin_pk PRIMARY KEY (id);
-
-
---
--- Name: dbin_uuid_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY database_instances
-    ADD CONSTRAINT dbin_uuid_uk UNIQUE (uuid);
-
-
---
--- Name: dspr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_bk_uk UNIQUE (ds_id, dstpt_id);
-
-
---
--- Name: dspr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_pk PRIMARY KEY (id);
-
-
---
--- Name: dsre_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_relationships
-    ADD CONSTRAINT dsre_bk_uk UNIQUE (data_id_child, data_id_parent);
-
-
---
--- Name: dssdst_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_store_service_data_set_types
-    ADD CONSTRAINT dssdst_bk_uk UNIQUE (data_store_service_id, data_set_type_id);
-
-
---
--- Name: dsse_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_store_services
-    ADD CONSTRAINT dsse_bk_uk UNIQUE (key, data_store_id);
-
-
---
--- Name: dsse_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_store_services
-    ADD CONSTRAINT dsse_pk PRIMARY KEY (id);
-
-
---
--- Name: dstpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_bk_uk UNIQUE (dsty_id, prty_id);
-
-
---
--- Name: dstpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_pk PRIMARY KEY (id);
-
-
---
--- Name: dsty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_types
-    ADD CONSTRAINT dsty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: dsty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY data_set_types
-    ADD CONSTRAINT dsty_pk PRIMARY KEY (id);
-
-
---
--- Name: etpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_bk_uk UNIQUE (exty_id, prty_id);
-
-
---
--- Name: etpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_pk PRIMARY KEY (id);
-
-
---
--- Name: evnt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY events
-    ADD CONSTRAINT evnt_pk PRIMARY KEY (id);
-
-
---
--- Name: exac_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY attachment_contents
-    ADD CONSTRAINT exac_pk PRIMARY KEY (id);
-
-
---
--- Name: exda_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_bk_uk UNIQUE (location, loty_id);
-
-
---
--- Name: exda_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_pk PRIMARY KEY (data_id);
-
-
---
--- Name: expe_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_bk_uk UNIQUE (code, proj_id);
-
-
---
--- Name: expe_pi_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_pi_uk UNIQUE (perm_id);
-
-
---
--- Name: expe_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_pk PRIMARY KEY (id);
-
-
---
--- Name: expr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_bk_uk UNIQUE (expe_id, etpt_id);
-
-
---
--- Name: expr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_pk PRIMARY KEY (id);
-
-
---
--- Name: exty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_types
-    ADD CONSTRAINT exty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: exty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY experiment_types
-    ADD CONSTRAINT exty_pk PRIMARY KEY (id);
-
-
---
--- Name: ffty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY file_format_types
-    ADD CONSTRAINT ffty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: ffty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY file_format_types
-    ADD CONSTRAINT ffty_pk PRIMARY KEY (id);
-
-
---
--- Name: filt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_bk_uk UNIQUE (name, dbin_id, grid_id);
-
-
---
--- Name: filt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_pk PRIMARY KEY (id);
-
-
---
--- Name: grid_custom_columns_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_bk_uk UNIQUE (code, dbin_id, grid_id);
-
-
---
--- Name: grid_custom_columns_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_pk PRIMARY KEY (id);
-
-
---
--- Name: grou_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: grou_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_pk PRIMARY KEY (id);
-
-
---
--- Name: inva_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY invalidations
-    ADD CONSTRAINT inva_pk PRIMARY KEY (id);
-
-
---
--- Name: loty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY locator_types
-    ADD CONSTRAINT loty_bk_uk UNIQUE (code);
-
-
---
--- Name: loty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY locator_types
-    ADD CONSTRAINT loty_pk PRIMARY KEY (id);
-
-
---
--- Name: mapr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_bk_uk UNIQUE (mate_id, mtpt_id);
-
-
---
--- Name: mapr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_pk PRIMARY KEY (id);
-
-
---
--- Name: mate_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_bk_uk UNIQUE (code, maty_id, dbin_id);
-
-
---
--- Name: mate_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_pk PRIMARY KEY (id);
-
-
---
--- Name: maty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_types
-    ADD CONSTRAINT maty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: maty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_types
-    ADD CONSTRAINT maty_pk PRIMARY KEY (id);
-
-
---
--- Name: mtpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_bk_uk UNIQUE (maty_id, prty_id);
-
-
---
--- Name: mtpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_pk PRIMARY KEY (id);
-
-
---
--- Name: pers_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_bk_uk UNIQUE (dbin_id, user_id);
-
-
---
--- Name: pers_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_pk PRIMARY KEY (id);
-
-
---
--- Name: proj_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_bk_uk UNIQUE (code, grou_id);
-
-
---
--- Name: proj_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_pk PRIMARY KEY (id);
-
-
---
--- Name: prty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_bk_uk UNIQUE (code, is_internal_namespace, dbin_id);
-
-
---
--- Name: prty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_pk PRIMARY KEY (id);
-
-
---
--- Name: quer_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_bk_uk UNIQUE (name, dbin_id);
-
-
---
--- Name: quer_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_pk PRIMARY KEY (id);
-
-
---
--- Name: roas_ag_group_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_ag_group_bk_uk UNIQUE (ag_id_grantee, role_code, grou_id);
-
-
---
--- Name: roas_ag_instance_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_ag_instance_bk_uk UNIQUE (ag_id_grantee, role_code, dbin_id);
-
-
---
--- Name: roas_pe_group_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pe_group_bk_uk UNIQUE (pers_id_grantee, role_code, grou_id);
-
-
---
--- Name: roas_pe_instance_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pe_instance_bk_uk UNIQUE (pers_id_grantee, role_code, dbin_id);
-
-
---
--- Name: roas_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pk PRIMARY KEY (id);
-
-
---
--- Name: samp_pi_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_pi_uk UNIQUE (perm_id);
-
-
---
--- Name: samp_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_pk PRIMARY KEY (id);
-
-
---
--- Name: sapr_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_bk_uk UNIQUE (samp_id, stpt_id);
-
-
---
--- Name: sapr_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_pk PRIMARY KEY (id);
-
-
---
--- Name: saty_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_types
-    ADD CONSTRAINT saty_bk_uk UNIQUE (code, dbin_id);
-
-
---
--- Name: saty_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_types
-    ADD CONSTRAINT saty_pk PRIMARY KEY (id);
-
-
---
--- Name: stpt_bk_uk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_bk_uk UNIQUE (saty_id, prty_id);
-
-
---
--- Name: stpt_pk; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: 
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_pk PRIMARY KEY (id);
-
-
---
--- Name: atta_exac_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_exac_fk_i ON attachments USING btree (exac_id);
-
-
---
--- Name: atta_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_expe_fk_i ON attachments USING btree (expe_id);
-
-
---
--- Name: atta_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_pers_fk_i ON attachments USING btree (pers_id_registerer);
-
-
---
--- Name: atta_proj_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_proj_fk_i ON attachments USING btree (proj_id);
-
-
---
--- Name: atta_samp_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX atta_samp_fk_i ON attachments USING btree (samp_id);
-
-
---
--- Name: covo_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX covo_pers_fk_i ON controlled_vocabularies USING btree (pers_id_registerer);
-
-
---
--- Name: cvte_covo_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX cvte_covo_fk_i ON controlled_vocabulary_terms USING btree (covo_id);
-
-
---
--- Name: cvte_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX cvte_pers_fk_i ON controlled_vocabulary_terms USING btree (pers_id_registerer);
-
-
---
--- Name: dast_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dast_dbin_fk_i ON data_stores USING btree (dbin_id);
-
-
---
--- Name: data_dsty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX data_dsty_fk_i ON data USING btree (dsty_id);
-
-
---
--- Name: data_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX data_expe_fk_i ON data USING btree (expe_id);
-
-
---
--- Name: data_samp_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX data_samp_fk_i ON data USING btree (samp_id);
-
-
---
--- Name: dspr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_cvte_fk_i ON data_set_properties USING btree (cvte_id);
-
-
---
--- Name: dspr_ds_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_ds_fk_i ON data_set_properties USING btree (ds_id);
-
-
---
--- Name: dspr_dstpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_dstpt_fk_i ON data_set_properties USING btree (dstpt_id);
-
-
---
--- Name: dspr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dspr_pers_fk_i ON data_set_properties USING btree (pers_id_registerer);
-
-
---
--- Name: dsre_data_fk_i_child; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dsre_data_fk_i_child ON data_set_relationships USING btree (data_id_child);
-
-
---
--- Name: dsre_data_fk_i_parent; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dsre_data_fk_i_parent ON data_set_relationships USING btree (data_id_parent);
-
-
---
--- Name: dssdst_ds_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dssdst_ds_fk_i ON data_store_service_data_set_types USING btree (data_store_service_id);
-
-
---
--- Name: dssdst_dst_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dssdst_dst_fk_i ON data_store_service_data_set_types USING btree (data_set_type_id);
-
-
---
--- Name: dsse_ds_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dsse_ds_fk_i ON data_store_services USING btree (data_store_id);
-
-
---
--- Name: dstpt_dsty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dstpt_dsty_fk_i ON data_set_type_property_types USING btree (dsty_id);
-
-
---
--- Name: dstpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dstpt_pers_fk_i ON data_set_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: dstpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX dstpt_prty_fk_i ON data_set_type_property_types USING btree (prty_id);
-
-
---
--- Name: etpt_exty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX etpt_exty_fk_i ON experiment_type_property_types USING btree (exty_id);
-
-
---
--- Name: etpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX etpt_pers_fk_i ON experiment_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: etpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX etpt_prty_fk_i ON experiment_type_property_types USING btree (prty_id);
-
-
---
--- Name: evnt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX evnt_pers_fk_i ON events USING btree (pers_id_registerer);
-
-
---
--- Name: exda_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_cvte_fk_i ON external_data USING btree (cvte_id_stor_fmt);
-
-
---
--- Name: exda_cvte_stored_on_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_cvte_stored_on_fk_i ON external_data USING btree (cvte_id_store);
-
-
---
--- Name: exda_ffty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_ffty_fk_i ON external_data USING btree (ffty_id);
-
-
---
--- Name: exda_loty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX exda_loty_fk_i ON external_data USING btree (loty_id);
-
-
---
--- Name: expe_exty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_exty_fk_i ON experiments USING btree (exty_id);
-
-
---
--- Name: expe_inva_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_inva_fk_i ON experiments USING btree (inva_id);
-
-
---
--- Name: expe_mate_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_mate_fk_i ON experiments USING btree (mate_id_study_object);
-
-
---
--- Name: expe_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_pers_fk_i ON experiments USING btree (pers_id_registerer);
-
-
---
--- Name: expe_proj_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expe_proj_fk_i ON experiments USING btree (proj_id);
-
-
---
--- Name: expr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_cvte_fk_i ON experiment_properties USING btree (cvte_id);
-
-
---
--- Name: expr_etpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_etpt_fk_i ON experiment_properties USING btree (etpt_id);
-
-
---
--- Name: expr_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_expe_fk_i ON experiment_properties USING btree (expe_id);
-
-
---
--- Name: expr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX expr_pers_fk_i ON experiment_properties USING btree (pers_id_registerer);
-
-
---
--- Name: filt_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX filt_dbin_fk_i ON filters USING btree (dbin_id);
-
-
---
--- Name: filt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX filt_pers_fk_i ON filters USING btree (pers_id_registerer);
-
-
---
--- Name: grid_custom_columns_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grid_custom_columns_dbin_fk_i ON grid_custom_columns USING btree (dbin_id);
-
-
---
--- Name: grid_custom_columns_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grid_custom_columns_pers_fk_i ON grid_custom_columns USING btree (pers_id_registerer);
-
-
---
--- Name: grou_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grou_dbin_fk_i ON groups USING btree (dbin_id);
-
-
---
--- Name: grou_pers_registered_by_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX grou_pers_registered_by_fk_i ON groups USING btree (pers_id_registerer);
-
-
---
--- Name: inva_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX inva_pers_fk_i ON invalidations USING btree (pers_id_registerer);
-
-
---
--- Name: mapr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_cvte_fk_i ON material_properties USING btree (cvte_id);
-
-
---
--- Name: mapr_mate_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_mate_fk_i ON material_properties USING btree (mate_id);
-
-
---
--- Name: mapr_mtpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_mtpt_fk_i ON material_properties USING btree (mtpt_id);
-
-
---
--- Name: mapr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mapr_pers_fk_i ON material_properties USING btree (pers_id_registerer);
-
-
---
--- Name: mate_maty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mate_maty_fk_i ON materials USING btree (maty_id);
-
-
---
--- Name: mate_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mate_pers_fk_i ON materials USING btree (pers_id_registerer);
-
-
---
--- Name: mtpt_maty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mtpt_maty_fk_i ON material_type_property_types USING btree (maty_id);
-
-
---
--- Name: mtpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mtpt_pers_fk_i ON material_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: mtpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX mtpt_prty_fk_i ON material_type_property_types USING btree (prty_id);
-
-
---
--- Name: pers_grou_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX pers_grou_fk_i ON persons USING btree (grou_id);
-
-
---
--- Name: proj_grou_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX proj_grou_fk_i ON projects USING btree (grou_id);
-
-
---
--- Name: proj_pers_fk_i_leader; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX proj_pers_fk_i_leader ON projects USING btree (pers_id_leader);
-
-
---
--- Name: proj_pers_fk_i_registerer; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX proj_pers_fk_i_registerer ON projects USING btree (pers_id_registerer);
-
-
---
--- Name: prty_covo_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX prty_covo_fk_i ON property_types USING btree (covo_id);
-
-
---
--- Name: prty_daty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX prty_daty_fk_i ON property_types USING btree (daty_id);
-
-
---
--- Name: prty_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX prty_pers_fk_i ON property_types USING btree (pers_id_registerer);
-
-
---
--- Name: roas_ag_fk_i_grantee; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_ag_fk_i_grantee ON role_assignments USING btree (ag_id_grantee);
-
-
---
--- Name: roas_dbin_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_dbin_fk_i ON role_assignments USING btree (dbin_id);
-
-
---
--- Name: roas_grou_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_grou_fk_i ON role_assignments USING btree (grou_id);
-
-
---
--- Name: roas_pers_fk_i_grantee; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_pers_fk_i_grantee ON role_assignments USING btree (pers_id_grantee);
-
-
---
--- Name: roas_pers_fk_i_registerer; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX roas_pers_fk_i_registerer ON role_assignments USING btree (pers_id_registerer);
-
-
---
--- Name: samp_code_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_code_i ON samples USING btree (code);
-
-
---
--- Name: samp_expe_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_expe_fk_i ON samples USING btree (expe_id);
-
-
---
--- Name: samp_inva_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_inva_fk_i ON samples USING btree (inva_id);
-
-
---
--- Name: samp_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_pers_fk_i ON samples USING btree (pers_id_registerer);
-
-
---
--- Name: samp_samp_fk_i_control_layout; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_control_layout ON samples USING btree (samp_id_control_layout);
-
-
---
--- Name: samp_samp_fk_i_generated_from; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_generated_from ON samples USING btree (samp_id_generated_from);
-
-
---
--- Name: samp_samp_fk_i_part_of; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_part_of ON samples USING btree (samp_id_part_of);
-
-
---
--- Name: samp_samp_fk_i_top; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_samp_fk_i_top ON samples USING btree (samp_id_top);
-
-
---
--- Name: samp_saty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX samp_saty_fk_i ON samples USING btree (saty_id);
-
-
---
--- Name: sapr_cvte_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_cvte_fk_i ON sample_properties USING btree (cvte_id);
-
-
---
--- Name: sapr_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_pers_fk_i ON sample_properties USING btree (pers_id_registerer);
-
-
---
--- Name: sapr_samp_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_samp_fk_i ON sample_properties USING btree (samp_id);
-
-
---
--- Name: sapr_stpt_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX sapr_stpt_fk_i ON sample_properties USING btree (stpt_id);
-
-
---
--- Name: stpt_pers_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX stpt_pers_fk_i ON sample_type_property_types USING btree (pers_id_registerer);
-
-
---
--- Name: stpt_prty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX stpt_prty_fk_i ON sample_type_property_types USING btree (prty_id);
-
-
---
--- Name: stpt_saty_fk_i; Type: INDEX; Schema: public; Owner: -; Tablespace: 
---
-
-CREATE INDEX stpt_saty_fk_i ON sample_type_property_types USING btree (saty_id);
-
-
---
--- Name: check_dataset_relationships_on_data_table_modification; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE CONSTRAINT TRIGGER check_dataset_relationships_on_data_table_modification
-    AFTER INSERT OR UPDATE ON data
-DEFERRABLE INITIALLY DEFERRED
-    FOR EACH ROW
-    EXECUTE PROCEDURE check_dataset_relationships_on_data_table_modification();
-
-
---
--- Name: check_dataset_relationships_on_relationships_table_modification; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE CONSTRAINT TRIGGER check_dataset_relationships_on_relationships_table_modification
-    AFTER INSERT OR UPDATE ON data_set_relationships
-DEFERRABLE INITIALLY DEFERRED
-    FOR EACH ROW
-    EXECUTE PROCEDURE check_dataset_relationships_on_relationships_table_modification();
-
-
---
--- Name: controlled_vocabulary_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER controlled_vocabulary_check
-    BEFORE INSERT OR UPDATE ON property_types
-    FOR EACH ROW
-    EXECUTE PROCEDURE controlled_vocabulary_check();
-
-
---
--- Name: data_set_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER data_set_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON data_set_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE data_set_property_with_material_data_type_check();
-
-
---
--- Name: experiment_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER experiment_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON experiment_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE experiment_property_with_material_data_type_check();
-
-
---
--- Name: external_data_storage_format_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER external_data_storage_format_check
-    BEFORE INSERT OR UPDATE ON external_data
-    FOR EACH ROW
-    EXECUTE PROCEDURE external_data_storage_format_check();
-
-
---
--- Name: material_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER material_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON material_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE material_property_with_material_data_type_check();
-
-
---
--- Name: sample_code_uniqueness_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER sample_code_uniqueness_check
-    BEFORE INSERT OR UPDATE ON samples
-    FOR EACH ROW
-    EXECUTE PROCEDURE sample_code_uniqueness_check();
-
-
---
--- Name: sample_property_with_material_data_type_check; Type: TRIGGER; Schema: public; Owner: -
---
-
-CREATE TRIGGER sample_property_with_material_data_type_check
-    BEFORE INSERT OR UPDATE ON sample_properties
-    FOR EACH ROW
-    EXECUTE PROCEDURE sample_property_with_material_data_type_check();
-
-
---
--- Name: ag_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: ag_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_groups
-    ADD CONSTRAINT ag_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: agp_ag_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_group_persons
-    ADD CONSTRAINT agp_ag_fk FOREIGN KEY (ag_id) REFERENCES authorization_groups(id);
-
-
---
--- Name: agp_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY authorization_group_persons
-    ADD CONSTRAINT agp_pers_fk FOREIGN KEY (pers_id) REFERENCES persons(id);
-
-
---
--- Name: atta_cont_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_cont_fk FOREIGN KEY (exac_id) REFERENCES attachment_contents(id);
-
-
---
--- Name: atta_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: atta_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: atta_proj_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_proj_fk FOREIGN KEY (proj_id) REFERENCES projects(id);
-
-
---
--- Name: atta_samp_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY attachments
-    ADD CONSTRAINT atta_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);
-
-
---
--- Name: covo_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: covo_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabularies
-    ADD CONSTRAINT covo_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: cvte_covo_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_covo_fk FOREIGN KEY (covo_id) REFERENCES controlled_vocabularies(id);
-
-
---
--- Name: cvte_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY controlled_vocabulary_terms
-    ADD CONSTRAINT cvte_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: dast_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_stores
-    ADD CONSTRAINT dast_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: data_dast_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_dast_fk FOREIGN KEY (dast_id) REFERENCES data_stores(id);
-
-
---
--- Name: data_dsty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_dsty_fk FOREIGN KEY (dsty_id) REFERENCES data_set_types(id);
-
-
---
--- Name: data_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: data_samp_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data
-    ADD CONSTRAINT data_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);
-
-
---
--- Name: dspr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: dspr_ds_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_ds_fk FOREIGN KEY (ds_id) REFERENCES data(id);
-
-
---
--- Name: dspr_dstpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_dstpt_fk FOREIGN KEY (dstpt_id) REFERENCES data_set_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dspr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: dspr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_properties
-    ADD CONSTRAINT dspr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: dsre_data_fk_child; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_relationships
-    ADD CONSTRAINT dsre_data_fk_child FOREIGN KEY (data_id_child) REFERENCES data(id);
-
-
---
--- Name: dsre_data_fk_parent; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_relationships
-    ADD CONSTRAINT dsre_data_fk_parent FOREIGN KEY (data_id_parent) REFERENCES data(id);
-
-
---
--- Name: dssdst_ds_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_store_service_data_set_types
-    ADD CONSTRAINT dssdst_ds_fk FOREIGN KEY (data_store_service_id) REFERENCES data_store_services(id) ON DELETE CASCADE;
-
-
---
--- Name: dssdst_dst_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_store_service_data_set_types
-    ADD CONSTRAINT dssdst_dst_fk FOREIGN KEY (data_set_type_id) REFERENCES data_set_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dsse_ds_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_store_services
-    ADD CONSTRAINT dsse_ds_fk FOREIGN KEY (data_store_id) REFERENCES data_stores(id) ON DELETE CASCADE;
-
-
---
--- Name: dstpt_dsty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_dsty_fk FOREIGN KEY (dsty_id) REFERENCES data_set_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dstpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: dstpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_type_property_types
-    ADD CONSTRAINT dstpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: dsty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY data_set_types
-    ADD CONSTRAINT dsty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: etpt_exty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_exty_fk FOREIGN KEY (exty_id) REFERENCES experiment_types(id) ON DELETE CASCADE;
-
-
---
--- Name: etpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: etpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_type_property_types
-    ADD CONSTRAINT etpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: evnt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY events
-    ADD CONSTRAINT evnt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: exda_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_cvte_fk FOREIGN KEY (cvte_id_stor_fmt) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: exda_cvte_stored_on_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_cvte_stored_on_fk FOREIGN KEY (cvte_id_store) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: exda_data_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_data_fk FOREIGN KEY (data_id) REFERENCES data(id);
-
-
---
--- Name: exda_ffty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_ffty_fk FOREIGN KEY (ffty_id) REFERENCES file_format_types(id);
-
-
---
--- Name: exda_loty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY external_data
-    ADD CONSTRAINT exda_loty_fk FOREIGN KEY (loty_id) REFERENCES locator_types(id);
-
-
---
--- Name: expe_exty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_exty_fk FOREIGN KEY (exty_id) REFERENCES experiment_types(id);
-
-
---
--- Name: expe_inva_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_inva_fk FOREIGN KEY (inva_id) REFERENCES invalidations(id);
-
-
---
--- Name: expe_mate_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_mate_fk FOREIGN KEY (mate_id_study_object) REFERENCES materials(id);
-
-
---
--- Name: expe_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: expe_proj_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiments
-    ADD CONSTRAINT expe_proj_fk FOREIGN KEY (proj_id) REFERENCES projects(id);
-
-
---
--- Name: expr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: expr_etpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_etpt_fk FOREIGN KEY (etpt_id) REFERENCES experiment_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: expr_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: expr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: expr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_properties
-    ADD CONSTRAINT expr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: exty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY experiment_types
-    ADD CONSTRAINT exty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: ffty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY file_format_types
-    ADD CONSTRAINT ffty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: filt_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: filt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY filters
-    ADD CONSTRAINT filt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: grid_custom_columns_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: grid_custom_columns_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY grid_custom_columns
-    ADD CONSTRAINT grid_custom_columns_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: grou_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: grou_pers_fk_registerer; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY groups
-    ADD CONSTRAINT grou_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: inva_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY invalidations
-    ADD CONSTRAINT inva_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: mapr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: mapr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: mapr_mate_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_mate_fk FOREIGN KEY (mate_id) REFERENCES materials(id);
-
-
---
--- Name: mapr_mtpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_mtpt_fk FOREIGN KEY (mtpt_id) REFERENCES material_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: mapr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_properties
-    ADD CONSTRAINT mapr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: mate_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: mate_maty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_maty_fk FOREIGN KEY (maty_id) REFERENCES material_types(id);
-
-
---
--- Name: mate_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY materials
-    ADD CONSTRAINT mate_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: maty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_types
-    ADD CONSTRAINT maty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: mtpt_maty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_maty_fk FOREIGN KEY (maty_id) REFERENCES material_types(id) ON DELETE CASCADE;
-
-
---
--- Name: mtpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: mtpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY material_type_property_types
-    ADD CONSTRAINT mtpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: pers_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: pers_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: pers_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY persons
-    ADD CONSTRAINT pers_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: proj_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: proj_pers_fk_leader; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_pers_fk_leader FOREIGN KEY (pers_id_leader) REFERENCES persons(id);
-
-
---
--- Name: proj_pers_fk_registerer; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY projects
-    ADD CONSTRAINT proj_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: prty_covo_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_covo_fk FOREIGN KEY (covo_id) REFERENCES controlled_vocabularies(id);
-
-
---
--- Name: prty_daty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_daty_fk FOREIGN KEY (daty_id) REFERENCES data_types(id);
-
-
---
--- Name: prty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: prty_maty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_maty_fk FOREIGN KEY (maty_prop_id) REFERENCES material_types(id) ON DELETE CASCADE;
-
-
---
--- Name: prty_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY property_types
-    ADD CONSTRAINT prty_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: quer_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: quer_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY queries
-    ADD CONSTRAINT quer_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: roas_ag_fk_grantee; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_ag_fk_grantee FOREIGN KEY (ag_id_grantee) REFERENCES authorization_groups(id);
-
-
---
--- Name: roas_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: roas_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: roas_pers_fk_grantee; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pers_fk_grantee FOREIGN KEY (pers_id_grantee) REFERENCES persons(id);
-
-
---
--- Name: roas_pers_fk_registerer; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY role_assignments
-    ADD CONSTRAINT roas_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: samp_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: samp_expe_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);
-
-
---
--- Name: samp_grou_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_grou_fk FOREIGN KEY (grou_id) REFERENCES groups(id);
-
-
---
--- Name: samp_inva_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_inva_fk FOREIGN KEY (inva_id) REFERENCES invalidations(id);
-
-
---
--- Name: samp_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: samp_samp_fk_control_layout; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_control_layout FOREIGN KEY (samp_id_control_layout) REFERENCES samples(id);
-
-
---
--- Name: samp_samp_fk_generated_from; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_generated_from FOREIGN KEY (samp_id_generated_from) REFERENCES samples(id);
-
-
---
--- Name: samp_samp_fk_part_of; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_part_of FOREIGN KEY (samp_id_part_of) REFERENCES samples(id);
-
-
---
--- Name: samp_samp_fk_top; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_samp_fk_top FOREIGN KEY (samp_id_top) REFERENCES samples(id);
-
-
---
--- Name: samp_saty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY samples
-    ADD CONSTRAINT samp_saty_fk FOREIGN KEY (saty_id) REFERENCES sample_types(id);
-
-
---
--- Name: sapr_cvte_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_cvte_fk FOREIGN KEY (cvte_id) REFERENCES controlled_vocabulary_terms(id);
-
-
---
--- Name: sapr_mapr_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);
-
-
---
--- Name: sapr_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: sapr_samp_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);
-
-
---
--- Name: sapr_stpt_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_properties
-    ADD CONSTRAINT sapr_stpt_fk FOREIGN KEY (stpt_id) REFERENCES sample_type_property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: saty_dbin_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_types
-    ADD CONSTRAINT saty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);
-
-
---
--- Name: stpt_pers_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);
-
-
---
--- Name: stpt_prty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_prty_fk FOREIGN KEY (prty_id) REFERENCES property_types(id) ON DELETE CASCADE;
-
-
---
--- Name: stpt_saty_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY sample_type_property_types
-    ADD CONSTRAINT stpt_saty_fk FOREIGN KEY (saty_id) REFERENCES sample_types(id) ON DELETE CASCADE;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/plasmid/resource/db/recreate_db.sh b/plasmid/resource/db/recreate_db.sh
deleted file mode 100755
index ba2468948f716c25ccffdc640e133b39e12b0c48..0000000000000000000000000000000000000000
--- a/plasmid/resource/db/recreate_db.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-OWNER=buczekp
-psql -U postgres -c "drop database openbis_plasmids;"
-psql -U postgres -c "create database openbis_plasmids with owner $OWNER encoding = 'UNICODE';"
-psql -U $OWNER -d openbis_plasmids -f plasmids-YeastLab.sql 
diff --git a/plasmid/resource/dependency-structure.ddf b/plasmid/resource/dependency-structure.ddf
deleted file mode 100644
index b20e92723a940d8673288145c7f0bb98a2bf5278..0000000000000000000000000000000000000000
--- a/plasmid/resource/dependency-structure.ddf
+++ /dev/null
@@ -1,16 +0,0 @@
-#show allResults
-
-{root} = ch.ethz.bsse.cisd.plasmid
-{dss} = ${root}.dss
-{openbis} = ch.systemsx.cisd.openbis
-
-######################################################################
-# Check dependencies to openbis
-
-[dss] = ${dss}.*
-[private_openbis] = ${openbis}.* excluding [dss] ${openbis}.dss.generic.shared.* ${openbis}.generic.shared.* ${openbis}.dss.generic.server.plugins.* ${openbis}.common.*
-
-check sets [dss]
-
-check [dss] independentOf [private_openbis]
-
diff --git a/plasmid/resource/eclipse/plasmid Data Store Server.launch b/plasmid/resource/eclipse/plasmid Data Store Server.launch
deleted file mode 100644
index d4bfed2f3ac7a6eefdfd59ebfeaa1833afddcaf5..0000000000000000000000000000000000000000
--- a/plasmid/resource/eclipse/plasmid Data Store Server.launch	
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/DataStoreServer.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="ch.systemsx.cisd.openbis.dss.generic.DataStoreServer"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="plasmid"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512M&#13;-ea"/>
-</launchConfiguration>
diff --git a/plasmid/resource/example/FRP_1/PRS316-1.ab1 b/plasmid/resource/example/FRP_1/PRS316-1.ab1
deleted file mode 100644
index e33465983622dfc0c12a4c407740b02c146ecb2b..0000000000000000000000000000000000000000
--- a/plasmid/resource/example/FRP_1/PRS316-1.ab1
+++ /dev/null
@@ -1,229 +0,0 @@
-ID   PRS316     preliminary; circular DNA; SYN; 4887 BP.
-XX
-AC   U03442; ATCC77145;
-XX
-DT   01-JUL-1993 (Rel. 7, Created)
-DT   01-JUL-1995 (Rel. 12, Last updated, Version 1)
-XX
-DE   Saccharomyces/E.coli phagemid vector pRS316 - complete.
-XX
-KW   cloning vector.
-XX
-OS   Cloning vector
-OC   Artificial sequences; Cloning vehicles.
-XX
-RN   [1]
-RP   1-4887
-RC   pRSS56 from pBluescript KS+ &amp; BlueScribe
-RC   pRS303 from pRSS56 &amp; HIS3 gene
-RC   pRS304 from pRSS56 &amp; TRP1 gene
-RC   pRS305 from pRSS56 &amp; LEU2 gene
-RC   pRS306 from pRSS56 &amp; URA3 gene
-RC   pUC19-CEN6:32 from pUC19 &amp; CEN6
-RC   pRSS83 from pUC19-CEN6:32 &amp; pAB9, ARS
-RC   pRSS84 from pRSS83
-RC   pRS313 from pRS303 &amp; pRSS84
-RC   pRS314 from pRS304 &amp; pRSS84
-RC   pRS315 from pRS305 &amp; pRSS84
-RC   pRS316 from pRS306 &amp; pRSS84
-RC   pRSS93 from pRSS84 &amp; pYCF5
-RA   Sikorski R.S., Hieter P.;
-RT   "A system of shuttle vectors and yeast host strains designed for
-RT   efficient manipulation of DNA in Saccharomyces cerevisiae";
-RL   Genetics 122:19-27(1989).
-XX
-RN   [2]
-RC   from YEp24
-RC   from YCp50
-RC   from YIp5
-RA   Strathern J.N., Higgins D.R.;
-RT   "Recovery of plasmids from yeast into Escherichia coli: shuttle
-RT   vectors";
-RL   Meth. Enzymol. 194:319-329(1991).
-XX
-RN   [3]
-RC   pRS316
-RA   Stillman D.J.;
-RT   ;
-RL   Submitted (10-NOV-1993) by:
-RL   Stillman D.J., Dept. of Cellular, Viral and Molecular Biology,
-RL   University of Utah Medical Center, Salt Lake City, UT 84132 USA.
-XX
-CC   One of a series of pBluescript-based centromere vectors (ATCC 77142
-CC   ATCC 77145, ATCC 77157 to ATCC 77158) differing in the yeast
-CC   selectable marker gene. [1]
-CC   The order of the major features in this plasmid is: URA3 - f1 ori
-CC   (NaeI) - T7 promoter - lacZ'/MCS - T3 promoter - pMB1 ori - bla -
-CC   CEN6 - ARSH4.
-CC   A fragment (1.112 kb) containing the URA3 gene was inserted into the
-CC   NdeI site and a cassette containing CEN6 and the ARS associated with
-CC   histone 4 (ARSH4) was inserted into the AatII site of pRSS56. All ends
-CC   were blunted.
-CC   pRSS56, constructed by ligating a PvuI fragment (bp 498-2412) of
-CC   pBluescript KS+ to a PvuI fragment (bp 2850-730) of pBS(+), contains
-CC   the KS MCS from pBluescript KS+ and the unique NdeI and AatII sites
-CC   between bla and f1 origin of pBS(+). [1]
-CC   YC-type centromere vector permitting visual detection of recombinants
-CC   and production of ssDNA in E.coli.  Contains promoters for in vitro
-CC   RNA synthesis, priming sites useful for sequencing, and encodes the
-CC   lacZ alpha (lacZ') peptide. [1]
-CC   Useful in plasmid shuffle experiments.
-CC   Restriction digests of the clone give the following sizes (kb):
-CC   EcoRI--5.0; BamHI--5.0, PvuII--4.4, 0.5. (ATCC staff)
-CC   Medium is 1227 LB plus ampicillin.
-CC   NCBI gi: 417973
-CC   NM (pRS316)
-CC   CM (yes)
-CC   NA (ds-DNA)
-CC   TP (circular)
-CC   ST ()
-CC   TY (phagemid)
-CC   SP (ATCC)
-CC   HO (E.coli HB101)(Saccharomyces cerevisiae)(E.coli)
-CC   HO (Saccharomyces cerevisiae YPH499)(Saccharomyces cerevisiae YPH500)
-CC   HO (Saccharomyces cerevisiae YPH501)
-CC   CP ()
-CC   FN (cloning)
-CC   SE ()
-CC   PA ()
-CC   BR (pRS314)(pRS315)(pRS313)
-CC   OF ()
-CC   OR ()
-XX
-FH   Key             Location/Qualifiers
-FH
-FT   misc_feature    0..0
-FT                   /note="1. pUC19 HincII 2686bp 432..432
-FT                   2. yeast MboII-MboII 125bp, CEN6
-FT                   -&gt; pUC19-CEN6:32 2811bp
-FT                   1. pUC8 BamHI 2665bp 241..241
-FT                   2. yeast Sau3AI-Sau3AI 374bp, histone H4 ARS/ARSH4
-FT                   -&gt; pAB9 3039bp
-FT                   1. pUC19-CEN6:32 EcoRI-ScaI 1908bp 397..-..2180, CEN6
-FT                   2. pAB9 ScaI-EcoRI 1314bp 231..-..1171,
-FT                   \ histone H4 ARS/ARSH4
-FT                   -&gt; pRSS83 3222bp [in MCS]
-FT                   1. pRSS83 remove SmaI-XbaI 9bp, MCS/pUC19 415..424
-FT                   \ 3213bp
-FT                   Klenow:Klenow
-FT                   -&gt; pRSS84 3213bp
-FT                   1. pRSS84 HincII-PstI, CEN6/ARSH4
-FT                   \ pUC19 440..2686..432
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   2. pRS306 AatII 4373bp 848..848
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   -&gt; pRS316 4887bp"
-FT   misc_binding    0..0
-FT                   /note="MCS KpnI-ApaI-XhoI-SalI-ClaI-HindIII-EcoRV-
-FT                   EcoRI-PstI-SmaI-
-FT                   BamHI-SpeI-XbaI-EagI-NotI-BstXI-SacII-SacI"
-FT   misc_binding    0..0
-FT                   /note="SIT unique KpnI-ApaI-XhoI-SalI-ClaI-EcoRI-
-FT                   PstI-SmaI-BamHI-SpeI-EagI-NotI-SacII-SacI-NaeI"
-FT   rep_origin      0..0
-FT                   /note="ORI E. coli pMB1 (ColE1 and pBR322)"
-FT   rep_origin      0..0
-FT                   /note="ORI bacteriophage f1"
-FT   promoter        0..0
-FT                   /note="PRO E. coli lac gene"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T3"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T7"
-FT   CDS             0..0
-FT                   /note="GEN E. coli beta-galactosidase gene (lacZ');
-FT                   reporter gene"
-FT   CDS             0..0
-FT                   /note="ANT E. coli beta-lactamase gene (bla)
-FT                   ampicillin resistance gene (apr/amp)"
-FT   CDS             0..0
-FT                   /note="ANT yeast URA3 gene"
-FT   rep_origin      0..0
-FT                   /note="ORI yeast ARSH4"
-FT   misc_feature    0..0
-FT                   /note="yeast centromere CEN6"
-XX
-SQ   Sequence 4887 BP; 1361 A; 1069 C; 1167 G; 1290 T; 0 other;
-     tcgcgcgttt cggtgatgac ggtgaaaacc tctgacacat gcagctcccg gagacggtca
-     cagcttgtct gtaagcggat gccgggagca gacaagcccg tcagggcgcg tcagcgggtg
-     ttggcgggtg tcggggctgg cttaactatg cggcatcaga gcagattgta ctgagagtgc
-     accacgcttt tcaattcaat tcatcatttt ttttttattc ttttttttga tttcggtttc
-     tttgaaattt ttttgattcg gtaatctccg aacagaagga agaacgaagg aaggagcaca
-     gacttagatt ggtatatata cgcatatgta gtgttgaaga aacatgaaat tgcccagtat
-     tcttaaccca actgcacaga acaaaaacct gcaggaaacg aagataaatc atgtcgaaag
-     ctacatataa ggaacgtgct gctactcatc ctagtcctgt tgctgccaag ctatttaata
-     tcatgcacga aaagcaaaca aacttgtgtg cttcattgga tgttcgtacc accaaggaat
-     tactggagtt agttgaagca ttaggtccca aaatttgttt actaaaaaca catgtggata
-     tcttgactga tttttccatg gagggcacag ttaagccgct aaaggcatta tccgccaagt
-     acaatttttt actcttcgaa gacagaaaat ttgctgacat tggtaataca gtcaaattgc
-     agtactctgc gggtgtatac agaatagcag aatgggcaga cattacgaat gcacacggtg
-     tggtgggccc aggtattgtt agcggtttga agcaggcggc agaagaagta acaaaggaac
-     ctagaggcct tttgatgtta gcagaattgt catgcaaggg ctccctatct actggagaat
-     atactaaggg tactgttgac attgcgaaga gcgacaaaga ttttgttatc ggctttattg
-     ctcaaagaga catgggtgga agagatgaag gttacgattg gttgattatg acacccggtg
-     tgggtttaga tgacaaggga gacgcattgg gtcaacagta tagaaccgtg gatgatgtgg
-     tctctacagg atctgacatt attattgttg gaagaggact atttgcaaag ggaagggatg
-     ctaaggtaga gggtgaacgt tacagaaaag caggctggga agcatatttg agaagatgcg
-     gccagcaaaa ctaaaaaact gtattataag taaatgcatg tatactaaac tcacaaatta
-     gagcttcaat ttaattatat cagttattac cctgcggtgt gaaataccgc acagatgcgt
-     aaggagaaaa taccgcatca ggaaattgta aacgttaata ttttgttaaa attcgcgtta
-     aatttttgtt aaatcagctc attttttaac caataggccg aaatcggcaa aatcccttat
-     aaatcaaaag aatagaccga gatagggttg agtgttgttc cagtttggaa caagagtcca
-     ctattaaaga acgtggactc caacgtcaaa gggcgaaaaa ccgtctatca gggcgatggc
-     ccactacgtg aaccatcacc ctaatcaagt tttttggggt cgaggtgccg taaagcacta
-     aatcggaacc ctaaagggag cccccgattt agagcttgac ggggaaagcc ggcgaacgtg
-     gcgagaaagg aagggaagaa agcgaaagga gcgggcgcta gggcgctggc aagtgtagcg
-     gtcacgctgc gcgtaaccac cacacccgcc gcgcttaatg cgccgctaca gggcgcgtcg
-     cgccattcgc cattcaggct gcgcaactgt tgggaagggc gatcggtgcg ggcctcttcg
-     ctattacgcc agctggcgaa ggggggatgt gctgcaaggc gattaagttg ggtaacgcca
-     gggttttccc agtcacgacg ttgtaaaacg acggccagtg aattgtaata cgactcacta
-     tagggcgaat tggagctcca ccgcggtggc ggccgctcta gaactagtgg atcccccggg
-     ctgcaggaat tcgatatcaa gcttatcgat accgtcgacc tcgagggggg gcccggtacc
-     cagcttttgt tccctttagt gagggttaat tccgagcttg gcgtaatcat ggtcatagct
-     gtttcctgtg tgaaattgtt atccgctcac aattccacac aacataggag ccggaagcat
-     aaagtgtaaa gcctggggtg cctaatgagt gaggtaactc acattaattg cgttgcgctc
-     actgcccgct ttccagtcgg gaaacctgtc gtgccagctg cattaatgaa tcggccaacg
-     cgcggggaga ggcggtttgc gtattgggcg ctcttccgct tcctcgctca ctgactcgct
-     gcgctcggtc gttcggctgc ggcgagcggt atcagctcac tcaaaggcgg taatacggtt
-     atccacagaa tcaggggata acgcaggaaa gaacatgtga gcaaaaggcc agcaaaaggc
-     caggaaccgt aaaaaggccg cgttgctggc gtttttccat aggctcggcc cccctgacga
-     gcatcacaaa aatcgacgct caagtcagag gtggcgaaac ccgacaggac tataaagata
-     ccaggcgttc ccccctggaa gctccctcgt gcgctctcct gttccgaccc tgccgcttac
-     cggatacctg tccgcctttc tcccttcggg aagcgtggcg ctttctcaat gctcacgctg
-     taggtatctc agttcggtgt aggtcgttcg ctccaagctg ggctgtgtgc acgaaccccc
-     cgttcagccc gaccgctgcg ccttatccgg taactatcgt cttgagtcca acccggtaag
-     acacgactta tcgccactgg cagcagccac tggtaacagg attagcagag cgaggtatgt
-     aggcggtgct acagagttct tgaagtggtg gcctaactac ggctacacta gaaggacagt
-     atttggtatc tgcgctctgc tgaagccagt taccttcgga aaaagagttg gtagctcttg
-     atccggcaaa caaaccaccg ctggtagcgg tggttttttt gtttgcaagc agcagattac
-     gcgcagaaaa aaaggatctc aagaagatcc tttgatcttt tctacggggt ctgacgctca
-     gtggaacgaa aactcacgtt aagggatttt ggtcatgaga ttatcaaaaa ggatcttcac
-     ctagatcctt ttaaattaaa aatgaagttt taaatcaatc taaagtatat atgagtaaac
-     ttggtctgac agttaccaat gcttaatcag tgaggcacct atctcagcga tctgtctatt
-     tcgttcatcc atagttgcct gactgcccgt cgtgtagata actacgatac gggagggctt
-     accatctggc cccagtgctg caatgatacc gcgagaccca cgctcaccgg ctccagattt
-     atcagcaata aaccagccag ccggaagggc cgagcgcaga agtggtcctg caactttatc
-     cgcctccatc cagtctatta attgttgccg ggaagctaga gtaagtagtt cgccagttaa
-     tagtttgcgc aacgttgttg ccattgctac aggcatcgtg gtgtcacgct cgtcgtttgg
-     tatggcttca ttcagctccg gttcccaacg atcaaggcga gttacatgat cccccatgtt
-     gtgaaaaaaa gcggttagct ccttcggtcc tccgatcgtt gtcagaagta agttggccgc
-     agtgttatca ctcatggtta tggcagcact gcataattct cttactgtca tgccatccgt
-     aagatgcttt tctgtgactg gtgagtactc aaccaagtca ttctgagaat agtgtatgcg
-     gcgaccgagt tgctcttgcc cggcgtcaat acgggataat accgcgccac atagcagaac
-     tttaaaagtg ctcatcattg gaaaacgttc ttcggggcga aaactctcaa ggatcttacc
-     gctgttgaga tccagttcga tgtaacccac tcgtgcaccc aactgatctt cagcatcttt
-     tactttcacc agcgtttctg ggtgagcaaa aacaggaagg caaaatgccg caaaaaaggg
-     aataagggcg acacggaaat gttgaatact catactcttc ctttttcaat attattgaag
-     catttatcag ggttattgtc tcatgagcgg atacatattt gaatgtattt agaaaaataa
-     acaaataggg gttccgcgca catttccccg aaaagtgcca cctgggtcct tttcatcacg
-     tgctataaaa ataattataa tttaaatttt ttaatataaa tatataaatt aaaaatagaa
-     agtaaaaaaa gaaattaaag aaaaaatagt ttttgttttc cgaagatgta aaagactcta
-     gggggatcgc caacaaatac taccttttat cttgctcttc ctgctctcag gtattaatgc
-     cgaattgttt catcttgtct gtgtagaaga ccacacacga aaatcctgtg attttacatt
-     ttacttatcg ttaatcgaat gtatatctat ttaatctgct tttcttgtct aataaatata
-     tatgtaaagt acgctttttg ttgaaatttt ttaaaccttt gtttattttt ttttcttcat
-     tccgtaactc ttctaccttc tttatttact ttctaaaatc caaatacaaa acataaaaat
-     aaataaacac agagtaaatt cccaaattat tccatcatta aaagatacga ggcgcgtgta
-     agttacaggc aagcgatccg tcctaagaaa ccattattat catgacatta acctataaaa
-     ataggcgtat cacgaggccc tttcgtc
-//
diff --git a/plasmid/resource/example/FRP_1/PRS316-2.ab1 b/plasmid/resource/example/FRP_1/PRS316-2.ab1
deleted file mode 100644
index e33465983622dfc0c12a4c407740b02c146ecb2b..0000000000000000000000000000000000000000
--- a/plasmid/resource/example/FRP_1/PRS316-2.ab1
+++ /dev/null
@@ -1,229 +0,0 @@
-ID   PRS316     preliminary; circular DNA; SYN; 4887 BP.
-XX
-AC   U03442; ATCC77145;
-XX
-DT   01-JUL-1993 (Rel. 7, Created)
-DT   01-JUL-1995 (Rel. 12, Last updated, Version 1)
-XX
-DE   Saccharomyces/E.coli phagemid vector pRS316 - complete.
-XX
-KW   cloning vector.
-XX
-OS   Cloning vector
-OC   Artificial sequences; Cloning vehicles.
-XX
-RN   [1]
-RP   1-4887
-RC   pRSS56 from pBluescript KS+ &amp; BlueScribe
-RC   pRS303 from pRSS56 &amp; HIS3 gene
-RC   pRS304 from pRSS56 &amp; TRP1 gene
-RC   pRS305 from pRSS56 &amp; LEU2 gene
-RC   pRS306 from pRSS56 &amp; URA3 gene
-RC   pUC19-CEN6:32 from pUC19 &amp; CEN6
-RC   pRSS83 from pUC19-CEN6:32 &amp; pAB9, ARS
-RC   pRSS84 from pRSS83
-RC   pRS313 from pRS303 &amp; pRSS84
-RC   pRS314 from pRS304 &amp; pRSS84
-RC   pRS315 from pRS305 &amp; pRSS84
-RC   pRS316 from pRS306 &amp; pRSS84
-RC   pRSS93 from pRSS84 &amp; pYCF5
-RA   Sikorski R.S., Hieter P.;
-RT   "A system of shuttle vectors and yeast host strains designed for
-RT   efficient manipulation of DNA in Saccharomyces cerevisiae";
-RL   Genetics 122:19-27(1989).
-XX
-RN   [2]
-RC   from YEp24
-RC   from YCp50
-RC   from YIp5
-RA   Strathern J.N., Higgins D.R.;
-RT   "Recovery of plasmids from yeast into Escherichia coli: shuttle
-RT   vectors";
-RL   Meth. Enzymol. 194:319-329(1991).
-XX
-RN   [3]
-RC   pRS316
-RA   Stillman D.J.;
-RT   ;
-RL   Submitted (10-NOV-1993) by:
-RL   Stillman D.J., Dept. of Cellular, Viral and Molecular Biology,
-RL   University of Utah Medical Center, Salt Lake City, UT 84132 USA.
-XX
-CC   One of a series of pBluescript-based centromere vectors (ATCC 77142
-CC   ATCC 77145, ATCC 77157 to ATCC 77158) differing in the yeast
-CC   selectable marker gene. [1]
-CC   The order of the major features in this plasmid is: URA3 - f1 ori
-CC   (NaeI) - T7 promoter - lacZ'/MCS - T3 promoter - pMB1 ori - bla -
-CC   CEN6 - ARSH4.
-CC   A fragment (1.112 kb) containing the URA3 gene was inserted into the
-CC   NdeI site and a cassette containing CEN6 and the ARS associated with
-CC   histone 4 (ARSH4) was inserted into the AatII site of pRSS56. All ends
-CC   were blunted.
-CC   pRSS56, constructed by ligating a PvuI fragment (bp 498-2412) of
-CC   pBluescript KS+ to a PvuI fragment (bp 2850-730) of pBS(+), contains
-CC   the KS MCS from pBluescript KS+ and the unique NdeI and AatII sites
-CC   between bla and f1 origin of pBS(+). [1]
-CC   YC-type centromere vector permitting visual detection of recombinants
-CC   and production of ssDNA in E.coli.  Contains promoters for in vitro
-CC   RNA synthesis, priming sites useful for sequencing, and encodes the
-CC   lacZ alpha (lacZ') peptide. [1]
-CC   Useful in plasmid shuffle experiments.
-CC   Restriction digests of the clone give the following sizes (kb):
-CC   EcoRI--5.0; BamHI--5.0, PvuII--4.4, 0.5. (ATCC staff)
-CC   Medium is 1227 LB plus ampicillin.
-CC   NCBI gi: 417973
-CC   NM (pRS316)
-CC   CM (yes)
-CC   NA (ds-DNA)
-CC   TP (circular)
-CC   ST ()
-CC   TY (phagemid)
-CC   SP (ATCC)
-CC   HO (E.coli HB101)(Saccharomyces cerevisiae)(E.coli)
-CC   HO (Saccharomyces cerevisiae YPH499)(Saccharomyces cerevisiae YPH500)
-CC   HO (Saccharomyces cerevisiae YPH501)
-CC   CP ()
-CC   FN (cloning)
-CC   SE ()
-CC   PA ()
-CC   BR (pRS314)(pRS315)(pRS313)
-CC   OF ()
-CC   OR ()
-XX
-FH   Key             Location/Qualifiers
-FH
-FT   misc_feature    0..0
-FT                   /note="1. pUC19 HincII 2686bp 432..432
-FT                   2. yeast MboII-MboII 125bp, CEN6
-FT                   -&gt; pUC19-CEN6:32 2811bp
-FT                   1. pUC8 BamHI 2665bp 241..241
-FT                   2. yeast Sau3AI-Sau3AI 374bp, histone H4 ARS/ARSH4
-FT                   -&gt; pAB9 3039bp
-FT                   1. pUC19-CEN6:32 EcoRI-ScaI 1908bp 397..-..2180, CEN6
-FT                   2. pAB9 ScaI-EcoRI 1314bp 231..-..1171,
-FT                   \ histone H4 ARS/ARSH4
-FT                   -&gt; pRSS83 3222bp [in MCS]
-FT                   1. pRSS83 remove SmaI-XbaI 9bp, MCS/pUC19 415..424
-FT                   \ 3213bp
-FT                   Klenow:Klenow
-FT                   -&gt; pRSS84 3213bp
-FT                   1. pRSS84 HincII-PstI, CEN6/ARSH4
-FT                   \ pUC19 440..2686..432
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   2. pRS306 AatII 4373bp 848..848
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   -&gt; pRS316 4887bp"
-FT   misc_binding    0..0
-FT                   /note="MCS KpnI-ApaI-XhoI-SalI-ClaI-HindIII-EcoRV-
-FT                   EcoRI-PstI-SmaI-
-FT                   BamHI-SpeI-XbaI-EagI-NotI-BstXI-SacII-SacI"
-FT   misc_binding    0..0
-FT                   /note="SIT unique KpnI-ApaI-XhoI-SalI-ClaI-EcoRI-
-FT                   PstI-SmaI-BamHI-SpeI-EagI-NotI-SacII-SacI-NaeI"
-FT   rep_origin      0..0
-FT                   /note="ORI E. coli pMB1 (ColE1 and pBR322)"
-FT   rep_origin      0..0
-FT                   /note="ORI bacteriophage f1"
-FT   promoter        0..0
-FT                   /note="PRO E. coli lac gene"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T3"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T7"
-FT   CDS             0..0
-FT                   /note="GEN E. coli beta-galactosidase gene (lacZ');
-FT                   reporter gene"
-FT   CDS             0..0
-FT                   /note="ANT E. coli beta-lactamase gene (bla)
-FT                   ampicillin resistance gene (apr/amp)"
-FT   CDS             0..0
-FT                   /note="ANT yeast URA3 gene"
-FT   rep_origin      0..0
-FT                   /note="ORI yeast ARSH4"
-FT   misc_feature    0..0
-FT                   /note="yeast centromere CEN6"
-XX
-SQ   Sequence 4887 BP; 1361 A; 1069 C; 1167 G; 1290 T; 0 other;
-     tcgcgcgttt cggtgatgac ggtgaaaacc tctgacacat gcagctcccg gagacggtca
-     cagcttgtct gtaagcggat gccgggagca gacaagcccg tcagggcgcg tcagcgggtg
-     ttggcgggtg tcggggctgg cttaactatg cggcatcaga gcagattgta ctgagagtgc
-     accacgcttt tcaattcaat tcatcatttt ttttttattc ttttttttga tttcggtttc
-     tttgaaattt ttttgattcg gtaatctccg aacagaagga agaacgaagg aaggagcaca
-     gacttagatt ggtatatata cgcatatgta gtgttgaaga aacatgaaat tgcccagtat
-     tcttaaccca actgcacaga acaaaaacct gcaggaaacg aagataaatc atgtcgaaag
-     ctacatataa ggaacgtgct gctactcatc ctagtcctgt tgctgccaag ctatttaata
-     tcatgcacga aaagcaaaca aacttgtgtg cttcattgga tgttcgtacc accaaggaat
-     tactggagtt agttgaagca ttaggtccca aaatttgttt actaaaaaca catgtggata
-     tcttgactga tttttccatg gagggcacag ttaagccgct aaaggcatta tccgccaagt
-     acaatttttt actcttcgaa gacagaaaat ttgctgacat tggtaataca gtcaaattgc
-     agtactctgc gggtgtatac agaatagcag aatgggcaga cattacgaat gcacacggtg
-     tggtgggccc aggtattgtt agcggtttga agcaggcggc agaagaagta acaaaggaac
-     ctagaggcct tttgatgtta gcagaattgt catgcaaggg ctccctatct actggagaat
-     atactaaggg tactgttgac attgcgaaga gcgacaaaga ttttgttatc ggctttattg
-     ctcaaagaga catgggtgga agagatgaag gttacgattg gttgattatg acacccggtg
-     tgggtttaga tgacaaggga gacgcattgg gtcaacagta tagaaccgtg gatgatgtgg
-     tctctacagg atctgacatt attattgttg gaagaggact atttgcaaag ggaagggatg
-     ctaaggtaga gggtgaacgt tacagaaaag caggctggga agcatatttg agaagatgcg
-     gccagcaaaa ctaaaaaact gtattataag taaatgcatg tatactaaac tcacaaatta
-     gagcttcaat ttaattatat cagttattac cctgcggtgt gaaataccgc acagatgcgt
-     aaggagaaaa taccgcatca ggaaattgta aacgttaata ttttgttaaa attcgcgtta
-     aatttttgtt aaatcagctc attttttaac caataggccg aaatcggcaa aatcccttat
-     aaatcaaaag aatagaccga gatagggttg agtgttgttc cagtttggaa caagagtcca
-     ctattaaaga acgtggactc caacgtcaaa gggcgaaaaa ccgtctatca gggcgatggc
-     ccactacgtg aaccatcacc ctaatcaagt tttttggggt cgaggtgccg taaagcacta
-     aatcggaacc ctaaagggag cccccgattt agagcttgac ggggaaagcc ggcgaacgtg
-     gcgagaaagg aagggaagaa agcgaaagga gcgggcgcta gggcgctggc aagtgtagcg
-     gtcacgctgc gcgtaaccac cacacccgcc gcgcttaatg cgccgctaca gggcgcgtcg
-     cgccattcgc cattcaggct gcgcaactgt tgggaagggc gatcggtgcg ggcctcttcg
-     ctattacgcc agctggcgaa ggggggatgt gctgcaaggc gattaagttg ggtaacgcca
-     gggttttccc agtcacgacg ttgtaaaacg acggccagtg aattgtaata cgactcacta
-     tagggcgaat tggagctcca ccgcggtggc ggccgctcta gaactagtgg atcccccggg
-     ctgcaggaat tcgatatcaa gcttatcgat accgtcgacc tcgagggggg gcccggtacc
-     cagcttttgt tccctttagt gagggttaat tccgagcttg gcgtaatcat ggtcatagct
-     gtttcctgtg tgaaattgtt atccgctcac aattccacac aacataggag ccggaagcat
-     aaagtgtaaa gcctggggtg cctaatgagt gaggtaactc acattaattg cgttgcgctc
-     actgcccgct ttccagtcgg gaaacctgtc gtgccagctg cattaatgaa tcggccaacg
-     cgcggggaga ggcggtttgc gtattgggcg ctcttccgct tcctcgctca ctgactcgct
-     gcgctcggtc gttcggctgc ggcgagcggt atcagctcac tcaaaggcgg taatacggtt
-     atccacagaa tcaggggata acgcaggaaa gaacatgtga gcaaaaggcc agcaaaaggc
-     caggaaccgt aaaaaggccg cgttgctggc gtttttccat aggctcggcc cccctgacga
-     gcatcacaaa aatcgacgct caagtcagag gtggcgaaac ccgacaggac tataaagata
-     ccaggcgttc ccccctggaa gctccctcgt gcgctctcct gttccgaccc tgccgcttac
-     cggatacctg tccgcctttc tcccttcggg aagcgtggcg ctttctcaat gctcacgctg
-     taggtatctc agttcggtgt aggtcgttcg ctccaagctg ggctgtgtgc acgaaccccc
-     cgttcagccc gaccgctgcg ccttatccgg taactatcgt cttgagtcca acccggtaag
-     acacgactta tcgccactgg cagcagccac tggtaacagg attagcagag cgaggtatgt
-     aggcggtgct acagagttct tgaagtggtg gcctaactac ggctacacta gaaggacagt
-     atttggtatc tgcgctctgc tgaagccagt taccttcgga aaaagagttg gtagctcttg
-     atccggcaaa caaaccaccg ctggtagcgg tggttttttt gtttgcaagc agcagattac
-     gcgcagaaaa aaaggatctc aagaagatcc tttgatcttt tctacggggt ctgacgctca
-     gtggaacgaa aactcacgtt aagggatttt ggtcatgaga ttatcaaaaa ggatcttcac
-     ctagatcctt ttaaattaaa aatgaagttt taaatcaatc taaagtatat atgagtaaac
-     ttggtctgac agttaccaat gcttaatcag tgaggcacct atctcagcga tctgtctatt
-     tcgttcatcc atagttgcct gactgcccgt cgtgtagata actacgatac gggagggctt
-     accatctggc cccagtgctg caatgatacc gcgagaccca cgctcaccgg ctccagattt
-     atcagcaata aaccagccag ccggaagggc cgagcgcaga agtggtcctg caactttatc
-     cgcctccatc cagtctatta attgttgccg ggaagctaga gtaagtagtt cgccagttaa
-     tagtttgcgc aacgttgttg ccattgctac aggcatcgtg gtgtcacgct cgtcgtttgg
-     tatggcttca ttcagctccg gttcccaacg atcaaggcga gttacatgat cccccatgtt
-     gtgaaaaaaa gcggttagct ccttcggtcc tccgatcgtt gtcagaagta agttggccgc
-     agtgttatca ctcatggtta tggcagcact gcataattct cttactgtca tgccatccgt
-     aagatgcttt tctgtgactg gtgagtactc aaccaagtca ttctgagaat agtgtatgcg
-     gcgaccgagt tgctcttgcc cggcgtcaat acgggataat accgcgccac atagcagaac
-     tttaaaagtg ctcatcattg gaaaacgttc ttcggggcga aaactctcaa ggatcttacc
-     gctgttgaga tccagttcga tgtaacccac tcgtgcaccc aactgatctt cagcatcttt
-     tactttcacc agcgtttctg ggtgagcaaa aacaggaagg caaaatgccg caaaaaaggg
-     aataagggcg acacggaaat gttgaatact catactcttc ctttttcaat attattgaag
-     catttatcag ggttattgtc tcatgagcgg atacatattt gaatgtattt agaaaaataa
-     acaaataggg gttccgcgca catttccccg aaaagtgcca cctgggtcct tttcatcacg
-     tgctataaaa ataattataa tttaaatttt ttaatataaa tatataaatt aaaaatagaa
-     agtaaaaaaa gaaattaaag aaaaaatagt ttttgttttc cgaagatgta aaagactcta
-     gggggatcgc caacaaatac taccttttat cttgctcttc ctgctctcag gtattaatgc
-     cgaattgttt catcttgtct gtgtagaaga ccacacacga aaatcctgtg attttacatt
-     ttacttatcg ttaatcgaat gtatatctat ttaatctgct tttcttgtct aataaatata
-     tatgtaaagt acgctttttg ttgaaatttt ttaaaccttt gtttattttt ttttcttcat
-     tccgtaactc ttctaccttc tttatttact ttctaaaatc caaatacaaa acataaaaat
-     aaataaacac agagtaaatt cccaaattat tccatcatta aaagatacga ggcgcgtgta
-     agttacaggc aagcgatccg tcctaagaaa ccattattat catgacatta acctataaaa
-     ataggcgtat cacgaggccc tttcgtc
-//
diff --git a/plasmid/resource/example/FRP_1/PRS316-3.ab1 b/plasmid/resource/example/FRP_1/PRS316-3.ab1
deleted file mode 100644
index e33465983622dfc0c12a4c407740b02c146ecb2b..0000000000000000000000000000000000000000
--- a/plasmid/resource/example/FRP_1/PRS316-3.ab1
+++ /dev/null
@@ -1,229 +0,0 @@
-ID   PRS316     preliminary; circular DNA; SYN; 4887 BP.
-XX
-AC   U03442; ATCC77145;
-XX
-DT   01-JUL-1993 (Rel. 7, Created)
-DT   01-JUL-1995 (Rel. 12, Last updated, Version 1)
-XX
-DE   Saccharomyces/E.coli phagemid vector pRS316 - complete.
-XX
-KW   cloning vector.
-XX
-OS   Cloning vector
-OC   Artificial sequences; Cloning vehicles.
-XX
-RN   [1]
-RP   1-4887
-RC   pRSS56 from pBluescript KS+ &amp; BlueScribe
-RC   pRS303 from pRSS56 &amp; HIS3 gene
-RC   pRS304 from pRSS56 &amp; TRP1 gene
-RC   pRS305 from pRSS56 &amp; LEU2 gene
-RC   pRS306 from pRSS56 &amp; URA3 gene
-RC   pUC19-CEN6:32 from pUC19 &amp; CEN6
-RC   pRSS83 from pUC19-CEN6:32 &amp; pAB9, ARS
-RC   pRSS84 from pRSS83
-RC   pRS313 from pRS303 &amp; pRSS84
-RC   pRS314 from pRS304 &amp; pRSS84
-RC   pRS315 from pRS305 &amp; pRSS84
-RC   pRS316 from pRS306 &amp; pRSS84
-RC   pRSS93 from pRSS84 &amp; pYCF5
-RA   Sikorski R.S., Hieter P.;
-RT   "A system of shuttle vectors and yeast host strains designed for
-RT   efficient manipulation of DNA in Saccharomyces cerevisiae";
-RL   Genetics 122:19-27(1989).
-XX
-RN   [2]
-RC   from YEp24
-RC   from YCp50
-RC   from YIp5
-RA   Strathern J.N., Higgins D.R.;
-RT   "Recovery of plasmids from yeast into Escherichia coli: shuttle
-RT   vectors";
-RL   Meth. Enzymol. 194:319-329(1991).
-XX
-RN   [3]
-RC   pRS316
-RA   Stillman D.J.;
-RT   ;
-RL   Submitted (10-NOV-1993) by:
-RL   Stillman D.J., Dept. of Cellular, Viral and Molecular Biology,
-RL   University of Utah Medical Center, Salt Lake City, UT 84132 USA.
-XX
-CC   One of a series of pBluescript-based centromere vectors (ATCC 77142
-CC   ATCC 77145, ATCC 77157 to ATCC 77158) differing in the yeast
-CC   selectable marker gene. [1]
-CC   The order of the major features in this plasmid is: URA3 - f1 ori
-CC   (NaeI) - T7 promoter - lacZ'/MCS - T3 promoter - pMB1 ori - bla -
-CC   CEN6 - ARSH4.
-CC   A fragment (1.112 kb) containing the URA3 gene was inserted into the
-CC   NdeI site and a cassette containing CEN6 and the ARS associated with
-CC   histone 4 (ARSH4) was inserted into the AatII site of pRSS56. All ends
-CC   were blunted.
-CC   pRSS56, constructed by ligating a PvuI fragment (bp 498-2412) of
-CC   pBluescript KS+ to a PvuI fragment (bp 2850-730) of pBS(+), contains
-CC   the KS MCS from pBluescript KS+ and the unique NdeI and AatII sites
-CC   between bla and f1 origin of pBS(+). [1]
-CC   YC-type centromere vector permitting visual detection of recombinants
-CC   and production of ssDNA in E.coli.  Contains promoters for in vitro
-CC   RNA synthesis, priming sites useful for sequencing, and encodes the
-CC   lacZ alpha (lacZ') peptide. [1]
-CC   Useful in plasmid shuffle experiments.
-CC   Restriction digests of the clone give the following sizes (kb):
-CC   EcoRI--5.0; BamHI--5.0, PvuII--4.4, 0.5. (ATCC staff)
-CC   Medium is 1227 LB plus ampicillin.
-CC   NCBI gi: 417973
-CC   NM (pRS316)
-CC   CM (yes)
-CC   NA (ds-DNA)
-CC   TP (circular)
-CC   ST ()
-CC   TY (phagemid)
-CC   SP (ATCC)
-CC   HO (E.coli HB101)(Saccharomyces cerevisiae)(E.coli)
-CC   HO (Saccharomyces cerevisiae YPH499)(Saccharomyces cerevisiae YPH500)
-CC   HO (Saccharomyces cerevisiae YPH501)
-CC   CP ()
-CC   FN (cloning)
-CC   SE ()
-CC   PA ()
-CC   BR (pRS314)(pRS315)(pRS313)
-CC   OF ()
-CC   OR ()
-XX
-FH   Key             Location/Qualifiers
-FH
-FT   misc_feature    0..0
-FT                   /note="1. pUC19 HincII 2686bp 432..432
-FT                   2. yeast MboII-MboII 125bp, CEN6
-FT                   -&gt; pUC19-CEN6:32 2811bp
-FT                   1. pUC8 BamHI 2665bp 241..241
-FT                   2. yeast Sau3AI-Sau3AI 374bp, histone H4 ARS/ARSH4
-FT                   -&gt; pAB9 3039bp
-FT                   1. pUC19-CEN6:32 EcoRI-ScaI 1908bp 397..-..2180, CEN6
-FT                   2. pAB9 ScaI-EcoRI 1314bp 231..-..1171,
-FT                   \ histone H4 ARS/ARSH4
-FT                   -&gt; pRSS83 3222bp [in MCS]
-FT                   1. pRSS83 remove SmaI-XbaI 9bp, MCS/pUC19 415..424
-FT                   \ 3213bp
-FT                   Klenow:Klenow
-FT                   -&gt; pRSS84 3213bp
-FT                   1. pRSS84 HincII-PstI, CEN6/ARSH4
-FT                   \ pUC19 440..2686..432
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   2. pRS306 AatII 4373bp 848..848
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   -&gt; pRS316 4887bp"
-FT   misc_binding    0..0
-FT                   /note="MCS KpnI-ApaI-XhoI-SalI-ClaI-HindIII-EcoRV-
-FT                   EcoRI-PstI-SmaI-
-FT                   BamHI-SpeI-XbaI-EagI-NotI-BstXI-SacII-SacI"
-FT   misc_binding    0..0
-FT                   /note="SIT unique KpnI-ApaI-XhoI-SalI-ClaI-EcoRI-
-FT                   PstI-SmaI-BamHI-SpeI-EagI-NotI-SacII-SacI-NaeI"
-FT   rep_origin      0..0
-FT                   /note="ORI E. coli pMB1 (ColE1 and pBR322)"
-FT   rep_origin      0..0
-FT                   /note="ORI bacteriophage f1"
-FT   promoter        0..0
-FT                   /note="PRO E. coli lac gene"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T3"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T7"
-FT   CDS             0..0
-FT                   /note="GEN E. coli beta-galactosidase gene (lacZ');
-FT                   reporter gene"
-FT   CDS             0..0
-FT                   /note="ANT E. coli beta-lactamase gene (bla)
-FT                   ampicillin resistance gene (apr/amp)"
-FT   CDS             0..0
-FT                   /note="ANT yeast URA3 gene"
-FT   rep_origin      0..0
-FT                   /note="ORI yeast ARSH4"
-FT   misc_feature    0..0
-FT                   /note="yeast centromere CEN6"
-XX
-SQ   Sequence 4887 BP; 1361 A; 1069 C; 1167 G; 1290 T; 0 other;
-     tcgcgcgttt cggtgatgac ggtgaaaacc tctgacacat gcagctcccg gagacggtca
-     cagcttgtct gtaagcggat gccgggagca gacaagcccg tcagggcgcg tcagcgggtg
-     ttggcgggtg tcggggctgg cttaactatg cggcatcaga gcagattgta ctgagagtgc
-     accacgcttt tcaattcaat tcatcatttt ttttttattc ttttttttga tttcggtttc
-     tttgaaattt ttttgattcg gtaatctccg aacagaagga agaacgaagg aaggagcaca
-     gacttagatt ggtatatata cgcatatgta gtgttgaaga aacatgaaat tgcccagtat
-     tcttaaccca actgcacaga acaaaaacct gcaggaaacg aagataaatc atgtcgaaag
-     ctacatataa ggaacgtgct gctactcatc ctagtcctgt tgctgccaag ctatttaata
-     tcatgcacga aaagcaaaca aacttgtgtg cttcattgga tgttcgtacc accaaggaat
-     tactggagtt agttgaagca ttaggtccca aaatttgttt actaaaaaca catgtggata
-     tcttgactga tttttccatg gagggcacag ttaagccgct aaaggcatta tccgccaagt
-     acaatttttt actcttcgaa gacagaaaat ttgctgacat tggtaataca gtcaaattgc
-     agtactctgc gggtgtatac agaatagcag aatgggcaga cattacgaat gcacacggtg
-     tggtgggccc aggtattgtt agcggtttga agcaggcggc agaagaagta acaaaggaac
-     ctagaggcct tttgatgtta gcagaattgt catgcaaggg ctccctatct actggagaat
-     atactaaggg tactgttgac attgcgaaga gcgacaaaga ttttgttatc ggctttattg
-     ctcaaagaga catgggtgga agagatgaag gttacgattg gttgattatg acacccggtg
-     tgggtttaga tgacaaggga gacgcattgg gtcaacagta tagaaccgtg gatgatgtgg
-     tctctacagg atctgacatt attattgttg gaagaggact atttgcaaag ggaagggatg
-     ctaaggtaga gggtgaacgt tacagaaaag caggctggga agcatatttg agaagatgcg
-     gccagcaaaa ctaaaaaact gtattataag taaatgcatg tatactaaac tcacaaatta
-     gagcttcaat ttaattatat cagttattac cctgcggtgt gaaataccgc acagatgcgt
-     aaggagaaaa taccgcatca ggaaattgta aacgttaata ttttgttaaa attcgcgtta
-     aatttttgtt aaatcagctc attttttaac caataggccg aaatcggcaa aatcccttat
-     aaatcaaaag aatagaccga gatagggttg agtgttgttc cagtttggaa caagagtcca
-     ctattaaaga acgtggactc caacgtcaaa gggcgaaaaa ccgtctatca gggcgatggc
-     ccactacgtg aaccatcacc ctaatcaagt tttttggggt cgaggtgccg taaagcacta
-     aatcggaacc ctaaagggag cccccgattt agagcttgac ggggaaagcc ggcgaacgtg
-     gcgagaaagg aagggaagaa agcgaaagga gcgggcgcta gggcgctggc aagtgtagcg
-     gtcacgctgc gcgtaaccac cacacccgcc gcgcttaatg cgccgctaca gggcgcgtcg
-     cgccattcgc cattcaggct gcgcaactgt tgggaagggc gatcggtgcg ggcctcttcg
-     ctattacgcc agctggcgaa ggggggatgt gctgcaaggc gattaagttg ggtaacgcca
-     gggttttccc agtcacgacg ttgtaaaacg acggccagtg aattgtaata cgactcacta
-     tagggcgaat tggagctcca ccgcggtggc ggccgctcta gaactagtgg atcccccggg
-     ctgcaggaat tcgatatcaa gcttatcgat accgtcgacc tcgagggggg gcccggtacc
-     cagcttttgt tccctttagt gagggttaat tccgagcttg gcgtaatcat ggtcatagct
-     gtttcctgtg tgaaattgtt atccgctcac aattccacac aacataggag ccggaagcat
-     aaagtgtaaa gcctggggtg cctaatgagt gaggtaactc acattaattg cgttgcgctc
-     actgcccgct ttccagtcgg gaaacctgtc gtgccagctg cattaatgaa tcggccaacg
-     cgcggggaga ggcggtttgc gtattgggcg ctcttccgct tcctcgctca ctgactcgct
-     gcgctcggtc gttcggctgc ggcgagcggt atcagctcac tcaaaggcgg taatacggtt
-     atccacagaa tcaggggata acgcaggaaa gaacatgtga gcaaaaggcc agcaaaaggc
-     caggaaccgt aaaaaggccg cgttgctggc gtttttccat aggctcggcc cccctgacga
-     gcatcacaaa aatcgacgct caagtcagag gtggcgaaac ccgacaggac tataaagata
-     ccaggcgttc ccccctggaa gctccctcgt gcgctctcct gttccgaccc tgccgcttac
-     cggatacctg tccgcctttc tcccttcggg aagcgtggcg ctttctcaat gctcacgctg
-     taggtatctc agttcggtgt aggtcgttcg ctccaagctg ggctgtgtgc acgaaccccc
-     cgttcagccc gaccgctgcg ccttatccgg taactatcgt cttgagtcca acccggtaag
-     acacgactta tcgccactgg cagcagccac tggtaacagg attagcagag cgaggtatgt
-     aggcggtgct acagagttct tgaagtggtg gcctaactac ggctacacta gaaggacagt
-     atttggtatc tgcgctctgc tgaagccagt taccttcgga aaaagagttg gtagctcttg
-     atccggcaaa caaaccaccg ctggtagcgg tggttttttt gtttgcaagc agcagattac
-     gcgcagaaaa aaaggatctc aagaagatcc tttgatcttt tctacggggt ctgacgctca
-     gtggaacgaa aactcacgtt aagggatttt ggtcatgaga ttatcaaaaa ggatcttcac
-     ctagatcctt ttaaattaaa aatgaagttt taaatcaatc taaagtatat atgagtaaac
-     ttggtctgac agttaccaat gcttaatcag tgaggcacct atctcagcga tctgtctatt
-     tcgttcatcc atagttgcct gactgcccgt cgtgtagata actacgatac gggagggctt
-     accatctggc cccagtgctg caatgatacc gcgagaccca cgctcaccgg ctccagattt
-     atcagcaata aaccagccag ccggaagggc cgagcgcaga agtggtcctg caactttatc
-     cgcctccatc cagtctatta attgttgccg ggaagctaga gtaagtagtt cgccagttaa
-     tagtttgcgc aacgttgttg ccattgctac aggcatcgtg gtgtcacgct cgtcgtttgg
-     tatggcttca ttcagctccg gttcccaacg atcaaggcga gttacatgat cccccatgtt
-     gtgaaaaaaa gcggttagct ccttcggtcc tccgatcgtt gtcagaagta agttggccgc
-     agtgttatca ctcatggtta tggcagcact gcataattct cttactgtca tgccatccgt
-     aagatgcttt tctgtgactg gtgagtactc aaccaagtca ttctgagaat agtgtatgcg
-     gcgaccgagt tgctcttgcc cggcgtcaat acgggataat accgcgccac atagcagaac
-     tttaaaagtg ctcatcattg gaaaacgttc ttcggggcga aaactctcaa ggatcttacc
-     gctgttgaga tccagttcga tgtaacccac tcgtgcaccc aactgatctt cagcatcttt
-     tactttcacc agcgtttctg ggtgagcaaa aacaggaagg caaaatgccg caaaaaaggg
-     aataagggcg acacggaaat gttgaatact catactcttc ctttttcaat attattgaag
-     catttatcag ggttattgtc tcatgagcgg atacatattt gaatgtattt agaaaaataa
-     acaaataggg gttccgcgca catttccccg aaaagtgcca cctgggtcct tttcatcacg
-     tgctataaaa ataattataa tttaaatttt ttaatataaa tatataaatt aaaaatagaa
-     agtaaaaaaa gaaattaaag aaaaaatagt ttttgttttc cgaagatgta aaagactcta
-     gggggatcgc caacaaatac taccttttat cttgctcttc ctgctctcag gtattaatgc
-     cgaattgttt catcttgtct gtgtagaaga ccacacacga aaatcctgtg attttacatt
-     ttacttatcg ttaatcgaat gtatatctat ttaatctgct tttcttgtct aataaatata
-     tatgtaaagt acgctttttg ttgaaatttt ttaaaccttt gtttattttt ttttcttcat
-     tccgtaactc ttctaccttc tttatttact ttctaaaatc caaatacaaa acataaaaat
-     aaataaacac agagtaaatt cccaaattat tccatcatta aaagatacga ggcgcgtgta
-     agttacaggc aagcgatccg tcctaagaaa ccattattat catgacatta acctataaaa
-     ataggcgtat cacgaggccc tttcgtc
-//
diff --git a/plasmid/resource/example/FRP_1/PRS316.fasta b/plasmid/resource/example/FRP_1/PRS316.fasta
deleted file mode 100644
index e33465983622dfc0c12a4c407740b02c146ecb2b..0000000000000000000000000000000000000000
--- a/plasmid/resource/example/FRP_1/PRS316.fasta
+++ /dev/null
@@ -1,229 +0,0 @@
-ID   PRS316     preliminary; circular DNA; SYN; 4887 BP.
-XX
-AC   U03442; ATCC77145;
-XX
-DT   01-JUL-1993 (Rel. 7, Created)
-DT   01-JUL-1995 (Rel. 12, Last updated, Version 1)
-XX
-DE   Saccharomyces/E.coli phagemid vector pRS316 - complete.
-XX
-KW   cloning vector.
-XX
-OS   Cloning vector
-OC   Artificial sequences; Cloning vehicles.
-XX
-RN   [1]
-RP   1-4887
-RC   pRSS56 from pBluescript KS+ &amp; BlueScribe
-RC   pRS303 from pRSS56 &amp; HIS3 gene
-RC   pRS304 from pRSS56 &amp; TRP1 gene
-RC   pRS305 from pRSS56 &amp; LEU2 gene
-RC   pRS306 from pRSS56 &amp; URA3 gene
-RC   pUC19-CEN6:32 from pUC19 &amp; CEN6
-RC   pRSS83 from pUC19-CEN6:32 &amp; pAB9, ARS
-RC   pRSS84 from pRSS83
-RC   pRS313 from pRS303 &amp; pRSS84
-RC   pRS314 from pRS304 &amp; pRSS84
-RC   pRS315 from pRS305 &amp; pRSS84
-RC   pRS316 from pRS306 &amp; pRSS84
-RC   pRSS93 from pRSS84 &amp; pYCF5
-RA   Sikorski R.S., Hieter P.;
-RT   "A system of shuttle vectors and yeast host strains designed for
-RT   efficient manipulation of DNA in Saccharomyces cerevisiae";
-RL   Genetics 122:19-27(1989).
-XX
-RN   [2]
-RC   from YEp24
-RC   from YCp50
-RC   from YIp5
-RA   Strathern J.N., Higgins D.R.;
-RT   "Recovery of plasmids from yeast into Escherichia coli: shuttle
-RT   vectors";
-RL   Meth. Enzymol. 194:319-329(1991).
-XX
-RN   [3]
-RC   pRS316
-RA   Stillman D.J.;
-RT   ;
-RL   Submitted (10-NOV-1993) by:
-RL   Stillman D.J., Dept. of Cellular, Viral and Molecular Biology,
-RL   University of Utah Medical Center, Salt Lake City, UT 84132 USA.
-XX
-CC   One of a series of pBluescript-based centromere vectors (ATCC 77142
-CC   ATCC 77145, ATCC 77157 to ATCC 77158) differing in the yeast
-CC   selectable marker gene. [1]
-CC   The order of the major features in this plasmid is: URA3 - f1 ori
-CC   (NaeI) - T7 promoter - lacZ'/MCS - T3 promoter - pMB1 ori - bla -
-CC   CEN6 - ARSH4.
-CC   A fragment (1.112 kb) containing the URA3 gene was inserted into the
-CC   NdeI site and a cassette containing CEN6 and the ARS associated with
-CC   histone 4 (ARSH4) was inserted into the AatII site of pRSS56. All ends
-CC   were blunted.
-CC   pRSS56, constructed by ligating a PvuI fragment (bp 498-2412) of
-CC   pBluescript KS+ to a PvuI fragment (bp 2850-730) of pBS(+), contains
-CC   the KS MCS from pBluescript KS+ and the unique NdeI and AatII sites
-CC   between bla and f1 origin of pBS(+). [1]
-CC   YC-type centromere vector permitting visual detection of recombinants
-CC   and production of ssDNA in E.coli.  Contains promoters for in vitro
-CC   RNA synthesis, priming sites useful for sequencing, and encodes the
-CC   lacZ alpha (lacZ') peptide. [1]
-CC   Useful in plasmid shuffle experiments.
-CC   Restriction digests of the clone give the following sizes (kb):
-CC   EcoRI--5.0; BamHI--5.0, PvuII--4.4, 0.5. (ATCC staff)
-CC   Medium is 1227 LB plus ampicillin.
-CC   NCBI gi: 417973
-CC   NM (pRS316)
-CC   CM (yes)
-CC   NA (ds-DNA)
-CC   TP (circular)
-CC   ST ()
-CC   TY (phagemid)
-CC   SP (ATCC)
-CC   HO (E.coli HB101)(Saccharomyces cerevisiae)(E.coli)
-CC   HO (Saccharomyces cerevisiae YPH499)(Saccharomyces cerevisiae YPH500)
-CC   HO (Saccharomyces cerevisiae YPH501)
-CC   CP ()
-CC   FN (cloning)
-CC   SE ()
-CC   PA ()
-CC   BR (pRS314)(pRS315)(pRS313)
-CC   OF ()
-CC   OR ()
-XX
-FH   Key             Location/Qualifiers
-FH
-FT   misc_feature    0..0
-FT                   /note="1. pUC19 HincII 2686bp 432..432
-FT                   2. yeast MboII-MboII 125bp, CEN6
-FT                   -&gt; pUC19-CEN6:32 2811bp
-FT                   1. pUC8 BamHI 2665bp 241..241
-FT                   2. yeast Sau3AI-Sau3AI 374bp, histone H4 ARS/ARSH4
-FT                   -&gt; pAB9 3039bp
-FT                   1. pUC19-CEN6:32 EcoRI-ScaI 1908bp 397..-..2180, CEN6
-FT                   2. pAB9 ScaI-EcoRI 1314bp 231..-..1171,
-FT                   \ histone H4 ARS/ARSH4
-FT                   -&gt; pRSS83 3222bp [in MCS]
-FT                   1. pRSS83 remove SmaI-XbaI 9bp, MCS/pUC19 415..424
-FT                   \ 3213bp
-FT                   Klenow:Klenow
-FT                   -&gt; pRSS84 3213bp
-FT                   1. pRSS84 HincII-PstI, CEN6/ARSH4
-FT                   \ pUC19 440..2686..432
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   2. pRS306 AatII 4373bp 848..848
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   -&gt; pRS316 4887bp"
-FT   misc_binding    0..0
-FT                   /note="MCS KpnI-ApaI-XhoI-SalI-ClaI-HindIII-EcoRV-
-FT                   EcoRI-PstI-SmaI-
-FT                   BamHI-SpeI-XbaI-EagI-NotI-BstXI-SacII-SacI"
-FT   misc_binding    0..0
-FT                   /note="SIT unique KpnI-ApaI-XhoI-SalI-ClaI-EcoRI-
-FT                   PstI-SmaI-BamHI-SpeI-EagI-NotI-SacII-SacI-NaeI"
-FT   rep_origin      0..0
-FT                   /note="ORI E. coli pMB1 (ColE1 and pBR322)"
-FT   rep_origin      0..0
-FT                   /note="ORI bacteriophage f1"
-FT   promoter        0..0
-FT                   /note="PRO E. coli lac gene"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T3"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T7"
-FT   CDS             0..0
-FT                   /note="GEN E. coli beta-galactosidase gene (lacZ');
-FT                   reporter gene"
-FT   CDS             0..0
-FT                   /note="ANT E. coli beta-lactamase gene (bla)
-FT                   ampicillin resistance gene (apr/amp)"
-FT   CDS             0..0
-FT                   /note="ANT yeast URA3 gene"
-FT   rep_origin      0..0
-FT                   /note="ORI yeast ARSH4"
-FT   misc_feature    0..0
-FT                   /note="yeast centromere CEN6"
-XX
-SQ   Sequence 4887 BP; 1361 A; 1069 C; 1167 G; 1290 T; 0 other;
-     tcgcgcgttt cggtgatgac ggtgaaaacc tctgacacat gcagctcccg gagacggtca
-     cagcttgtct gtaagcggat gccgggagca gacaagcccg tcagggcgcg tcagcgggtg
-     ttggcgggtg tcggggctgg cttaactatg cggcatcaga gcagattgta ctgagagtgc
-     accacgcttt tcaattcaat tcatcatttt ttttttattc ttttttttga tttcggtttc
-     tttgaaattt ttttgattcg gtaatctccg aacagaagga agaacgaagg aaggagcaca
-     gacttagatt ggtatatata cgcatatgta gtgttgaaga aacatgaaat tgcccagtat
-     tcttaaccca actgcacaga acaaaaacct gcaggaaacg aagataaatc atgtcgaaag
-     ctacatataa ggaacgtgct gctactcatc ctagtcctgt tgctgccaag ctatttaata
-     tcatgcacga aaagcaaaca aacttgtgtg cttcattgga tgttcgtacc accaaggaat
-     tactggagtt agttgaagca ttaggtccca aaatttgttt actaaaaaca catgtggata
-     tcttgactga tttttccatg gagggcacag ttaagccgct aaaggcatta tccgccaagt
-     acaatttttt actcttcgaa gacagaaaat ttgctgacat tggtaataca gtcaaattgc
-     agtactctgc gggtgtatac agaatagcag aatgggcaga cattacgaat gcacacggtg
-     tggtgggccc aggtattgtt agcggtttga agcaggcggc agaagaagta acaaaggaac
-     ctagaggcct tttgatgtta gcagaattgt catgcaaggg ctccctatct actggagaat
-     atactaaggg tactgttgac attgcgaaga gcgacaaaga ttttgttatc ggctttattg
-     ctcaaagaga catgggtgga agagatgaag gttacgattg gttgattatg acacccggtg
-     tgggtttaga tgacaaggga gacgcattgg gtcaacagta tagaaccgtg gatgatgtgg
-     tctctacagg atctgacatt attattgttg gaagaggact atttgcaaag ggaagggatg
-     ctaaggtaga gggtgaacgt tacagaaaag caggctggga agcatatttg agaagatgcg
-     gccagcaaaa ctaaaaaact gtattataag taaatgcatg tatactaaac tcacaaatta
-     gagcttcaat ttaattatat cagttattac cctgcggtgt gaaataccgc acagatgcgt
-     aaggagaaaa taccgcatca ggaaattgta aacgttaata ttttgttaaa attcgcgtta
-     aatttttgtt aaatcagctc attttttaac caataggccg aaatcggcaa aatcccttat
-     aaatcaaaag aatagaccga gatagggttg agtgttgttc cagtttggaa caagagtcca
-     ctattaaaga acgtggactc caacgtcaaa gggcgaaaaa ccgtctatca gggcgatggc
-     ccactacgtg aaccatcacc ctaatcaagt tttttggggt cgaggtgccg taaagcacta
-     aatcggaacc ctaaagggag cccccgattt agagcttgac ggggaaagcc ggcgaacgtg
-     gcgagaaagg aagggaagaa agcgaaagga gcgggcgcta gggcgctggc aagtgtagcg
-     gtcacgctgc gcgtaaccac cacacccgcc gcgcttaatg cgccgctaca gggcgcgtcg
-     cgccattcgc cattcaggct gcgcaactgt tgggaagggc gatcggtgcg ggcctcttcg
-     ctattacgcc agctggcgaa ggggggatgt gctgcaaggc gattaagttg ggtaacgcca
-     gggttttccc agtcacgacg ttgtaaaacg acggccagtg aattgtaata cgactcacta
-     tagggcgaat tggagctcca ccgcggtggc ggccgctcta gaactagtgg atcccccggg
-     ctgcaggaat tcgatatcaa gcttatcgat accgtcgacc tcgagggggg gcccggtacc
-     cagcttttgt tccctttagt gagggttaat tccgagcttg gcgtaatcat ggtcatagct
-     gtttcctgtg tgaaattgtt atccgctcac aattccacac aacataggag ccggaagcat
-     aaagtgtaaa gcctggggtg cctaatgagt gaggtaactc acattaattg cgttgcgctc
-     actgcccgct ttccagtcgg gaaacctgtc gtgccagctg cattaatgaa tcggccaacg
-     cgcggggaga ggcggtttgc gtattgggcg ctcttccgct tcctcgctca ctgactcgct
-     gcgctcggtc gttcggctgc ggcgagcggt atcagctcac tcaaaggcgg taatacggtt
-     atccacagaa tcaggggata acgcaggaaa gaacatgtga gcaaaaggcc agcaaaaggc
-     caggaaccgt aaaaaggccg cgttgctggc gtttttccat aggctcggcc cccctgacga
-     gcatcacaaa aatcgacgct caagtcagag gtggcgaaac ccgacaggac tataaagata
-     ccaggcgttc ccccctggaa gctccctcgt gcgctctcct gttccgaccc tgccgcttac
-     cggatacctg tccgcctttc tcccttcggg aagcgtggcg ctttctcaat gctcacgctg
-     taggtatctc agttcggtgt aggtcgttcg ctccaagctg ggctgtgtgc acgaaccccc
-     cgttcagccc gaccgctgcg ccttatccgg taactatcgt cttgagtcca acccggtaag
-     acacgactta tcgccactgg cagcagccac tggtaacagg attagcagag cgaggtatgt
-     aggcggtgct acagagttct tgaagtggtg gcctaactac ggctacacta gaaggacagt
-     atttggtatc tgcgctctgc tgaagccagt taccttcgga aaaagagttg gtagctcttg
-     atccggcaaa caaaccaccg ctggtagcgg tggttttttt gtttgcaagc agcagattac
-     gcgcagaaaa aaaggatctc aagaagatcc tttgatcttt tctacggggt ctgacgctca
-     gtggaacgaa aactcacgtt aagggatttt ggtcatgaga ttatcaaaaa ggatcttcac
-     ctagatcctt ttaaattaaa aatgaagttt taaatcaatc taaagtatat atgagtaaac
-     ttggtctgac agttaccaat gcttaatcag tgaggcacct atctcagcga tctgtctatt
-     tcgttcatcc atagttgcct gactgcccgt cgtgtagata actacgatac gggagggctt
-     accatctggc cccagtgctg caatgatacc gcgagaccca cgctcaccgg ctccagattt
-     atcagcaata aaccagccag ccggaagggc cgagcgcaga agtggtcctg caactttatc
-     cgcctccatc cagtctatta attgttgccg ggaagctaga gtaagtagtt cgccagttaa
-     tagtttgcgc aacgttgttg ccattgctac aggcatcgtg gtgtcacgct cgtcgtttgg
-     tatggcttca ttcagctccg gttcccaacg atcaaggcga gttacatgat cccccatgtt
-     gtgaaaaaaa gcggttagct ccttcggtcc tccgatcgtt gtcagaagta agttggccgc
-     agtgttatca ctcatggtta tggcagcact gcataattct cttactgtca tgccatccgt
-     aagatgcttt tctgtgactg gtgagtactc aaccaagtca ttctgagaat agtgtatgcg
-     gcgaccgagt tgctcttgcc cggcgtcaat acgggataat accgcgccac atagcagaac
-     tttaaaagtg ctcatcattg gaaaacgttc ttcggggcga aaactctcaa ggatcttacc
-     gctgttgaga tccagttcga tgtaacccac tcgtgcaccc aactgatctt cagcatcttt
-     tactttcacc agcgtttctg ggtgagcaaa aacaggaagg caaaatgccg caaaaaaggg
-     aataagggcg acacggaaat gttgaatact catactcttc ctttttcaat attattgaag
-     catttatcag ggttattgtc tcatgagcgg atacatattt gaatgtattt agaaaaataa
-     acaaataggg gttccgcgca catttccccg aaaagtgcca cctgggtcct tttcatcacg
-     tgctataaaa ataattataa tttaaatttt ttaatataaa tatataaatt aaaaatagaa
-     agtaaaaaaa gaaattaaag aaaaaatagt ttttgttttc cgaagatgta aaagactcta
-     gggggatcgc caacaaatac taccttttat cttgctcttc ctgctctcag gtattaatgc
-     cgaattgttt catcttgtct gtgtagaaga ccacacacga aaatcctgtg attttacatt
-     ttacttatcg ttaatcgaat gtatatctat ttaatctgct tttcttgtct aataaatata
-     tatgtaaagt acgctttttg ttgaaatttt ttaaaccttt gtttattttt ttttcttcat
-     tccgtaactc ttctaccttc tttatttact ttctaaaatc caaatacaaa acataaaaat
-     aaataaacac agagtaaatt cccaaattat tccatcatta aaagatacga ggcgcgtgta
-     agttacaggc aagcgatccg tcctaagaaa ccattattat catgacatta acctataaaa
-     ataggcgtat cacgaggccc tttcgtc
-//
diff --git a/plasmid/resource/example/FRP_1/PRS316.gb b/plasmid/resource/example/FRP_1/PRS316.gb
deleted file mode 100644
index e33465983622dfc0c12a4c407740b02c146ecb2b..0000000000000000000000000000000000000000
--- a/plasmid/resource/example/FRP_1/PRS316.gb
+++ /dev/null
@@ -1,229 +0,0 @@
-ID   PRS316     preliminary; circular DNA; SYN; 4887 BP.
-XX
-AC   U03442; ATCC77145;
-XX
-DT   01-JUL-1993 (Rel. 7, Created)
-DT   01-JUL-1995 (Rel. 12, Last updated, Version 1)
-XX
-DE   Saccharomyces/E.coli phagemid vector pRS316 - complete.
-XX
-KW   cloning vector.
-XX
-OS   Cloning vector
-OC   Artificial sequences; Cloning vehicles.
-XX
-RN   [1]
-RP   1-4887
-RC   pRSS56 from pBluescript KS+ &amp; BlueScribe
-RC   pRS303 from pRSS56 &amp; HIS3 gene
-RC   pRS304 from pRSS56 &amp; TRP1 gene
-RC   pRS305 from pRSS56 &amp; LEU2 gene
-RC   pRS306 from pRSS56 &amp; URA3 gene
-RC   pUC19-CEN6:32 from pUC19 &amp; CEN6
-RC   pRSS83 from pUC19-CEN6:32 &amp; pAB9, ARS
-RC   pRSS84 from pRSS83
-RC   pRS313 from pRS303 &amp; pRSS84
-RC   pRS314 from pRS304 &amp; pRSS84
-RC   pRS315 from pRS305 &amp; pRSS84
-RC   pRS316 from pRS306 &amp; pRSS84
-RC   pRSS93 from pRSS84 &amp; pYCF5
-RA   Sikorski R.S., Hieter P.;
-RT   "A system of shuttle vectors and yeast host strains designed for
-RT   efficient manipulation of DNA in Saccharomyces cerevisiae";
-RL   Genetics 122:19-27(1989).
-XX
-RN   [2]
-RC   from YEp24
-RC   from YCp50
-RC   from YIp5
-RA   Strathern J.N., Higgins D.R.;
-RT   "Recovery of plasmids from yeast into Escherichia coli: shuttle
-RT   vectors";
-RL   Meth. Enzymol. 194:319-329(1991).
-XX
-RN   [3]
-RC   pRS316
-RA   Stillman D.J.;
-RT   ;
-RL   Submitted (10-NOV-1993) by:
-RL   Stillman D.J., Dept. of Cellular, Viral and Molecular Biology,
-RL   University of Utah Medical Center, Salt Lake City, UT 84132 USA.
-XX
-CC   One of a series of pBluescript-based centromere vectors (ATCC 77142
-CC   ATCC 77145, ATCC 77157 to ATCC 77158) differing in the yeast
-CC   selectable marker gene. [1]
-CC   The order of the major features in this plasmid is: URA3 - f1 ori
-CC   (NaeI) - T7 promoter - lacZ'/MCS - T3 promoter - pMB1 ori - bla -
-CC   CEN6 - ARSH4.
-CC   A fragment (1.112 kb) containing the URA3 gene was inserted into the
-CC   NdeI site and a cassette containing CEN6 and the ARS associated with
-CC   histone 4 (ARSH4) was inserted into the AatII site of pRSS56. All ends
-CC   were blunted.
-CC   pRSS56, constructed by ligating a PvuI fragment (bp 498-2412) of
-CC   pBluescript KS+ to a PvuI fragment (bp 2850-730) of pBS(+), contains
-CC   the KS MCS from pBluescript KS+ and the unique NdeI and AatII sites
-CC   between bla and f1 origin of pBS(+). [1]
-CC   YC-type centromere vector permitting visual detection of recombinants
-CC   and production of ssDNA in E.coli.  Contains promoters for in vitro
-CC   RNA synthesis, priming sites useful for sequencing, and encodes the
-CC   lacZ alpha (lacZ') peptide. [1]
-CC   Useful in plasmid shuffle experiments.
-CC   Restriction digests of the clone give the following sizes (kb):
-CC   EcoRI--5.0; BamHI--5.0, PvuII--4.4, 0.5. (ATCC staff)
-CC   Medium is 1227 LB plus ampicillin.
-CC   NCBI gi: 417973
-CC   NM (pRS316)
-CC   CM (yes)
-CC   NA (ds-DNA)
-CC   TP (circular)
-CC   ST ()
-CC   TY (phagemid)
-CC   SP (ATCC)
-CC   HO (E.coli HB101)(Saccharomyces cerevisiae)(E.coli)
-CC   HO (Saccharomyces cerevisiae YPH499)(Saccharomyces cerevisiae YPH500)
-CC   HO (Saccharomyces cerevisiae YPH501)
-CC   CP ()
-CC   FN (cloning)
-CC   SE ()
-CC   PA ()
-CC   BR (pRS314)(pRS315)(pRS313)
-CC   OF ()
-CC   OR ()
-XX
-FH   Key             Location/Qualifiers
-FH
-FT   misc_feature    0..0
-FT                   /note="1. pUC19 HincII 2686bp 432..432
-FT                   2. yeast MboII-MboII 125bp, CEN6
-FT                   -&gt; pUC19-CEN6:32 2811bp
-FT                   1. pUC8 BamHI 2665bp 241..241
-FT                   2. yeast Sau3AI-Sau3AI 374bp, histone H4 ARS/ARSH4
-FT                   -&gt; pAB9 3039bp
-FT                   1. pUC19-CEN6:32 EcoRI-ScaI 1908bp 397..-..2180, CEN6
-FT                   2. pAB9 ScaI-EcoRI 1314bp 231..-..1171,
-FT                   \ histone H4 ARS/ARSH4
-FT                   -&gt; pRSS83 3222bp [in MCS]
-FT                   1. pRSS83 remove SmaI-XbaI 9bp, MCS/pUC19 415..424
-FT                   \ 3213bp
-FT                   Klenow:Klenow
-FT                   -&gt; pRSS84 3213bp
-FT                   1. pRSS84 HincII-PstI, CEN6/ARSH4
-FT                   \ pUC19 440..2686..432
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   2. pRS306 AatII 4373bp 848..848
-FT                   T4 DNA polymerase:T4 DNA polymerase
-FT                   -&gt; pRS316 4887bp"
-FT   misc_binding    0..0
-FT                   /note="MCS KpnI-ApaI-XhoI-SalI-ClaI-HindIII-EcoRV-
-FT                   EcoRI-PstI-SmaI-
-FT                   BamHI-SpeI-XbaI-EagI-NotI-BstXI-SacII-SacI"
-FT   misc_binding    0..0
-FT                   /note="SIT unique KpnI-ApaI-XhoI-SalI-ClaI-EcoRI-
-FT                   PstI-SmaI-BamHI-SpeI-EagI-NotI-SacII-SacI-NaeI"
-FT   rep_origin      0..0
-FT                   /note="ORI E. coli pMB1 (ColE1 and pBR322)"
-FT   rep_origin      0..0
-FT                   /note="ORI bacteriophage f1"
-FT   promoter        0..0
-FT                   /note="PRO E. coli lac gene"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T3"
-FT   promoter        0..0
-FT                   /note="PRO bacteriophage T7"
-FT   CDS             0..0
-FT                   /note="GEN E. coli beta-galactosidase gene (lacZ');
-FT                   reporter gene"
-FT   CDS             0..0
-FT                   /note="ANT E. coli beta-lactamase gene (bla)
-FT                   ampicillin resistance gene (apr/amp)"
-FT   CDS             0..0
-FT                   /note="ANT yeast URA3 gene"
-FT   rep_origin      0..0
-FT                   /note="ORI yeast ARSH4"
-FT   misc_feature    0..0
-FT                   /note="yeast centromere CEN6"
-XX
-SQ   Sequence 4887 BP; 1361 A; 1069 C; 1167 G; 1290 T; 0 other;
-     tcgcgcgttt cggtgatgac ggtgaaaacc tctgacacat gcagctcccg gagacggtca
-     cagcttgtct gtaagcggat gccgggagca gacaagcccg tcagggcgcg tcagcgggtg
-     ttggcgggtg tcggggctgg cttaactatg cggcatcaga gcagattgta ctgagagtgc
-     accacgcttt tcaattcaat tcatcatttt ttttttattc ttttttttga tttcggtttc
-     tttgaaattt ttttgattcg gtaatctccg aacagaagga agaacgaagg aaggagcaca
-     gacttagatt ggtatatata cgcatatgta gtgttgaaga aacatgaaat tgcccagtat
-     tcttaaccca actgcacaga acaaaaacct gcaggaaacg aagataaatc atgtcgaaag
-     ctacatataa ggaacgtgct gctactcatc ctagtcctgt tgctgccaag ctatttaata
-     tcatgcacga aaagcaaaca aacttgtgtg cttcattgga tgttcgtacc accaaggaat
-     tactggagtt agttgaagca ttaggtccca aaatttgttt actaaaaaca catgtggata
-     tcttgactga tttttccatg gagggcacag ttaagccgct aaaggcatta tccgccaagt
-     acaatttttt actcttcgaa gacagaaaat ttgctgacat tggtaataca gtcaaattgc
-     agtactctgc gggtgtatac agaatagcag aatgggcaga cattacgaat gcacacggtg
-     tggtgggccc aggtattgtt agcggtttga agcaggcggc agaagaagta acaaaggaac
-     ctagaggcct tttgatgtta gcagaattgt catgcaaggg ctccctatct actggagaat
-     atactaaggg tactgttgac attgcgaaga gcgacaaaga ttttgttatc ggctttattg
-     ctcaaagaga catgggtgga agagatgaag gttacgattg gttgattatg acacccggtg
-     tgggtttaga tgacaaggga gacgcattgg gtcaacagta tagaaccgtg gatgatgtgg
-     tctctacagg atctgacatt attattgttg gaagaggact atttgcaaag ggaagggatg
-     ctaaggtaga gggtgaacgt tacagaaaag caggctggga agcatatttg agaagatgcg
-     gccagcaaaa ctaaaaaact gtattataag taaatgcatg tatactaaac tcacaaatta
-     gagcttcaat ttaattatat cagttattac cctgcggtgt gaaataccgc acagatgcgt
-     aaggagaaaa taccgcatca ggaaattgta aacgttaata ttttgttaaa attcgcgtta
-     aatttttgtt aaatcagctc attttttaac caataggccg aaatcggcaa aatcccttat
-     aaatcaaaag aatagaccga gatagggttg agtgttgttc cagtttggaa caagagtcca
-     ctattaaaga acgtggactc caacgtcaaa gggcgaaaaa ccgtctatca gggcgatggc
-     ccactacgtg aaccatcacc ctaatcaagt tttttggggt cgaggtgccg taaagcacta
-     aatcggaacc ctaaagggag cccccgattt agagcttgac ggggaaagcc ggcgaacgtg
-     gcgagaaagg aagggaagaa agcgaaagga gcgggcgcta gggcgctggc aagtgtagcg
-     gtcacgctgc gcgtaaccac cacacccgcc gcgcttaatg cgccgctaca gggcgcgtcg
-     cgccattcgc cattcaggct gcgcaactgt tgggaagggc gatcggtgcg ggcctcttcg
-     ctattacgcc agctggcgaa ggggggatgt gctgcaaggc gattaagttg ggtaacgcca
-     gggttttccc agtcacgacg ttgtaaaacg acggccagtg aattgtaata cgactcacta
-     tagggcgaat tggagctcca ccgcggtggc ggccgctcta gaactagtgg atcccccggg
-     ctgcaggaat tcgatatcaa gcttatcgat accgtcgacc tcgagggggg gcccggtacc
-     cagcttttgt tccctttagt gagggttaat tccgagcttg gcgtaatcat ggtcatagct
-     gtttcctgtg tgaaattgtt atccgctcac aattccacac aacataggag ccggaagcat
-     aaagtgtaaa gcctggggtg cctaatgagt gaggtaactc acattaattg cgttgcgctc
-     actgcccgct ttccagtcgg gaaacctgtc gtgccagctg cattaatgaa tcggccaacg
-     cgcggggaga ggcggtttgc gtattgggcg ctcttccgct tcctcgctca ctgactcgct
-     gcgctcggtc gttcggctgc ggcgagcggt atcagctcac tcaaaggcgg taatacggtt
-     atccacagaa tcaggggata acgcaggaaa gaacatgtga gcaaaaggcc agcaaaaggc
-     caggaaccgt aaaaaggccg cgttgctggc gtttttccat aggctcggcc cccctgacga
-     gcatcacaaa aatcgacgct caagtcagag gtggcgaaac ccgacaggac tataaagata
-     ccaggcgttc ccccctggaa gctccctcgt gcgctctcct gttccgaccc tgccgcttac
-     cggatacctg tccgcctttc tcccttcggg aagcgtggcg ctttctcaat gctcacgctg
-     taggtatctc agttcggtgt aggtcgttcg ctccaagctg ggctgtgtgc acgaaccccc
-     cgttcagccc gaccgctgcg ccttatccgg taactatcgt cttgagtcca acccggtaag
-     acacgactta tcgccactgg cagcagccac tggtaacagg attagcagag cgaggtatgt
-     aggcggtgct acagagttct tgaagtggtg gcctaactac ggctacacta gaaggacagt
-     atttggtatc tgcgctctgc tgaagccagt taccttcgga aaaagagttg gtagctcttg
-     atccggcaaa caaaccaccg ctggtagcgg tggttttttt gtttgcaagc agcagattac
-     gcgcagaaaa aaaggatctc aagaagatcc tttgatcttt tctacggggt ctgacgctca
-     gtggaacgaa aactcacgtt aagggatttt ggtcatgaga ttatcaaaaa ggatcttcac
-     ctagatcctt ttaaattaaa aatgaagttt taaatcaatc taaagtatat atgagtaaac
-     ttggtctgac agttaccaat gcttaatcag tgaggcacct atctcagcga tctgtctatt
-     tcgttcatcc atagttgcct gactgcccgt cgtgtagata actacgatac gggagggctt
-     accatctggc cccagtgctg caatgatacc gcgagaccca cgctcaccgg ctccagattt
-     atcagcaata aaccagccag ccggaagggc cgagcgcaga agtggtcctg caactttatc
-     cgcctccatc cagtctatta attgttgccg ggaagctaga gtaagtagtt cgccagttaa
-     tagtttgcgc aacgttgttg ccattgctac aggcatcgtg gtgtcacgct cgtcgtttgg
-     tatggcttca ttcagctccg gttcccaacg atcaaggcga gttacatgat cccccatgtt
-     gtgaaaaaaa gcggttagct ccttcggtcc tccgatcgtt gtcagaagta agttggccgc
-     agtgttatca ctcatggtta tggcagcact gcataattct cttactgtca tgccatccgt
-     aagatgcttt tctgtgactg gtgagtactc aaccaagtca ttctgagaat agtgtatgcg
-     gcgaccgagt tgctcttgcc cggcgtcaat acgggataat accgcgccac atagcagaac
-     tttaaaagtg ctcatcattg gaaaacgttc ttcggggcga aaactctcaa ggatcttacc
-     gctgttgaga tccagttcga tgtaacccac tcgtgcaccc aactgatctt cagcatcttt
-     tactttcacc agcgtttctg ggtgagcaaa aacaggaagg caaaatgccg caaaaaaggg
-     aataagggcg acacggaaat gttgaatact catactcttc ctttttcaat attattgaag
-     catttatcag ggttattgtc tcatgagcgg atacatattt gaatgtattt agaaaaataa
-     acaaataggg gttccgcgca catttccccg aaaagtgcca cctgggtcct tttcatcacg
-     tgctataaaa ataattataa tttaaatttt ttaatataaa tatataaatt aaaaatagaa
-     agtaaaaaaa gaaattaaag aaaaaatagt ttttgttttc cgaagatgta aaagactcta
-     gggggatcgc caacaaatac taccttttat cttgctcttc ctgctctcag gtattaatgc
-     cgaattgttt catcttgtct gtgtagaaga ccacacacga aaatcctgtg attttacatt
-     ttacttatcg ttaatcgaat gtatatctat ttaatctgct tttcttgtct aataaatata
-     tatgtaaagt acgctttttg ttgaaatttt ttaaaccttt gtttattttt ttttcttcat
-     tccgtaactc ttctaccttc tttatttact ttctaaaatc caaatacaaa acataaaaat
-     aaataaacac agagtaaatt cccaaattat tccatcatta aaagatacga ggcgcgtgta
-     agttacaggc aagcgatccg tcctaagaaa ccattattat catgacatta acctataaaa
-     ataggcgtat cacgaggccc tttcgtc
-//
diff --git a/plasmid/resource/example/FRP_1/PRS316.png b/plasmid/resource/example/FRP_1/PRS316.png
deleted file mode 100644
index b2b62aa7f5164c0d9f8bea5b1952f08deba940ec..0000000000000000000000000000000000000000
Binary files a/plasmid/resource/example/FRP_1/PRS316.png and /dev/null differ
diff --git a/plasmid/resource/example/FRP_1/PRS316.tiff b/plasmid/resource/example/FRP_1/PRS316.tiff
deleted file mode 100644
index 6c9e458b07e345d71c93310a2176ae94a9b1f367..0000000000000000000000000000000000000000
Binary files a/plasmid/resource/example/FRP_1/PRS316.tiff and /dev/null differ
diff --git a/plasmid/resource/example/SAMPLE-PLASMID-template.xlsx b/plasmid/resource/example/SAMPLE-PLASMID-template.xlsx
deleted file mode 100644
index fc22660c5459a37c77647c9fa956be5c98007af2..0000000000000000000000000000000000000000
Binary files a/plasmid/resource/example/SAMPLE-PLASMID-template.xlsx and /dev/null differ
diff --git a/plasmid/resource/example/sample-import.tsv b/plasmid/resource/example/sample-import.tsv
deleted file mode 100644
index a7366f63b36fa2ea2272f64e42284931b8c0c67f..0000000000000000000000000000000000000000
--- a/plasmid/resource/example/sample-import.tsv
+++ /dev/null
@@ -1 +0,0 @@
-[PLASMID_BOX]															
# Comments must be located after the type declaration ('[TYPE]').															
"# The ""container"" and ""parent"" columns are optional, only one should be specified. They should contain a sample identifier, e.g. /SPACE/SAMPLE_1"															
"# If ""container"" sample is provided, the registered sample will become a ""component"" of it."															
"# If ""parent"" sample is provided, the registered sample will become a ""child"" of it."															
"# The ""experiment"" column is optional, cannot be specified for shared samples and should contain experiment identifier, e.g. /SPACE/PROJECT/EXP_1"															
identifier	container	parent	experiment	BOX_SIZE											
BOX_1			/YEAST_LAB/PLASMIDS/EXP_1	81_BOX											
BOX_2			/YEAST_LAB/PLASMIDS/EXP_1	96_WELL											
[PLASMID]															
identifier	container	parent	experiment	OWNER	OWNER_NUMBER	PLASMID_NAME	BACKBONE	DERIVATIVE_OF	BACTERIAL_ANTIBIOTIC_RESISTANCE	YEAST_MARKER	OTHER_MARKER	FLANKING_RESTRICTION_ENZYMES	COMMENTS	ROW	COLUMN
FRP_1	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	FABIAN_RUDOLF	pFR1	pBluescript II KS+	pBluescript_II_KS_PLUS		bla				original Bluescript plasmid	A	0
FRP_27	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	10	pGal416N	pRS41y		bla	URA3			removed NaeI site (NgoMIV,Mung Bean Nuclease)	A	0
[PLASMID]															
identifier	container	parent	experiment	OWNER	OWNER_NUMBER	PLASMID_NAME	BACKBONE	DERIVATIVE_OF	BACTERIAL_ANTIBIOTIC_RESISTANCE	YEAST_MARKER	OTHER_MARKER	FLANKING_RESTRICTION_ENZYMES	COMMENTS	ROW	COLUMN
FRP_2	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG41	pBS-TetO-op	pBluescript_II_KS_PLUS		bla					A	1
FRP_3	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG42	pBS-LexA-op	pBluescript_II_KS_PLUS		bla					A	2
FRP_4	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG43	pBS-TetO2-box	pBluescript_II_KS_PLUS		bla					A	3
FRP_5	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG44	pBS-miniCyc1prom	pBluescript_II_KS_PLUS		bla					A	4
FRP_6	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG45	pBS-LexA-DNA-BD	pBluescript_II_KS_PLUS		bla				SV40 NLS	A	5
FRP_7	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG46	pBS-tTA-DNA-BD	pBluescript_II_KS_PLUS		bla				SV40 NLS	A	6
FRP_8	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG47	pBS-VP16-AD	pBluescript_II_KS_PLUS		bla				HA Geneva	A	7
FRP_9	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG48	pBS-B42-AD	pBluescript_II_KS_PLUS		bla				HA Geneva	A	8
FRP_10	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG49	pBS-gal4-AD	pBluescript_II_KS_PLUS		bla					A	9
FRP_11	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG50	pBS-GST	pBluescript_II_KS_PLUS		bla					B	1
FRP_12	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG51	pBS-HBD	pBluescript_II_KS_PLUS		bla					B	2
FRP_13	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG52	pBS-SV40NLS	pBluescript_II_KS_PLUS		bla					B	3
FRP_14	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG53	pBS-CAAX-box	pBluescript_II_KS_PLUS		bla					B	4
FRP_15	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG54	pBS-NES	pBluescript_II_KS_PLUS		bla					B	5
FRP_16	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG55	pBS-HA-Geneva	pBluescript_II_KS_PLUS		bla					B	6
FRP_17	BOX_1		/YEAST_LAB/PLASMIDS/EXP_1	ROBERT_GNUGGE	pRG56	pBS-myrAnchor	pBluescript_II_KS_PLUS		bla					B	7
FRP_18	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	1	pBSN-CFP-mKOk	pBSN		bla					C	1
FRP_19	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	2	pBSN-CFP-Citrine	pBSN		bla					C	2
FRP_20	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	3	pBSN-CFP-Citrine cp173	pBSN		bla					C	3
FRP_21	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	4	pBSN-CFP-Bcy1AB-mKOk	pBSN		bla					C	4
FRP_22	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	5	pBSN-CFP-Nte1AB-mKOk	pBSN		bla					C	5
FRP_23	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	6	pBSN-CFP-FHA1AKAR-mKOk	pBSN		bla					C	6
FRP_24	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	7	pBSN-CFP-FHA1TOR-mKOk	pBSN		bla					C	7
FRP_25	BOX_2	BOX_1:FRP_1	/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	8	pBSN	pBluescript_II_KS_PLUS	FRP_1	bla				removed NaeI site (NgoMIV,Mung Bean Nuclease)	C	8
FRP_26	BOX_2		/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	9	pBSN-mTfp1-mKOk	pBSN		bla					C	9
FRP_28	BOX_2	BOX_2:FRP_27	/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	11	pGal416N-CFP-mKOk	pRS41y	FRP_27	bla	URA3				D	1
FRP_29	BOX_2	BOX_2:FRP_27	/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	12	pGal416N-CFP-Bcy1AB-mKOk-1	pRS41y	FRP_27	bla	URA3				D	2
FRP_30	BOX_2	BOX_2:FRP_27	/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	14	pGal416N-CFP-Nte1AB-mKOk-1	pRS41y	FRP_27	bla	URA3				D	3
FRP_31	BOX_2	BOX_2:FRP_27	/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	15	pGal416N-CFP-FHA1TOR-mKOk-1	pRS41y	FRP_27	bla	URA3				D	4
FRP_32	BOX_2	BOX_2:FRP_27	/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	16	pGal416N-CFP-Bcy1AB-Citrine cp173	pRS41y	FRP_27	bla	URA3				D	5
FRP_33	BOX_2	BOX_2:FRP_27	/YEAST_LAB/PLASMIDS/EXP_1	BEATA_MIERZWA	17	pGal416N-CFP-Bcy1AB-Citrine FAKE	pRS41y	FRP_1, FRP_27	bla	URA3				D	6
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/.gitignore b/plasmid/resource/jython-scripts/.gitignore
deleted file mode 100644
index 2f7a3485867a0313d8d3526992315de0dc343192..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/Copy of yeast_batch_import.py
diff --git a/plasmid/resource/jython-scripts/MP-chemicals_links.py b/plasmid/resource/jython-scripts/MP-chemicals_links.py
deleted file mode 100644
index 875e03157f2ec5816cc89f6e73a2a1138a8deea4..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/MP-chemicals_links.py
+++ /dev/null
@@ -1,201 +0,0 @@
-""" 
-Managed Property Script for handling CHEMICALS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(chemicals_list, concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    chemicalPath= "/YEAST_LAB/" + chemicals_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, chemicals_list)
-    if not permId:
-        permId = chemicals_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, chemicals_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, concentration_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for chemical in elements:
-        chemicals_list = chemical.getAttribute(ATR_CODE, "")
-        name = chemical.getAttribute(ATR_NAME,"")
-        concentration_list=chemical.getAttribute(ATR_CONC, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, chemical, chemicals_list)
-        row.setCell(CODE_LABEL, chemicals_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONC_LABEL, concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new chemical,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new chemical relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of chemical, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected chemical relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of chemical sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the chemical sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected chemical relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new chemical element with values from input fields
-           and add it to existing elements.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the chemical element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete chemicals that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        chemicals = input.split(',')
-        for chemical in chemicals:
-            (code, concentration) = _extractCodeAndConcentration(chemical)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(chemical):
-    codeAndConcentration = chemical.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/MP-comments.py b/plasmid/resource/jython-scripts/MP-comments.py
deleted file mode 100644
index c07fc5fabd409144f74d0d548798b99a0b900cb4..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/MP-comments.py
+++ /dev/null
@@ -1,156 +0,0 @@
-from java.util import Date
-
-"""
-Example XML property value handled by this script:
-<root>
-  <commentEntry date="2011-02-20 14:15:28 GMT+01:00" person="buczekp">Here is the 1st  entry text.<commentEntry>
-  <commentEntry date="2011-02-20 14:16:28 GMT+01:00" person="kohleman">Here is the 2nd  entry text - a warning!<commentEntry>
-  <commentEntry date="2011-02-20 14:17:28 GMT+01:00" person="tpylak">Here is the 3rd  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:18:28 GMT+01:00" person="brinn">Here is the 4th  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:19:28 GMT+01:00" person="felmer">Here is the 5th  entry text - a warning!<commentEntry>
-</root>
-"""
-  
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-
-""" labels of table columns and corresponding input fields """
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-  
-""" names of attributes of XML elements for comment entries """
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-  
-""" action labels (shown as button labels in UI) """
-ADD_ACTION_LABEL = 'Add Comment Entry'
-EDIT_ACTION_LABEL = 'Edit'
-DELETE_ACTION_LABEL = 'Delete'
-  
-  
-def configureUI():
-    """Create table builder and add headers of columns."""
-    builder = createTableBuilder()
-    builder.addHeader(DATE_LABEL, 250) # date and comment text values are long, override default width (150)
-    builder.addHeader(PERSON_LABEL)
-    builder.addHeader(COMMENT_TEXT_LABEL, 400)
-      
-    """
-       Extract XML elements from property value to a Python list.
-       For each element (comment entry) add add a row to the table.  
-    """
-    elements = list(propertyConverter().convertToElements(property))
-    for commentEntry in elements:
-        row = builder.addRow()
-        row.setCell(DATE_LABEL, Date(long(commentEntry.getAttribute(DATE_ATTRIBUTE))))
-        row.setCell(PERSON_LABEL, commentEntry.getAttribute(PERSON_ATTRIBUTE))
-        row.setCell(COMMENT_TEXT_LABEL, commentEntry.getData())
-  
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(builder.getTableModel())
-  
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new comment entry,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add a new comment entry:')
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL)\
-                            .setMandatory(True)
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected comment entry,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected comment entry:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL).setMandatory(True)
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(COMMENT_TEXT_LABEL, COMMENT_TEXT_LABEL)
-  
-    """
-       3. delete selected comment entries.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected comment entry?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-  
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new comment entry element with values from input fields
-           and add it to existing elements.
-        """
-        element = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-        """Fill element attributes with appropriate values."""
-        element.addAttribute(DATE_ATTRIBUTE, str(Date().getTime()))            # current date
-        element.addAttribute(PERSON_ATTRIBUTE, action.getPerson().getUserId()) # invoker the action
-        """Retrieve values from input fields filled by user on the client side."""
-
-        """Set comment text as a text element, not an attribute."""
-        element.setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        """Add the new entry to the end of the element list."""
-        elements.append(element)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the comment entry element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        
-        selectedRowId = action.getSelectedRows()[0]
-        xmlUser = elements[selectedRowId].getAttribute(PERSON_ATTRIBUTE)
-        if action.getPerson().getUserId() == xmlUser:
-          elements[selectedRowId].setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        else:
-          raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the entries that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-              xmlUser = elements[rowId].getAttribute(PERSON_ATTRIBUTE)
-              if action.getPerson().getUserId() == xmlUser:
-                elements.pop(rowId)
-              else:
-                raise ValidationException('Comment creator and current user differ:\n' +  str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def _createCommentEntry(comment_text_list):
-    #if comment_text_list is not None:
-    commentEntry = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-                     
-    commentEntry.addAttribute(PERSON_ATTRIBUTE, person.getUserId())
-    commentEntry.addAttribute(DATE_ATTRIBUTE,str(Date().getTime()))
-    commentEntry.setData(comment_text_list)
-    return commentEntry   
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        commentEntry = _createCommentEntry(input)
-        elements.append(commentEntry)
-        property.value = propertyConverter().convertToString(elements)
diff --git a/plasmid/resource/jython-scripts/MP-media_link.py b/plasmid/resource/jython-scripts/MP-media_link.py
deleted file mode 100644
index 962cc1a3e14eb169e3e3b9a473b711a0d452f09c..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/MP-media_link.py
+++ /dev/null
@@ -1,213 +0,0 @@
-""" 
-Managed Property Script for handling MEDIA.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(medias_list, media_concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    mediaPath= "/YEAST_LAB/" + medias_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, medias_list)
-    if not permId:
-        permId = medias_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')       
-    sampleLink = elementFactory().createSampleLink(permId)
-   
-    sampleLink.addAttribute(ATR_CODE, medias_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, media_concentration_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def updateBufferFromBatchInput(medias_list, media_concentration_list):
-    elements = []
-    input = medias_list
-    input2 = media_concentration_list
-    if input is not None:
-       for i, j in zip(medias_list,media_concentration_list): #zip is used to iterate over two lists in parallel
-            sampleLink = _createSampleLink(i.strip(), j.strip())
-            elements.append(sampleLink)
-    return propertyConverter.convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for media in elements:
-        medias_list = media.getAttribute(ATR_CODE, "")
-        name = media.getAttribute(ATR_NAME,"")
-        media_concentration_list=media.getAttribute(ATR_CONC, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, media, medias_list)
-        row.setCell(CODE_LABEL, medias_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONC_LABEL, media_concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new media,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new media relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of media, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected media relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of media sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the media sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected media relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new media element with values from input fields
-           and add it to existing elements.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(medias_list, media_concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the media element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(medias_list, media_concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete medias that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        medias = input.split(',')
-        for media in medias:
-            (code, concentration) = _extractCodeAndConcentration(media)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(media):
-    codeAndConcentration = media.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/MP-plasmid_parents.py b/plasmid/resource/jython-scripts/MP-plasmid_parents.py
deleted file mode 100644
index 935b0eaf9e77d9a345269d618bbdf45bba44b83c..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/MP-plasmid_parents.py
+++ /dev/null
@@ -1,339 +0,0 @@
-""" 
-Managed Property Script for handling PLASMID parents of YEAST samples.
-
-@author: Piotr Buczek
-"""
-
-import re
-
-"""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""input pattern matching one plasmid, e.g.: 
-- 'FRP1 (DEL:URA3)', 
-- 'FRP2 (INT)', 
-- 'FRP3(MOD:URA3)', 
-- 'FRP4'
-"""
-INPUT_PATTERN = """
-                 # no '^': allow whitespace at the beginning
-    ([^ (]*)     # 1st group: match code of a sample, everything before a space or '(' (e.g. 'FRP')
-    (\ *\(       # start of 2nd group (matches an optional relationship type with annotation) 
-                 # any spaces followed by a '('
-    ([^:]*)      # 3rd group: match relationship type, any character but ':' (e.g. 'DEL', 'INT', 'MOD')
-    :?           # optional ':' separator
-    (.*)         # 4th group: match annotation, any text (e.g. 'URA3')
-    \))?         # end of 2nd (optional) group: closing bracket of relationship details
-                 # no '$': allow whitespace at the end
-"""
-
-""" due to some weird jython threading issue, we need to compile the pattern outside the function body """
-inputPattern = re.compile(INPUT_PATTERN, re.VERBOSE)
-
-"""relationship types shortcuts"""
-
-DEL_REL_TYPE = 'DEL'
-INT_REL_TYPE = 'INT'
-MOD_REL_TYPE = 'MOD'
-
-"""tuple of supported relationship types as shortcuts"""
-REL_TYPES = (DEL_REL_TYPE, INT_REL_TYPE, MOD_REL_TYPE)
-"""dictionary from relationship type shortcut to its 'character' representation"""
-REL_TYPE_CHARS = {
-    DEL_REL_TYPE: u'\u0394', # unicode '∆'
-    INT_REL_TYPE: '::', 
-    MOD_REL_TYPE: '_' 
-}
-"""dictionary from relationship type shortcut to its full name/label"""
-REL_TYPE_LABELS = {
-    DEL_REL_TYPE: 'deletion', 
-    INT_REL_TYPE: 'integration', 
-    MOD_REL_TYPE: 'modification' 
-}
-
-REL_TYPE_LABEL_OTHER = '(other)'
-REL_TYPE_LABELS_WITH_NONE = tuple([REL_TYPE_LABEL_OTHER] + REL_TYPE_LABELS.values())
-
-"""names of additional sample XML element attributes"""
-
-ATR_CODE = "code"
-ATR_RELATIONSHIP = "rel"
-ATR_ANNOTATION = "annotation"
-
-"""labels of table columns"""
-
-CONNECTION_LABEL = "connection"
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-RELATIONSHIP_LABEL = "relationship"
-ANNOTATION_LABEL = "annotation"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _group(pattern, input):
-    """@return: groups returned by performing pattern search with given @pattern on given @input"""
-    return pattern.search(input).groups()
-
-
-def _translateToChar(relationship):
-    """
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @return: character representation of given @relationship, 
-                empty string for null
-                '[<relationship>]' for unknown relationship
-    """
-    if relationship:
-        if relationship in REL_TYPE_CHARS:
-            return REL_TYPE_CHARS[relationship]
-        else:
-            return "[" + relationship + "]"
-    else:
-        return ""
-    
-    
-def _translateToLabel(relationship):
-    """
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @return: full name of given @relationship, 
-                empty string for null, 
-                '[<relationship>]' for unknown relationship
-    """
-    if relationship:
-        if relationship in REL_TYPE_LABELS:
-            return REL_TYPE_LABELS[relationship]
-        else:
-            return "[" + relationship + "]"
-    else:
-        return REL_TYPE_LABEL_OTHER    
-
-def _translateFromLabel(relationshipLabel):
-    """
-       @param relationshipLabel: relationship type as label (@see REL_TYPE_LABELS_WITH_NONE)
-       @return: type of given @relationshipLabel, None for REL_TYPE_LABEL_OTHER, 
-    """
-    if relationshipLabel == REL_TYPE_LABEL_OTHER:
-        return None
-    elif relationshipLabel == 'deletion':
-        return DEL_REL_TYPE
-    elif relationshipLabel == 'integration':
-        return INT_REL_TYPE
-    elif relationshipLabel == 'modification':
-        return MOD_REL_TYPE    
-
-def _createConnectionString(code, relationship, annotation):
-    """
-       @param code: code of a sample
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @param annotation: annotation of the relationship, may be null
-       @return: string representation of a connection with @relationship translated to a 'character'
-    """
-    result = code
-    if relationship:
-        result += _translateToChar(relationship)
-    if annotation:
-        result += annotation
-    return result
-
-
-def _createSampleLink(code, relationship, annotation):
-    """
-       Creates sample link XML element for sample with specified @code. The element will contain
-       given @code as 'code' attribute apart from standard 'permId' attribute. If specified 
-       @relationship or @annotation are not null they will also be contained as attributes.
-       
-       If the sample doesn't exist in DB a fake link will be created with @code as permId.
-       
-       @param code: code of a sample
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @param annotation: annotation of the relationship, may be null
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FRP2" permId="20110309154532868-4219" relationship="DEL" annotation="URA3"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-       - '<Sample code="FRP4" permId="20110309154532868-4219" relationship="INT"/>'
-       @raise ValidationException: if the specified relationship type is unknown
-    """
-    permId = entityInformationProvider().getSamplePermId(SPACE, code)
-    if not permId:
-        permId = code
-    sampleLink = elementFactory().createSampleLink(permId)
-    sampleLink.addAttribute(ATR_CODE, code)
-    if relationship:
-        sampleLink.addAttribute(ATR_RELATIONSHIP, relationship)
-        if relationship in REL_TYPES:
-            connectionString = _createConnectionString(code, relationship, annotation)
-        else:
-            raise ValidationException("Unknown relationship: '" + relationship + 
-                                      "'. Expected one of: " + REL_TYPES)
-    if annotation:
-        sampleLink.addAttribute(ATR_ANNOTATION, annotation)
-    return sampleLink    
-
-""" MAIN FUNCTIONS """
-
-"""Example input:
-
-FRP1 (DEL:URA3), FRP2 (INT), FRP3 (MOD:URA3), FRP4
-
-Relationship types:
-- DEL: deletion
-- INT: integration
-- MOD: modification
-"""
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        plasmids = input.split(',')
-        for p in plasmids:
-            (code, g, relationship, annotation) = _group(inputPattern, p.strip())
-            sampleLink = _createSampleLink(code, relationship, annotation)
-            elements.append(sampleLink)
-    
-    parentsInput = bindings.get(originalColumnNameBindingKey('YEAST_PARENTS'))
-    if parentsInput is not None:
-        parents = parentsInput.split(',')
-        for parent in parents:
-            permId = entityInformationProvider().getSamplePermId(SPACE, parent.strip())
-            parentPlasmids = entityInformationProvider().getSamplePropertyValue(permId, 'PLASMIDS')
-            if parentPlasmids is None:
-                continue
-            parentElements = list(propertyConverter().convertStringToElements(parentPlasmids))
-            for parentLink in parentElements:
-                elements.append(parentLink)     
-        
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CONNECTION_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(RELATIONSHIP_LABEL)
-    tableBuilder.addHeader(ANNOTATION_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for plasmid in elements:
-        code = plasmid.getAttribute(ATR_CODE, "")
-        relationship = plasmid.getAttribute(ATR_RELATIONSHIP, "")
-        annotation = plasmid.getAttribute(ATR_ANNOTATION, "")
-   
-        row = tableBuilder.addRow()
-        row.setCell(CONNECTION_LABEL, _createConnectionString(code, relationship, annotation))
-        row.setCell(LINK_LABEL, plasmid, code)
-        row.setCell(CODE_LABEL, code)
-        row.setCell(RELATIONSHIP_LABEL, _translateToLabel(relationship))
-        row.setCell(ANNOTATION_LABEL, annotation)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new plasmid relationship,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new plasmid relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRP')\
-                            .setDescription('Code of plasmid sample, e.g. "FRP1"'),
-        inputWidgetFactory().createComboBoxInputField(RELATIONSHIP_LABEL, REL_TYPE_LABELS_WITH_NONE)\
-                            .setMandatory(False)\
-                            .setValue(REL_TYPE_LABEL_OTHER),
-        inputWidgetFactory().createTextInputField(ANNOTATION_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Relationship annotation, e.g. "URA3"'),
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected plasmid relationship,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected plasmid relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of plasmid sample, e.g. "FRP1"'),
-        inputWidgetFactory().createComboBoxInputField(RELATIONSHIP_LABEL, REL_TYPE_LABELS_WITH_NONE)\
-                            .setMandatory(False),
-        inputWidgetFactory().createTextInputField(ANNOTATION_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Relationship annotation, e.g. "URA3"'),
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(RELATIONSHIP_LABEL, RELATIONSHIP_LABEL)
-    editAction.addBinding(ANNOTATION_LABEL, ANNOTATION_LABEL)
-  
-    """
-       3. delete selected plasmid relationships.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected plasmid relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new plasmid relationship element with values from input fields
-           and add it to existing elements.
-        """
-        code = action.getInputValue(CODE_LABEL)
-        relationshipLabel = action.getInputValue(RELATIONSHIP_LABEL)
-        relationship = _translateFromLabel(relationshipLabel)
-        annotation = action.getInputValue(ANNOTATION_LABEL)
-        sampleLink = _createSampleLink(code, relationship, annotation)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the plasmid relationship element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        code = action.getInputValue(CODE_LABEL)
-        relationshipLabel = action.getInputValue(RELATIONSHIP_LABEL)
-        relationship = _translateFromLabel(relationshipLabel)
-        annotation = action.getInputValue(ANNOTATION_LABEL)
-        sampleLink = _createSampleLink(code, relationship, annotation)
-        
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the relationships that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
diff --git a/plasmid/resource/jython-scripts/MP-solutions_buffers_links.py b/plasmid/resource/jython-scripts/MP-solutions_buffers_links.py
deleted file mode 100644
index 8d304ff46fe134af7e89fe8b6a5537edfedecbb1..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/MP-solutions_buffers_links.py
+++ /dev/null
@@ -1,213 +0,0 @@
-""" 
-Managed Property Script for handling SOLUTIONS BUFFERS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(buffers_list, buffer_concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    bufferPath= "/YEAST_LAB/" + buffers_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, buffers_list)
-    if not permId:
-        permId = buffers_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, buffers_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, buffer_concentration_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def updateBufferFromBatchInput(buffers_list, buffer_concentration_list):
-    elements = []
-    input = buffers_list
-    input2 = buffer_concentration_list
-    if input is not None:
-       for i, j in zip(buffers_list,buffer_concentration_list): #zip is used to iterate over two lists in parallel
-            sampleLink = _createSampleLink(i.strip(), j.strip())
-            elements.append(sampleLink)
-    return propertyConverter.convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for buffer in elements:
-        buffers_list = buffer.getAttribute(ATR_CODE, "")
-        name = buffer.getAttribute(ATR_NAME,"")
-        buffer_concentration_list=buffer.getAttribute(ATR_CONC, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, buffer, buffers_list)
-        row.setCell(CODE_LABEL, buffers_list)
-        row.setCell(NAME_LABEL,name)
-        row.setCell(CONC_LABEL, buffer_concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new buffer,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new buffer relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of buffer, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected buffer relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of buffer sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the buffer sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected buffer relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new buffer element with values from input fields
-           and add it to existing elements.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(buffers_list, buffer_concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the buffer element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(buffers_list, buffer_concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete buffers that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        buffers = input.split(',')
-        for buffer in buffers:
-            (code, concentration) = _extractCodeAndConcentration(buffer)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(buffer):
-    codeAndConcentration = buffer.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/MP-yeast_parents.py b/plasmid/resource/jython-scripts/MP-yeast_parents.py
deleted file mode 100644
index e4dce29e9b489aef2a1bb17c94caf9e3b487d869..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/MP-yeast_parents.py
+++ /dev/null
@@ -1,182 +0,0 @@
-""" 
-Managed Property Script for handling YEAST parents of YEAST samples.
-
-@author: Piotr Buczek
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""plasmid_list attribute name"""
-ATR_CODE = "code"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(plasmid_list):
-    """
-       Creates sample link XML element for sample with specified 'plasmid_list'. The element will contain
-       given plasmid_list as 'plasmid_list' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'plasmid_list' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample plasmid_list="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample plasmid_list="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    plasmidPath= "/YEAST_LAB/" + plasmid_list
-    permId = entityInformationProvider().getSamplePermId(SPACE, plasmid_list)
-    if not permId:
-        permId = plasmid_list
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, plasmid_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRY1, FRY2, FRY3, FRY4
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL]
-
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        plasmid_list = item.get('CODE')
-        sampleLink = _createSampleLink(plasmid_list)
-        elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
- 
-
-
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        samples = input.split(',')
-        for plasmid_list in samples:
-            sampleLink = _createSampleLink(plasmid_list.strip())
-            elements.append(sampleLink)
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for plasmid in elements:
-        plasmid_list = plasmid.getAttribute(ATR_CODE, "")
-   
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, plasmid, plasmid_list)
-        row.setCell(CODE_LABEL, plasmid_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new yeast parent,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new plasmid relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRY')\
-                            .setDescription('Code of yeast parent sample, e.g. "FRY1"')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected plasmid relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of yeast parent sample, e.g. "FRY1"')
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected yeast parent relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new yeast parent element with values from input fields
-           and add it to existing elements.
-        """
-        plasmid_list = action.getInputValue(CODE_LABEL)
-        sampleLink = _createSampleLink(plasmid_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the yeast parent element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        plasmid_list = action.getInputValue(CODE_LABEL)
-        sampleLink = _createSampleLink(plasmid_list)
-        
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete yeast parents that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)    
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/Western_blotting_script.py b/plasmid/resource/jython-scripts/Western_blotting_script.py
deleted file mode 100644
index 5e0b698152bd15d6dce10834e2407cd9d6521c7c..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/Western_blotting_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling WB samples.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(wbs_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    wbPath= "/YLAB-TEST/" + wbs_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, wbs_list)
-    if not permId:
-        permId = wbs_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, wbs_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        wbs_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if wbs_list:
-          sampleLink = _createSampleLink(wbs_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for wb in elements:
-        wbs_list = wb.getAttribute(ATR_CODE, "")
-        name = wb.getAttribute(ATR_NAME,"") 
-        comment_list=wb.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, wb, wbs_list)
-        row.setCell(CODE_LABEL, wbs_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new wb,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new wb relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRWB')\
-                            .setDescription('Code of wb, e.g. "FRWB1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected wb relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of wb sample, e.g. "FRWB1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected wb relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new wb element with values from input fields
-           and add it to existing elements.
-        """
-        wbs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(wbs_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the wb element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        wbs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(wbs_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete wbs that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        wbs = input.split(',')
-        for wb in wbs:
-            (code, comment) = _extractCodeAndComment(wb)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(wb):
-    codeAndComment = wb.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/antibodies_script.py b/plasmid/resource/jython-scripts/antibodies_script.py
deleted file mode 100644
index 2031dc7df7456c9ab7da5ac6da9ed4b9fc0707f8..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/antibodies_script.py
+++ /dev/null
@@ -1,234 +0,0 @@
-""" 
-Managed Property Script for handling General Antibodies.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_QUANTITY = "quantity"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-QUANTITY_LABEL = "quantity"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(antibodies_list, quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    antibodyPath= "/YEAST_LAB/" + antibodies_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, antibodies_list)
-    if not permId:
-        permId = antibodies_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, antibodies_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        antibodies_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-    if antibodies_list:
-          sampleLink = _createSampleLink(antibodies_list, quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL) 
- 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for antibody in elements:
-        antibodies_list = antibody.getAttribute(ATR_CODE, "")
-        name = antibody.getAttribute(ATR_NAME,"") 
-        quantity_list=antibody.getAttribute(ATR_QUANTITY, "")
-   
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, antibody, antibodies_list)
-        row.setCell(CODE_LABEL, antibodies_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new antibody,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new antibody relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRAB')\
-                            .setDescription('Code of antibody, e.g. "FRAB1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected antibody relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of antibody sample, e.g. "FRAB1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected antibody relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new antibody element with values from input fields
-           and add it to existing elements.
-        """
-        antibodies_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(antibodies_list, quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the antibody element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        antibodies_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        
-
-        sampleLink = _createSampleLink(antibodies_list, quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete antibodies that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-#def updateFromBatchInput(bindings):
-#    elements = []
-#    input = bindings.get('')
-#    if input is not None:
-#        commentEntry = _createCommentEntry(input)
-#        elements.append(commentEntry)
-#        property.value = propertyConverter().convertToString(elements)  
-        
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        antibodies = input.split(',')
-        for antibody in antibodies:
-            (code, quantity) = _extractCodeAndQuantity(antibody)
-            commentEntry = _createCommentEntry(input)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink, commentEntry)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(antibody):
-    codeAndQuantity = chemical.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/bacteria_script.py b/plasmid/resource/jython-scripts/bacteria_script.py
deleted file mode 100644
index 48d750b6ebfdc3e053fef6a2ac3491fdfcede0cd..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/bacteria_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(bacterias_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    bacteriaPath= "/YLAB-TEST/" + bacterias_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, bacterias_list)
-    if not permId:
-        permId = bacterias_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, bacterias_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        bacterias_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if bacterias_list:
-          sampleLink = _createSampleLink(bacterias_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for bacteria in elements:
-        bacterias_list = bacteria.getAttribute(ATR_CODE, "")
-        name = bacteria.getAttribute(ATR_NAME,"") 
-        comment_list=bacteria.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, bacteria, bacterias_list)
-        row.setCell(CODE_LABEL, bacterias_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new bacteria,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new bacteria relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRB')\
-                            .setDescription('Code of bacteria, e.g. "FRB1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected bacteria relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of bacteria sample, e.g. "FRB1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected bacteria relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new bacteria element with values from input fields
-           and add it to existing elements.
-        """
-        bacterias_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(bacterias_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the bacteria element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        bacterias_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(bacterias_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete bacterias that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        bacterias = input.split(',')
-        for bacteria in bacterias:
-            (code, comment) = _extractCodeAndComment(bacteria)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(bacteria):
-    codeAndComment = bacteria.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/chemicals_links.py b/plasmid/resource/jython-scripts/chemicals_links.py
deleted file mode 100644
index 02387d72505a0c157ec66447e17a7e0a185afefd..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/chemicals_links.py
+++ /dev/null
@@ -1,220 +0,0 @@
-""" 
-Managed Property Script for handling CHEMICALS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(chemicals_list, concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    chemicalPath= "/YEAST_LAB/" + chemicals_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, chemicals_list)
-    if not permId:
-        permId = chemicals_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, chemicals_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, concentration_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONC_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        chemicals_list = item.get('CODE')
-        concentration_list = item.get('CONCENTRATION')
-    if chemicals_list:
-          sampleLink = _createSampleLink(chemicals_list, concentration_list)
-          elements.append(sampleLink)
-          
-        
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for chemical in elements:
-        chemicals_list = chemical.getAttribute(ATR_CODE, "")
-        name = chemical.getAttribute(ATR_NAME,"")
-        concentration_list=chemical.getAttribute(ATR_CONC, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, chemical, chemicals_list)
-        row.setCell(CODE_LABEL, chemicals_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONC_LABEL, concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new chemical,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new chemical relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of chemical, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected chemical relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of chemical sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the chemical sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected chemical relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new chemical element with values from input fields
-           and add it to existing elements.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the chemical element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete chemicals that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        chemicals = input.split(',')
-        for chemical in chemicals:
-            (code, concentration) = _extractCodeAndConcentration(chemical)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(chemical):
-    codeAndConcentration = chemical.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/chemicals_quantity_links.py b/plasmid/resource/jython-scripts/chemicals_quantity_links.py
deleted file mode 100644
index 8c64df4dce3282634ec22d6b0f29d793a4251abf..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/chemicals_quantity_links.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling CHEMICALS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(chemicals_list, quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    chemicalPath= "/YEAST_LAB/" + chemicals_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, chemicals_list)
-    if not permId:
-        permId = chemicals_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, chemicals_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        chemicals_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-    if chemicals_list:
-          sampleLink = _createSampleLink(chemicals_list, quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for chemical in elements:
-        chemicals_list = chemical.getAttribute(ATR_CODE, "")
-        name = chemical.getAttribute(ATR_NAME,"")
-        quantity_list=chemical.getAttribute(ATR_QUANTITY, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, chemical, chemicals_list)
-        row.setCell(CODE_LABEL, chemicals_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new chemical,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new chemical relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of chemical, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected chemical relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of chemical sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the chemical sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected chemical relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new chemical element with values from input fields
-           and add it to existing elements.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(chemicals_list, quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the chemical element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(chemicals_list, quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete chemicals that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        chemicals = input.split(',')
-        for chemical in chemicals:
-            (code, quantity) = _extractCodeAndQuantity(chemical)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(chemical):
-    codeAndQuantity = chemical.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/comments.py b/plasmid/resource/jython-scripts/comments.py
deleted file mode 100644
index 02c50d2364afd8bf0dce2d50297c6bff2ccb35bf..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/comments.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from java.util import Date
-
-"""
-Example XML property value handled by this script:
-<root>
-  <commentEntry date="2011-02-20 14:15:28 GMT+01:00" person="buczekp">Here is the 1st  entry text.<commentEntry>
-  <commentEntry date="2011-02-20 14:16:28 GMT+01:00" person="kohleman">Here is the 2nd  entry text - a warning!<commentEntry>
-  <commentEntry date="2011-02-20 14:17:28 GMT+01:00" person="tpylak">Here is the 3rd  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:18:28 GMT+01:00" person="brinn">Here is the 4th  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:19:28 GMT+01:00" person="felmer">Here is the 5th  entry text - a warning!<commentEntry>
-</root>
-"""
-  
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-
-""" labels of table columns and corresponding input fields """
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-  
-""" names of attributes of XML elements for comment entries """
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-  
-""" action labels (shown as button labels in UI) """
-ADD_ACTION_LABEL = 'Add Comment Entry'
-EDIT_ACTION_LABEL = 'Edit'
-DELETE_ACTION_LABEL = 'Delete'
-  
-  
-def configureUI():
-    """Create table builder and add headers of columns."""
-    builder = createTableBuilder()
-    builder.addHeader(DATE_LABEL, 250) # date and comment text values are long, override default width (150)
-    builder.addHeader(PERSON_LABEL)
-    builder.addHeader(COMMENT_TEXT_LABEL, 400)
-      
-    """
-       Extract XML elements from property value to a Python list.
-       For each element (comment entry) add add a row to the table.  
-    """
-    elements = list(propertyConverter().convertToElements(property))
-    for commentEntry in elements:
-        row = builder.addRow()
-        row.setCell(DATE_LABEL, Date(long(commentEntry.getAttribute(DATE_ATTRIBUTE))))
-        row.setCell(PERSON_LABEL, commentEntry.getAttribute(PERSON_ATTRIBUTE))
-        row.setCell(COMMENT_TEXT_LABEL, commentEntry.getData())
-  
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(builder.getTableModel())
-  
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new comment entry,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add a new comment entry:')
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL)\
-                            .setMandatory(True)
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected comment entry,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected comment entry:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL).setMandatory(True)
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(COMMENT_TEXT_LABEL, COMMENT_TEXT_LABEL)
-  
-    """
-       3. delete selected comment entries.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected comment entry?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-  
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new comment entry element with values from input fields
-           and add it to existing elements.
-        """
-        element = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-        """Fill element attributes with appropriate values."""
-        element.addAttribute(DATE_ATTRIBUTE, str(Date().getTime()))            # current date
-        element.addAttribute(PERSON_ATTRIBUTE, action.getPerson().getUserId()) # invoker the action
-        """Retrieve values from input fields filled by user on the client side."""
-
-        """Set comment text as a text element, not an attribute."""
-        element.setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        """Add the new entry to the end of the element list."""
-        elements.append(element)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the comment entry element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        
-        selectedRowId = action.getSelectedRows()[0]
-        xmlUser = elements[selectedRowId].getAttribute(PERSON_ATTRIBUTE)
-        if action.getPerson().getUserId() == xmlUser:
-          elements[selectedRowId].setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        else:
-          raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the entries that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-              xmlUser = elements[rowId].getAttribute(PERSON_ATTRIBUTE)
-              if action.getPerson().getUserId() == xmlUser:
-                elements.pop(rowId)
-              else:
-                raise ValidationException('Comment creator and current user differ:\n' +  str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def _createCommentEntry(comment_text_list):
-    #if comment_text_list is not None:
-    commentEntry = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-                     
-    commentEntry.addAttribute(PERSON_ATTRIBUTE, person.getUserId())
-    commentEntry.addAttribute(DATE_ATTRIBUTE,str(Date().getTime()))
-    commentEntry.setData(comment_text_list)
-    return commentEntry   
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [COMMENT_ENTRY_ELEMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        comment_text_list = item.get('COMMENTENTRY')
-        sampleLink = _createCommentEntry(comment_text_list)
-        elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        commentEntry = _createCommentEntry(input)
-        elements.append(commentEntry)
-        property.value = propertyConverter().convertToString(elements)
diff --git a/plasmid/resource/jython-scripts/enzymes_script.py b/plasmid/resource/jython-scripts/enzymes_script.py
deleted file mode 100644
index a437958c0bf604299f7c5d97721d8bf23272fec7..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/enzymes_script.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling ENZYMES.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"F
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONCENTRATION = "concentration"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONCENTRATION_LABEL = "concentration"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(enzymes_list, concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    enzymePath= "/YEAST_LAB/" + enzymes_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, enzymes_list)
-    if not permId:
-        permId = enzymes_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, enzymes_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONCENTRATION, concentration_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONCENTRATION_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        enzymes_list = item.get('CODE')
-        concentration_list = item.get('CONCENTRATION')
-    if enzymes_list:
-          sampleLink = _createSampleLink(enzymes_list, concentration_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONCENTRATION_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for enzyme in elements:
-        enzymes_list = enzyme.getAttribute(ATR_CODE, "")
-        name = enzyme.getAttribute(ATR_NAME,"")
-        concentration_list=enzyme.getAttribute(ATR_CONCENTRATION, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, enzyme, enzymes_list)
-        row.setCell(CODE_LABEL, enzymes_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONCENTRATION_LABEL, concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new enzyme,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new enzyme relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of enzyme, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONCENTRATION_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected enzyme relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of enzyme sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONCENTRATION_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the enzyme sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONCENTRATION_LABEL, CONCENTRATION_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected enzyme relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new enzyme element with values from input fields
-           and add it to existing elements.
-        """
-        enzymes_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONCENTRATION_LABEL)
-        sampleLink = _createSampleLink(enzymes_list, concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the enzyme element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        enzymes_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONCENTRATION_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(enzymes_list, concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete enzymes that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        enzymes = input.split(',')
-        for enzyme in enzymes:
-            (code, concentration) = _extractCodeAndConcentration(enzyme)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(enzyme):
-    codeAndConcentration = enzyme.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/generic_annotations.py b/plasmid/resource/jython-scripts/generic_annotations.py
deleted file mode 100644
index 3625b9e3dcb618d93be558ff7b13ec62cfa41440..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/generic_annotations.py
+++ /dev/null
@@ -1,240 +0,0 @@
-""" 
-Managed Property Script for links to samples with concentration, quantity, details
-
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_DETAIL = "detail"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL="name"
-DETAIL_LABEL = "details"
-
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(entities_list, quantity_list, detail_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    entityPath= "/YEAST_LAB/" + entities_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, entities_list)
-    if not permId:
-        permId = entities_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, entities_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    if not quantity_list:
-        quantity_list = ' '
-    if not detail_list:
-        detail_list=' '
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-    sampleLink.addAttribute(ATR_DETAIL, detail_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL, DETAIL_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        entities_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-        detail_list = item.get('DETAIL')
-    if entities_list:
-          sampleLink = _createSampleLink(entities_list, quantity_list, detail_list)
-          
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(DETAIL_LABEL) 
-    
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for entity in elements:
-        entities_list = entity.getAttribute(ATR_CODE, "")
-        name = entity.getAttribute(ATR_NAME,"")
-        quantity_list=entity.getAttribute(ATR_QUANTITY, "")
-        detail_list=entity.getAttribute(ATR_DETAIL, "") 
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, entity, entities_list)
-        row.setCell(CODE_LABEL, entities_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        row.setCell(DETAIL_LABEL, detail_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new entity,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new entity relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FR')\
-                            .setDescription('Code of entity, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Quantity'),
-        inputWidgetFactory().createMultilineTextInputField(DETAIL_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Comment')                              
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected entity relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of entity sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Quantity of the entity sample, e.g. "1M"'),
-        inputWidgetFactory().createMultilineTextInputField(DETAIL_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Comment')  
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-    editAction.addBinding(DETAIL_LABEL, DETAIL_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected entity relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new entity element with values from input fields
-           and add it to existing elements.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        detail_list = action.getInputValue(DETAIL_LABEL) 
-        sampleLink = _createSampleLink(entities_list, quantity_list, detail_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the entity element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        detail_list = action.getInputValue(DETAIL_LABEL) 
-        
-
-        sampleLink = _createSampleLink(entities_list, quantity_list, detail_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete entities that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        entities = input.split(',')
-        for entity in entities:
-            (code, quantity, detail) = _extractCodeAndQuantity(entity)
-#            sampleLink = _createSampleLink(code, quantity, concentration)
-            sampleLink =   _createSampleLink(entities_list, quantity_list, detail_list)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(entity):
-    codeAndQuantity = entity.split(':')
-    if (len(codeAndQuantity) == 3):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip(), codeAndQuantity[2].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/generic_concentration_links.py b/plasmid/resource/jython-scripts/generic_concentration_links.py
deleted file mode 100644
index 02387d72505a0c157ec66447e17a7e0a185afefd..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/generic_concentration_links.py
+++ /dev/null
@@ -1,220 +0,0 @@
-""" 
-Managed Property Script for handling CHEMICALS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(chemicals_list, concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    chemicalPath= "/YEAST_LAB/" + chemicals_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, chemicals_list)
-    if not permId:
-        permId = chemicals_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, chemicals_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, concentration_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONC_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        chemicals_list = item.get('CODE')
-        concentration_list = item.get('CONCENTRATION')
-    if chemicals_list:
-          sampleLink = _createSampleLink(chemicals_list, concentration_list)
-          elements.append(sampleLink)
-          
-        
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for chemical in elements:
-        chemicals_list = chemical.getAttribute(ATR_CODE, "")
-        name = chemical.getAttribute(ATR_NAME,"")
-        concentration_list=chemical.getAttribute(ATR_CONC, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, chemical, chemicals_list)
-        row.setCell(CODE_LABEL, chemicals_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONC_LABEL, concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new chemical,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new chemical relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of chemical, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected chemical relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of chemical sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the chemical sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected chemical relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new chemical element with values from input fields
-           and add it to existing elements.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the chemical element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete chemicals that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        chemicals = input.split(',')
-        for chemical in chemicals:
-            (code, concentration) = _extractCodeAndConcentration(chemical)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(chemical):
-    codeAndConcentration = chemical.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/generic_quantity_links.py b/plasmid/resource/jython-scripts/generic_quantity_links.py
deleted file mode 100644
index b4a7848566d5c829f87ec633a5f53431841793e1..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/generic_quantity_links.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for links to samples with quantity
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(entities_list, quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    entityPath= "/YEAST_LAB/" + entities_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, entities_list)
-    if not permId:
-        permId = entities_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, entities_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        entities_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-    if entities_list:
-          sampleLink = _createSampleLink(entities_list, quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for entity in elements:
-        entities_list = entity.getAttribute(ATR_CODE, "")
-        name = entity.getAttribute(ATR_NAME,"")
-        quantity_list=entity.getAttribute(ATR_QUANTITY, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, entity, entities_list)
-        row.setCell(CODE_LABEL, entities_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new entity,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new entity relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of entity, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected entity relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of entity sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the entity sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected entity relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new entity element with values from input fields
-           and add it to existing elements.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(entities_list, quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the entity element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(entities_list, quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete entities that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        entities = input.split(',')
-        for entity in entities:
-            (code, quantity) = _extractCodeAndQuantity(entity)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(entity):
-    codeAndQuantity = entity.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
diff --git a/plasmid/resource/jython-scripts/media_link.py b/plasmid/resource/jython-scripts/media_link.py
deleted file mode 100644
index 5a2521525dfe1a4a70e655a25b4245bdac52e3cc..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/media_link.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling MEDIA.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(medias_list, media_concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    mediaPath= "/YEAST_LAB/" + medias_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, medias_list)
-    if not permId:
-        permId = medias_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')       
-    sampleLink = elementFactory().createSampleLink(permId)
-   
-    sampleLink.addAttribute(ATR_CODE, medias_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, media_concentration_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRM1:2nM, FRM2, FRM3:3 nM
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONC_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        medias_list = item.get('CODE')
-        media_concentration_list = item.get('CONCENTRATION')
-    if medias_list:
-          sampleLink = _createSampleLink(medias_list, media_concentration_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for media in elements:
-        medias_list = media.getAttribute(ATR_CODE, "")
-        name = media.getAttribute(ATR_NAME,"")
-        media_concentration_list=media.getAttribute(ATR_CONC, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, media, medias_list)
-        row.setCell(CODE_LABEL, medias_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONC_LABEL, media_concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new media,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new media relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRM')\
-                            .setDescription('Code of media, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected media relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of media sample, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the media sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected media relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new media element with values from input fields
-           and add it to existing elements.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(medias_list, media_concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the media element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(medias_list, media_concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete medias that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        medias = input.split(',')
-        for media in medias:
-            (code, concentration) = _extractCodeAndConcentration(media)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(media):
-    codeAndConcentration = media.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/media_quantity_link.py b/plasmid/resource/jython-scripts/media_quantity_link.py
deleted file mode 100644
index 8cab84c9427ae57a58d20896e7b2c2396628a386..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/media_quantity_link.py
+++ /dev/null
@@ -1,219 +0,0 @@
-""" 
-Managed Property Script for handling MEDIA.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(medias_list, media_quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    mediaPath= "/YEAST_LAB/" + medias_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, medias_list)
-    if not permId:
-        permId = medias_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')       
-    sampleLink = elementFactory().createSampleLink(permId)
-   
-    sampleLink.addAttribute(ATR_CODE, medias_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, media_quantity_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRM1:2nM, FRM2, FRM3:3 nM
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        medias_list = item.get('CODE')
-        media_quantity_list = item.get('QUANTITY')
-    if medias_list:
-          sampleLink = _createSampleLink(medias_list, media_quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for media in elements:
-        medias_list = media.getAttribute(ATR_CODE, "")
-        name = media.getAttribute(ATR_NAME,"")
-        media_quantity_list=media.getAttribute(ATR_QUANTITY, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, media, medias_list)
-        row.setCell(CODE_LABEL, medias_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, media_quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new media,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new media relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRM')\
-                            .setDescription('Code of media, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected media relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of media sample, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the media sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected media relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new media element with values from input fields
-           and add it to existing elements.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(medias_list, media_quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the media element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(medias_list, media_quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete medias that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        medias = input.split(',')
-        for media in medias:
-            (code, quantity) = _extractCodeAndQuantity(media)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(media):
-    codeAndQuantity = media.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/oligo_script.py b/plasmid/resource/jython-scripts/oligo_script.py
deleted file mode 100644
index a39c299bbbd90d94798b6e9bab31f713d3348449..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/oligo_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(oligos_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    oligoPath= "/YLAB-TEST/" + oligos_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, oligos_list)
-    if not permId:
-        permId = oligos_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, oligos_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        oligos_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if oligos_list:
-          sampleLink = _createSampleLink(oligos_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for oligo in elements:
-        oligos_list = oligo.getAttribute(ATR_CODE, "")
-        name = oligo.getAttribute(ATR_NAME,"") 
-        comment_list=oligo.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, oligo, oligos_list)
-        row.setCell(CODE_LABEL, oligos_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new oligo,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new oligo relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRB')\
-                            .setDescription('Code of oligo, e.g. "FRB1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected oligo relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of oligo sample, e.g. "FRB1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected oligo relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new oligo element with values from input fields
-           and add it to existing elements.
-        """
-        oligos_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(oligos_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the oligo element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        oligos_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(oligos_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete oligos that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        oligos = input.split(',')
-        for oligo in oligos:
-            (code, comment) = _extractCodeAndComment(oligo)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(oligo):
-    codeAndComment = oligo.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/pcr_script.py b/plasmid/resource/jython-scripts/pcr_script.py
deleted file mode 100644
index c236c1ab02f18aa8016c1d99b40d522c1f4169af..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/pcr_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling PCR samples.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(pcrs_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    pcrPath= "/YLAB-TEST/" + pcrs_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, pcrs_list)
-    if not permId:
-        permId = pcrs_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, pcrs_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        pcrs_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if pcrs_list:
-          sampleLink = _createSampleLink(pcrs_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for pcr in elements:
-        pcrs_list = pcr.getAttribute(ATR_CODE, "")
-        name = pcr.getAttribute(ATR_NAME,"") 
-        comment_list=pcr.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, pcr, pcrs_list)
-        row.setCell(CODE_LABEL, pcrs_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new pcr,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new pcr relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRPCR')\
-                            .setDescription('Code of pcr, e.g. "FRPCR1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected pcr relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of pcr sample, e.g. "FRPCR1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected pcr relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new pcr element with values from input fields
-           and add it to existing elements.
-        """
-        pcrs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(pcrs_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the pcr element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        pcrs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(pcrs_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete pcrs that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        pcrs = input.split(',')
-        for pcr in pcrs:
-            (code, comment) = _extractCodeAndComment(pcr)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(pcr):
-    codeAndComment = pcr.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/plasmid_script.py b/plasmid/resource/jython-scripts/plasmid_script.py
deleted file mode 100644
index 6ae7be4fe47ea4f8b34e22d9d12afd29245f2264..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/plasmid_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(plamsids_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    plamsidPath= "/YLAB-TEST/" + plamsids_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, plamsids_list)
-    if not permId:
-        permId = plamsids_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, plamsids_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        plamsids_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if plamsids_list:
-          sampleLink = _createSampleLink(plamsids_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for plamsid in elements:
-        plamsids_list = plamsid.getAttribute(ATR_CODE, "")
-        name = plamsid.getAttribute(ATR_NAME,"") 
-        comment_list=plamsid.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, plamsid, plamsids_list)
-        row.setCell(CODE_LABEL, plamsids_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new plamsid,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new plamsid relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRP')\
-                            .setDescription('Code of plamsid, e.g. "FRP1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected plamsid relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of plamsid sample, e.g. "FRP1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected plamsid relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new plamsid element with values from input fields
-           and add it to existing elements.
-        """
-        plamsids_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(plamsids_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the plamsid element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        plamsids_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(plamsids_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete plamsids that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        plamsids = input.split(',')
-        for plamsid in plamsids:
-            (code, comment) = _extractCodeAndComment(plamsid)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(plamsid):
-    codeAndComment = plamsid.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/pombe_script.py b/plasmid/resource/jython-scripts/pombe_script.py
deleted file mode 100644
index 91e1baebd09cfed9030716909c0e98a6e6f5fc78..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/pombe_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(pombes_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    pombePath= "/YLAB-TEST/" + pombes_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, pombes_list)
-    if not permId:
-        permId = pombes_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, pombes_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        pombes_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if pombes_list:
-          sampleLink = _createSampleLink(pombes_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for pombe in elements:
-        pombes_list = pombe.getAttribute(ATR_CODE, "")
-        name = pombe.getAttribute(ATR_NAME,"") 
-        comment_list=pombe.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, pombe, pombes_list)
-        row.setCell(CODE_LABEL, pombes_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new pombe,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new pombe relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRSP')\
-                            .setDescription('Code of pombe, e.g. "FRSP1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected pombe relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of pombe sample, e.g. "FRSP1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected pombe relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new pombe element with values from input fields
-           and add it to existing elements.
-        """
-        pombes_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(pombes_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the pombe element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        pombes_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(pombes_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete pombes that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        pombes = input.split(',')
-        for pombe in pombes:
-            (code, comment) = _extractCodeAndComment(pombe)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(pombe):
-    codeAndComment = pombe.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/protocols_script.py b/plasmid/resource/jython-scripts/protocols_script.py
deleted file mode 100644
index 72e5fceac4344e03d470b08929c8807e4a808d3b..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/protocols_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling General Protocols.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(protocols_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    protocolPath= "/YLAB-TEST/" + protocols_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, protocols_list)
-    if not permId:
-        permId = protocols_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, protocols_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        protocols_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if protocols_list:
-          sampleLink = _createSampleLink(protocols_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for protocol in elements:
-        protocols_list = protocol.getAttribute(ATR_CODE, "")
-        name = protocol.getAttribute(ATR_NAME,"") 
-        comment_list=protocol.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, protocol, protocols_list)
-        row.setCell(CODE_LABEL, protocols_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new protocol,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new protocol relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRPROT')\
-                            .setDescription('Code of protocol, e.g. "FRPROT1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected protocol relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of protocol sample, e.g. "FRPROT1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected protocol relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new protocol element with values from input fields
-           and add it to existing elements.
-        """
-        protocols_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(protocols_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the protocol element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        protocols_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(protocols_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete protocols that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        protocols = input.split(',')
-        for protocol in protocols:
-            (code, comment) = _extractCodeAndComment(protocol)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(protocol):
-    codeAndComment = protocol.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/readout_script.py b/plasmid/resource/jython-scripts/readout_script.py
deleted file mode 100644
index d645772e58338333f59d03ded728c979260b8ad7..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/readout_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(readouts_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    readoutPath= "/YLAB-TEST/" + readouts_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, readouts_list)
-    if not permId:
-        permId = readouts_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, readouts_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        readouts_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if readouts_list:
-          sampleLink = _createSampleLink(readouts_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for readout in elements:
-        readouts_list = readout.getAttribute(ATR_CODE, "")
-        name = readout.getAttribute(ATR_NAME,"") 
-        comment_list=readout.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, readout, readouts_list)
-        row.setCell(CODE_LABEL, readouts_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new readout,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new readout relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRR')\
-                            .setDescription('Code of readout, e.g. "FRR1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected readout relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of readout sample, e.g. "FRR1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected readout relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new readout element with values from input fields
-           and add it to existing elements.
-        """
-        readouts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(readouts_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the readout element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        readouts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(readouts_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete readouts that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        readouts = input.split(',')
-        for readout in readouts:
-            (code, comment) = _extractCodeAndComment(readout)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(readout):
-    codeAndComment = readout.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/solution_buffers_quantity_links.py b/plasmid/resource/jython-scripts/solution_buffers_quantity_links.py
deleted file mode 100644
index 3f2de5a370906c4fb9b48bb0fa8a960ca279e625..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/solution_buffers_quantity_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling SOLUTIONS BUFFERS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(buffers_list, buffer_quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    bufferPath= "/YEAST_LAB/" + buffers_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, buffers_list)
-    if not permId:
-        permId = buffers_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, buffers_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, buffer_quantity_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRSOB1: 1nM, FRSOB2, FRSOB3: 3nM
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        buffers_list = item.get('CODE')
-        buffer_quantity_list = item.get('QUANTITY')
-    if buffers_list:
-          sampleLink = _createSampleLink(buffers_list, buffer_quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for buffer in elements:
-        buffers_list = buffer.getAttribute(ATR_CODE, "")
-        name = buffer.getAttribute(ATR_NAME,"")
-        buffer_quantity_list=buffer.getAttribute(ATR_QUANTITY, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, buffer, buffers_list)
-        row.setCell(CODE_LABEL, buffers_list)
-        row.setCell(NAME_LABEL,name)
-        row.setCell(QUANTITY_LABEL, buffer_quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new buffer,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new buffer relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of buffer, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected buffer relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of buffer sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the buffer sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected buffer relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new buffer element with values from input fields
-           and add it to existing elements.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(buffers_list, buffer_quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the buffer element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(buffers_list, buffer_quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete buffers that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        buffers = input.split(',')
-        for buffer in buffers:
-            (code, quantity) = _extractCodeAndQuantity(buffer)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(buffer):
-    codeAndQuantity = buffer.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/solutions_buffers_links.py b/plasmid/resource/jython-scripts/solutions_buffers_links.py
deleted file mode 100644
index 34501031b8140dd2bc6b2edfe9a97bf0a4acf949..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/solutions_buffers_links.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling SOLUTIONS BUFFERS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(buffers_list, buffer_concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    bufferPath= "/YEAST_LAB/" + buffers_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, buffers_list)
-    if not permId:
-        permId = buffers_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, buffers_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, buffer_concentration_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRSOB1: 3nM, FRSOB2, FRSOB3: 4nM
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONC_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        buffers_list = item.get('CODE')
-        buffers_concentration_list = item.get('CONCENTRATION')
-     if buffers_list:
-          sampleLink = _createSampleLink(buffers_list, buffers_concentration_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for buffer in elements:
-        buffers_list = buffer.getAttribute(ATR_CODE, "")
-        name = buffer.getAttribute(ATR_NAME,"")
-        buffer_concentration_list=buffer.getAttribute(ATR_CONC, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, buffer, buffers_list)
-        row.setCell(CODE_LABEL, buffers_list)
-        row.setCell(NAME_LABEL,name)
-        row.setCell(CONC_LABEL, buffer_concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new buffer,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new buffer relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of buffer, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected buffer relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of buffer sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the buffer sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected buffer relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new buffer element with values from input fields
-           and add it to existing elements.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(buffers_list, buffer_concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the buffer element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(buffers_list, buffer_concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete buffers that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        buffers = input.split(',')
-        for buffer in buffers:
-            (code, concentration) = _extractCodeAndConcentration(buffer)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(buffer):
-    codeAndConcentration = buffer.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/resource/jython-scripts/yeast_script.py b/plasmid/resource/jython-scripts/yeast_script.py
deleted file mode 100644
index 98428a0c4ff9acc9d1b80f742b74f5bc9871c949..0000000000000000000000000000000000000000
--- a/plasmid/resource/jython-scripts/yeast_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(yeasts_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    yeastPath= "/YLAB-TEST/" + yeasts_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, yeasts_list)
-    if not permId:
-        permId = yeasts_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, yeasts_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        yeasts_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if yeasts_list:
-          sampleLink = _createSampleLink(yeasts_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for yeast in elements:
-        yeasts_list = yeast.getAttribute(ATR_CODE, "")
-        name = yeast.getAttribute(ATR_NAME,"") 
-        comment_list=yeast.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, yeast, yeasts_list)
-        row.setCell(CODE_LABEL, yeasts_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new yeast,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new yeast relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRY')\
-                            .setDescription('Code of yeast, e.g. "FRY1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected yeast relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of yeast sample, e.g. "FRY1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected yeast relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new yeast element with values from input fields
-           and add it to existing elements.
-        """
-        yeasts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(yeasts_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the yeast element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        yeasts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(yeasts_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete yeasts that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        yeasts = input.split(',')
-        for yeast in yeasts:
-            (code, comment) = _extractCodeAndComment(yeast)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(yeast):
-    codeAndComment = yeast.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/settings.gradle b/plasmid/settings.gradle
deleted file mode 100644
index 33440dae995c32d3e498e18b39ed5c1e0f9af0b5..0000000000000000000000000000000000000000
--- a/plasmid/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 'datastore_server'
diff --git a/plasmid/source-lsi/html/bacteria-body-style.css b/plasmid/source-lsi/html/bacteria-body-style.css
deleted file mode 100644
index 58062763117ba1639f7e081080175b12478c4612..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/bacteria-body-style.css
+++ /dev/null
@@ -1,49 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-
-
-/* Table */
-
-
-.bacteria-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#bacteria-table tr:nth-child(odd) td{
-  background-color:#DC7E9E;
-}
-
-
-#bacteria-table tr:nth-child(even) td{
-  background-color:#ECEFEF;
-}
-
-
-
-#bacteria-table td{
-
-padding:5px;
-}
-
-#bacteria-table tr.bacteria-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#6E3F4F;	
-  
-}
-
-
-
-
diff --git a/plasmid/source-lsi/html/bacteria-browser.html b/plasmid/source-lsi/html/bacteria-browser.html
deleted file mode 100644
index a3cc315e1f46f3f4a9fa9071364f7461347d3f94..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/bacteria-browser.html
+++ /dev/null
@@ -1,681 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Bacteria Browser</title>
-	<link type="text/css" rel="stylesheet" href="bacteria-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All bacteria
-var bacteria = null;
-
-/// The bacteria that are currently being inspected
-var inspectedBacteria = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-
-	order1 = ["CULTURE_TYPE", "PLASMID"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    bacteria = objectOrId;
-  } else {
-  	bacteria = bacteriaById[objectOrId];
-  }
-  
-  return bacteria;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the bacteria variable */
-function initializeBacteria(result)
-{
-      // Construct a map of all bacteria by id
-  bacteriaById = {};
-
-	// Split the bacteria into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpBacteria = [], otherBacteria = [];
-	var frpRegex = /^B[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        bacteriaById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the bacteriaById map
-	    theSample = bacteriaById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpBacteria.push(theSample);
-		} else {
-			otherBacteria.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherBacteria.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpBacteria.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of bacteria
-	bacteria = frpBacteria.concat(otherBacteria);
-}
-
-/** Set the size of the bacteria-table based on whether or not inspectors are visible */
-function resizeBacteriaTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	if (inspectedBacteria.length > 0) {
-		cellWidth = ((getAppWidth() - inspectorsWidth) / 9) - padding + "px";
-		areInspectorsVisible = true;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var bacteriaTableTransition = d3.selectAll('div.bacteria-table-data-cell');
-	bacteriaTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectBacteria(bacteria)
-{
-	if (inspectedBacteria.indexOf(bacteria) < 0) {
-		inspectedBacteria.push(bacteria);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var bacteriaToSend = $.extend({}, bacteria);
-		delete bacteriaToSend.parents;
-		delete bacteriaToSend.children;
-		openbisServer.listDataSetsForSample(bacteriaToSend, true, dataset.curry(bacteria));
-	}
-	resizeBacteriaTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(bacteria)
-{
-	var index = inspectedBacteria.indexOf(bacteria);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedBacteria.splice(index, 1);
-	resizeBacteriaTable();
-	updateInspectors(1000);
-}
-
-function dataset(bacteria, data) {
-	for (var i in data.result) {
-	  console.log(data.result)
-		openbisServer.listFilesForDataSet(data.result[i].code, "/", true, filelist.curry(bacteria, data.result[i]));
-	}
-}
-
-function filelist(bacteria, dataset, files) {
-	for (var i in files.result) {
-		if (!files.result[i].isDirectory) {
-			var inspector = inspectors.select("#"+bacteria.code+"_INSPECTOR");
-			var pathInDataSet = files.result[i].pathInDataSet;
-			var downloadUrl = 'https://openbis-lsi.ethz.ch:8444/datastore_server/'+dataset.code+"/"+pathInDataSet+"?sessionID=" + openbisServer.sessionToken;
-			
-			inspector.select("td.data_sets").append("a").attr("href", downloadUrl).text(pathInDataSet)
-			inspector.select("td.data_sets").append("br");
-			
-			if (/\.svg$/.test(pathInDataSet)) {
-					// Retrieve the svg file and inject it into the DOM
-					d3.xml(downloadUrl, "image/svg+xml", function(xml) {
-						var importedNode = document.importNode(xml.documentElement, true);
-						d3.select(importedNode)
-							.attr("width", inspectorsWidth - 20)
-							.attr("height", inspectorsWidth - 20)
-							.attr("viewBox", "200 200 650 650");
-						inspector.node().appendChild(importedNode);
-					});
-			}
-		}
-	}
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedBacteria, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectBacteria(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectBacteria(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		
-				
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-	
-
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeBacteria(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (bacteria.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#bacteria-table").selectAll("tr.bacteria-table-data").data(bacteria);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "bacteria-table-data")
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.PLASMID, sample.properties.CULTURE_TYPE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "bacteria-table-data-cell")
-			.text(String)
-
-}
-
-function bacteriaFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(plasmidFilterText, cultureFilterText)
-{
-	if (plasmidFilterText == undefined) 
-	{
-		plasmidFilterText = "";
-	}
-
-	if (cultureFilterText == undefined) 
-	{
-		cultureFilterText = "";
-	}
-	
-		
-	var displayedBacteria = bacteria.filter(bacteriaFilter.curry(plasmidFilterText, "PLASMID"));
-	displayedBacteria = displayedBacteria.filter(bacteriaFilter.curry(cultureFilterText, "CULTURE_TYPE"));
-	
-	
-
-
-	var selection2 = d3.select("#vis").select("#bacteria-table").selectAll("tr.bacteria-table-data").data(bacteria);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedBacteria) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "BACTERIA" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#plasmid_filter').keyup(function() {
-		visualize($('#plasmid_filter').val(), $('#culture_filter').val());
-	});	
-		
-	$('#culture_filter').keyup(function() {
-		visualize($('#plasmid_filter').val(), $('#culture_filter').val());
-	});
-
- 	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> Oligos </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-	
-<!-- Not needed for now, but already implemented in case it will be needed in future, as database grows		
-	<div id="filter-button"	style="padding-left:20px; padding-top:70px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-		<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 100px">Code</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 		
-		<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 100px">Plasmid</td><td><input style="width: 200px" id="plasmid_filter" type="text"></td></tr>
-		<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 100px">Culture Type</td><td> <input style="width: 200px" id="culture_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-  -->		
-		
-	
-    
-		<div id="vis">
-		<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="bacteria-table" style="float: left">
-			  <tr class="bacteria-table-header" style="position: relative; top: expression(this.offsetParent.scrollTop-2);"><th>Bacteria Code</th><th>Plasmid</th><th>Culture Type</th></tr>
-			  <tbody><tr style="overflow:scroll"></tr></tbody>
-			</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/body-style.css b/plasmid/source-lsi/html/body-style.css
deleted file mode 100644
index 9047f06025252e7670a81c2a3747cb776a08c466..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/body-style.css
+++ /dev/null
@@ -1,232 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#DC7E9E;
-}
-
-.properties td:nth-child(even) {
-  background-color:#ECEFEF;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Legend */
-
-.legend .sequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkGreen;
-}
-
-.legend .notsequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkRed;
-}
-.oligo-table-data-cell {
-	overflow: hidden;
-}
-
-#oligo-table tr:nth-child(odd) {
-  background-color:#94B8B8;
-}
-
-#oligo-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-  
-}
-
-#oligo-table tr.oligo-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-
-#oligo-table td{
-
-padding:5px;
-}
-
-#oligo-table tr.oligo-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#426262;	
-}
-
-
-.chemical-table-data-cell {
-	overflow: hidden;
-}
-
-#chemical-table tr:nth-child(odd) {
-  background-color:#B2B2B2;
-}
-
-#chemical-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-  
-}
-
-#chemical-table tr.chemical-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-
-#chemical-table td{
-
-padding:5px;
-}
-
-#chemical-table tr.chemical-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#767676;	
-}
-
-
-.plasmid-table-data-cell {
-	overflow: hidden;
-}
-
-#plasmid-table tr:nth-child(odd) {
-  background-color:#DC7E9E;
-}
-
-#plasmid-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-}
-
-#plasmid-table tr.plasmid-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-#plasmid-table td{
-
-padding:5px;
-}
-
-#plasmid-table tr.plasmid-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#6E3F4F;	
-}
-
-
-
-
-.yeast-table-data-cell {
-	overflow: hidden;
-}
-
-#yeast-table tr:nth-child(odd) {
-  background-color:#A6A64D;
-}
-
-#yeast-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-  
-}
-
-#yeast-table tr.yeast-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-#yeast-table td{
-
-padding:5px;
-}
-
-#yeast-table tr.yeast-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#5C5C1F;	
-}
-
diff --git a/plasmid/source-lsi/html/button.css b/plasmid/source-lsi/html/button.css
deleted file mode 100644
index 2a83cfcf2ec1a2149b54abafac67771eefb83266..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/button.css
+++ /dev/null
@@ -1,329 +0,0 @@
-button {
-  font: 14px "Trebuchet MS";
-  background-color: 	#0000FF ;
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
-  color: #fff;
-  text-rendering: optimizeLegibility;
-  text-shadow: 0 -1px 1px #222;
-  padding: 3px 5px 3px 5px;
-  border: 40;
-  border-radius: 5px;
-  border-bottom: 1px solid #222;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
-button.first {
-  border-top-left-radius: 5px;
-  border-bottom-left-radius: 5px;
-}
-
-button.last {
-  border-top-right-radius: 5px;
-  border-bottom-right-radius: 5px;
-}
-
-button.active {
-  background-color: rgb(65,102,133);
-}
-
-button:hover {
-  background-color: steelblue;
-}
-
-input {
-  font: 14px "Trebuchet MS";
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,.1));
-  color: #000;
-  text-rendering: optimizeLegibility;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 0;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
-
-#chembio_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010 ;
-background-color:#FAFAD2;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-
-#chembio_browser a:visited
-{
-background-color:#FAFAD2;
-color:#101010;
-}
-
-#chembio_browser a:hover
-{
-background-color:#C8C8A8;
-color:#FFFFFF;
-}
-
-
-#chembio_browser a:active
-{
-background-color:#C8C8A8;
-color:#FFFFFF;
-}
-
-
-#oligo_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010;
-background-color:#C2A366;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-
-#oligo_browser a:visited
-{
-background-color:#C2A366;
-color:#101010;
-}
-
-#oligo_browser a:hover
-{
-background-color:#A37519;
-color:#FFFFFF;
-}
-
-#enzyme_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010;
-background-color:#E6CC80;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#enzyme_browser a:visited
-{
-background-color:#E6CC80;
-color:#101010;
-}
-
-
-#enzyme_browser a:hover
-{
-background-color:#D1A319;
-color:#FFFFFF;
-}
-
-
-
-
-#bacteria_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010;
-background-color:#DC7E9E;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#bacteria_browser a:visited
-{
-background-color:#DC7E9E;
-color:#101010;
-}
-
-
-#bacteria_browser a:hover
-{
-background-color:#6E3F4F;
-color:#FFFFFF;
-}
-
-#plasmid_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010;
-background-color:#C28566;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-
-
-#plasmid_browser a:visited
-{
-background-color:#C28566;
-color:#101010;
-}
-
-
-#plasmid_browser a:hover
-{
-background-color:#A34719;
-color:#FFFFFF;
-}
-
-
-#prAntibody_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010;
-background-color:#C4D2A7;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-
-#prAntibody_browser a:visited
-{
-background-color:#C4D2A7;
-color:#101010;
-}
-
-
-#prAntibody_browser a:hover
-{
-background-color:#97B065;
-color:#FFFFFF;
-}
-
-#secAntibody_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010;
-background-color:#9AC39A;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-
-#secAntibody_browser a:visited
-{
-background-color:#9AC39A;
-color:#101010;
-}
-
-
-#secAntibody_browser a:hover
-{
-background-color:#729672;
-color:#FFFFFF;
-}
-
-#equipment_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#101010;
-background-color:#ECDFEC;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-
-#equipment_browser a:visited
-{
-background-color:#ECDFEC;
-color:#101010;
-}
-
-
-#equipment_browser a:hover
-{
-background-color:#C2ACC2;
-color:#FFFFFF;
-}
-
-#title{
-  font: 25px "Trebuchet MS";
-  color: #0000cc;
-  font-weight:bold;
-  text-align:center;
-  
-}
-
-#filter-button a:link
-{
-display:block;
-font-weight:bold;
-color:#FFFFFF;
-background-color:#0000FF;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#filter-button a:visited
-{
-background-color:#0000FF;
-color:#FFFFFF;
-}
-
-#filter-button a:hover
-{
-background-color:steelblue;
-color:#FFFFFF;
-}
diff --git a/plasmid/source-lsi/html/chembio-body-style.css b/plasmid/source-lsi/html/chembio-body-style.css
deleted file mode 100644
index ae7e645c41391399315010996248a10407d0007a..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/chembio-body-style.css
+++ /dev/null
@@ -1,32 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-
-.chembio-table-data-cell {
-	overflow: hidden;
-}
-
-#chembio-table tr:nth-child(odd) td{
-  background-color:#FAFAD2;
-}
-
-
-#chembio-table tr:nth-child(even) td{
-  background-color:#ECEFEF;
-}
-
-
-#chembio-table td{
-padding:5px;
-}
-
-#chembio-table tr.chembio-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#C8C8A8;	
-}
-
-
diff --git a/plasmid/source-lsi/html/chembio-browser.html b/plasmid/source-lsi/html/chembio-browser.html
deleted file mode 100644
index e22a3b71b8841d8c6c13b48af153ea565ce1a3ec..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/chembio-browser.html
+++ /dev/null
@@ -1,439 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>ChemBio Browser</title>
-	<link type="text/css" rel="stylesheet" href="chembio-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All ChemBio
-var ChemBio = null;
-
-/// The ChemBio that are currently being inspected
-var inspectedChemBio = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    ChemBio = objectOrId;
-  } else {
-  	ChemBio = ChemBioById[objectOrId];
-  }
-  
-  return ChemBio;
-}
-
-
-
-/** Initialize the ChemBio variable */
-function initializeChemBio(result)
-{
-      // Construct a map of all ChemBio by id
-  ChemBioById = {};
-
-	// Split the ChemBio into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpChemBio = [], otherChemBio = [];
-	var frpRegex = /^B[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        ChemBioById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the ChemBioById map
-	    theSample = ChemBioById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpChemBio.push(theSample);
-		} else {
-			otherChemBio.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherChemBio.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpChemBio.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of ChemBio
-	ChemBio = frpChemBio.concat(otherChemBio);
-}
-
-
-
-function inspectChemBio(ChemBio)
-{
-	if (inspectedChemBio.indexOf(ChemBio) < 0) {
-		inspectedChemBio.push(ChemBio);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var ChemBioToSend = $.extend({}, ChemBio);
-		delete ChemBioToSend.parents;
-		delete ChemBioToSend.children;
-		openbisServer.listDataSetsForSample(ChemBioToSend, true, dataset.curry(ChemBio));
-	}
-	resizeChemBioTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeChemBio(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (ChemBio.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#chembio-table").selectAll("tr.chembio-table-data").data(ChemBio);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "chembio-table-data")
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.CHEMICALS_BIOLOGICALS, sample.properties.CHEMICAL_REORDERED, sample.properties.LAB_APPLICATIONS, sample.properties.REORDER_AMOUNT, sample.properties.STOCK, sample.properties.STOCK_AMOUNT, sample.properties.STORAGE, sample.properties.VENDOR, sample.properties.PRODUCT_NUMBER]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "chembio-table-data-cell")
-			.text(String)
-
-}
-
-function ChemBioFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText, chembioFilterText)
-{
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-
-	if (chembioFilterText == undefined) 
-	{
-		chembioFilterText = "";
-	}
-	
-
-	
-	
-	var displayedChemBio = ChemBio.filter(ChemBioFilter.curry(codeFilterText, "CODE"));
-	displayedChemBio = displayedChemBio.filter(ChemBioFilter.curry(chembioFilterText, "CHEMICALS_BIOLOGICALS"));
-
-	
-	
-
-
-	var selection2 = d3.select("#vis").select("#chembio-table").selectAll("tr.chembio-table-data").data(ChemBio);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedChemBio) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "CHEMICALS_AND_BIOLOGICALS" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#chembio_filter').val(), $('#ordered_filter').val());
-	});	
-		
-	$('#chembio_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#chembio_filter').val(), $('#ordered_filter').val());
-	});
-
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> Chemicals and Biologicals </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-
-  	
-	<div id="filter-button"	style="padding-left:200px; padding-top:600px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-		<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Code</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 		
-		<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Chemicals & Biologicals</td><td><input style="width: 200px" id="chembio_filter" type="text"></td></tr>
-	  </table> 		
-    </div>	
-		
-		
-	
-    
-		<div id="vis">
-			<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="chembio-table" style="float: left">
-			  <tr class="chembio-table-header" style="position: relative; top: expression(this.offsetParent.scrollTop-2);"><th> Code</th><th>Chemicals & Biologicals</th><th>Ordered?</th><th>Lab Applications</th><th>Ordered Amount</th><th>In Stock?</th><th>Amount in stock</th><th>Storage</th><th>Vendor</th><th>Product Number</th></tr>
-			  <tbody><tr style="overflow:scroll"></tr></tbody>
-			</table>
-<!--  	</div>
-			<span id="inspectorsContainer"></span>
-		</div> -->
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/d3.js b/plasmid/source-lsi/html/d3.js
deleted file mode 100755
index 13abb6dbc6f9665c005209b8e09d0dc97266d1f7..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/d3.js
+++ /dev/null
@@ -1,4013 +0,0 @@
-(function(){if (!Date.now) Date.now = function() {
-  return +new Date;
-};
-try {
-  document.createElement("div").style.setProperty("opacity", 0, "");
-} catch (error) {
-  var d3_style_prototype = CSSStyleDeclaration.prototype,
-      d3_style_setProperty = d3_style_prototype.setProperty;
-  d3_style_prototype.setProperty = function(name, value, priority) {
-    d3_style_setProperty.call(this, name, value + "", priority);
-  };
-}
-d3 = {version: "2.1.3"}; // semver
-var d3_arraySubclass = [].__proto__?
-
-// Until ECMAScript supports array subclassing, prototype injection works well.
-function(array, prototype) {
-  array.__proto__ = prototype;
-}:
-
-// And if your browser doesn't support __proto__, we'll use direct extension.
-function(array, prototype) {
-  for (var property in prototype) array[property] = prototype[property];
-};
-function d3_this() {
-  return this;
-}
-d3.functor = function(v) {
-  return typeof v === "function" ? v : function() { return v; };
-};
-// A getter-setter method that preserves the appropriate `this` context.
-d3.rebind = function(object, method) {
-  return function() {
-    var x = method.apply(object, arguments);
-    return arguments.length ? object : x;
-  };
-};
-d3.ascending = function(a, b) {
-  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-};
-d3.descending = function(a, b) {
-  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-};
-d3.min = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
-  }
-  return a;
-};
-d3.max = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
-  }
-  return a;
-};
-d3.sum = function(array, f) {
-  var s = 0,
-      n = array.length,
-      a,
-      i = -1;
-
-  if (arguments.length === 1) {
-    while (++i < n) if (!isNaN(a = +array[i])) s += a;
-  } else {
-    while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
-  }
-
-  return s;
-};
-// R-7 per <http://en.wikipedia.org/wiki/Quantile>
-d3.quantile = function(values, p) {
-  var H = (values.length - 1) * p + 1,
-      h = Math.floor(H),
-      v = values[h - 1],
-      e = H - h;
-  return e ? v + e * (values[h] - v) : v;
-};
-d3.zip = function() {
-  if (!(n = arguments.length)) return [];
-  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
-    for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
-      zip[j] = arguments[j][i];
-    }
-  }
-  return zips;
-};
-
-function d3_zipLength(d) {
-  return d.length;
-}
-// Locate the insertion point for x in a to maintain sorted order. The
-// arguments lo and hi may be used to specify a subset of the array which should
-// be considered; by default the entire array is used. If x is already present
-// in a, the insertion point will be before (to the left of) any existing
-// entries. The return value is suitable for use as the first argument to
-// `array.splice` assuming that a is already sorted.
-//
-// The returned insertion point i partitions the array a into two halves so that
-// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi]
-// for the right side.
-d3.bisectLeft = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (a[mid] < x) lo = mid + 1;
-    else hi = mid;
-  }
-  return lo;
-};
-
-// Similar to bisectLeft, but returns an insertion point which comes after (to
-// the right of) any existing entries of x in a.
-//
-// The returned insertion point i partitions the array into two halves so that
-// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi]
-// for the right side.
-d3.bisect =
-d3.bisectRight = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (x < a[mid]) hi = mid;
-    else lo = mid + 1;
-  }
-  return lo;
-};
-d3.first = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) > 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.last = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) <= 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.nest = function() {
-  var nest = {},
-      keys = [],
-      sortKeys = [],
-      sortValues,
-      rollup;
-
-  function map(array, depth) {
-    if (depth >= keys.length) return rollup
-        ? rollup.call(nest, array) : (sortValues
-        ? array.sort(sortValues)
-        : array);
-
-    var i = -1,
-        n = array.length,
-        key = keys[depth++],
-        keyValue,
-        object,
-        o = {};
-
-    while (++i < n) {
-      if ((keyValue = key(object = array[i])) in o) {
-        o[keyValue].push(object);
-      } else {
-        o[keyValue] = [object];
-      }
-    }
-
-    for (keyValue in o) {
-      o[keyValue] = map(o[keyValue], depth);
-    }
-
-    return o;
-  }
-
-  function entries(map, depth) {
-    if (depth >= keys.length) return map;
-
-    var a = [],
-        sortKey = sortKeys[depth++],
-        key;
-
-    for (key in map) {
-      a.push({key: key, values: entries(map[key], depth)});
-    }
-
-    if (sortKey) a.sort(function(a, b) {
-      return sortKey(a.key, b.key);
-    });
-
-    return a;
-  }
-
-  nest.map = function(array) {
-    return map(array, 0);
-  };
-
-  nest.entries = function(array) {
-    return entries(map(array, 0), 0);
-  };
-
-  nest.key = function(d) {
-    keys.push(d);
-    return nest;
-  };
-
-  // Specifies the order for the most-recently specified key.
-  // Note: only applies to entries. Map keys are unordered!
-  nest.sortKeys = function(order) {
-    sortKeys[keys.length - 1] = order;
-    return nest;
-  };
-
-  // Specifies the order for leaf values.
-  // Applies to both maps and entries array.
-  nest.sortValues = function(order) {
-    sortValues = order;
-    return nest;
-  };
-
-  nest.rollup = function(f) {
-    rollup = f;
-    return nest;
-  };
-
-  return nest;
-};
-d3.keys = function(map) {
-  var keys = [];
-  for (var key in map) keys.push(key);
-  return keys;
-};
-d3.values = function(map) {
-  var values = [];
-  for (var key in map) values.push(map[key]);
-  return values;
-};
-d3.entries = function(map) {
-  var entries = [];
-  for (var key in map) entries.push({key: key, value: map[key]});
-  return entries;
-};
-d3.permute = function(array, indexes) {
-  var permutes = [],
-      i = -1,
-      n = indexes.length;
-  while (++i < n) permutes[i] = array[indexes[i]];
-  return permutes;
-};
-d3.merge = function(arrays) {
-  return Array.prototype.concat.apply([], arrays);
-};
-d3.split = function(array, f) {
-  var arrays = [],
-      values = [],
-      value,
-      i = -1,
-      n = array.length;
-  if (arguments.length < 2) f = d3_splitter;
-  while (++i < n) {
-    if (f.call(values, value = array[i], i)) {
-      values = [];
-    } else {
-      if (!values.length) arrays.push(values);
-      values.push(value);
-    }
-  }
-  return arrays;
-};
-
-function d3_splitter(d) {
-  return d == null;
-}
-function d3_collapse(s) {
-  return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
-}
-/**
- * @param {number} start
- * @param {number=} stop
- * @param {number=} step
- */
-d3.range = function(start, stop, step) {
-  if (arguments.length < 3) {
-    step = 1;
-    if (arguments.length < 2) {
-      stop = start;
-      start = 0;
-    }
-  }
-  if ((stop - start) / step == Infinity) throw new Error("infinite range");
-  var range = [],
-       i = -1,
-       j;
-  if (step < 0) while ((j = start + step * ++i) > stop) range.push(j);
-  else while ((j = start + step * ++i) < stop) range.push(j);
-  return range;
-};
-d3.requote = function(s) {
-  return s.replace(d3_requote_re, "\\$&");
-};
-
-var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
-d3.round = function(x, n) {
-  return n
-      ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n)
-      : Math.round(x);
-};
-d3.xhr = function(url, mime, callback) {
-  var req = new XMLHttpRequest;
-  if (arguments.length < 3) callback = mime;
-  else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
-  req.open("GET", url, true);
-  req.onreadystatechange = function() {
-    if (req.readyState === 4) callback(req.status < 300 ? req : null);
-  };
-  req.send(null);
-};
-d3.text = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseText);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.json = function(url, callback) {
-  d3.text(url, "application/json", function(text) {
-    callback(text ? JSON.parse(text) : null);
-  });
-};
-d3.html = function(url, callback) {
-  d3.text(url, "text/html", function(text) {
-    if (text != null) { // Treat empty string as valid HTML.
-      var range = document.createRange();
-      range.selectNode(document.body);
-      text = range.createContextualFragment(text);
-    }
-    callback(text);
-  });
-};
-d3.xml = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseXML);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.ns = {
-
-  prefix: {
-    svg: "http://www.w3.org/2000/svg",
-    xhtml: "http://www.w3.org/1999/xhtml",
-    xlink: "http://www.w3.org/1999/xlink",
-    xml: "http://www.w3.org/XML/1998/namespace",
-    xmlns: "http://www.w3.org/2000/xmlns/"
-  },
-
-  qualify: function(name) {
-    var i = name.indexOf(":");
-    return i < 0 ? name : {
-      space: d3.ns.prefix[name.substring(0, i)],
-      local: name.substring(i + 1)
-    };
-  }
-
-};
-/** @param {...string} types */
-d3.dispatch = function(types) {
-  var dispatch = {},
-      type;
-  for (var i = 0, n = arguments.length; i < n; i++) {
-    type = arguments[i];
-    dispatch[type] = d3_dispatch(type);
-  }
-  return dispatch;
-};
-
-function d3_dispatch(type) {
-  var dispatch = {},
-      listeners = [];
-
-  dispatch.add = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      if (listeners[i].listener == listener) return dispatch; // already registered
-    }
-    listeners.push({listener: listener, on: true});
-    return dispatch;
-  };
-
-  dispatch.remove = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      var l = listeners[i];
-      if (l.listener == listener) {
-        l.on = false;
-        listeners = listeners.slice(0, i).concat(listeners.slice(i + 1));
-        break;
-      }
-    }
-    return dispatch;
-  };
-
-  dispatch.dispatch = function() {
-    var ls = listeners; // defensive reference
-    for (var i = 0, n = ls.length; i < n; i++) {
-      var l = ls[i];
-      if (l.on) l.listener.apply(this, arguments);
-    }
-  };
-
-  return dispatch;
-};
-// TODO align
-d3.format = function(specifier) {
-  var match = d3_format_re.exec(specifier),
-      fill = match[1] || " ",
-      sign = match[3] || "",
-      zfill = match[5],
-      width = +match[6],
-      comma = match[7],
-      precision = match[8],
-      type = match[9],
-      percentage = false,
-      integer = false;
-
-  if (precision) precision = precision.substring(1);
-
-  if (zfill) {
-    fill = "0"; // TODO align = "=";
-    if (comma) width -= Math.floor((width - 1) / 4);
-  }
-
-  switch (type) {
-    case "n": comma = true; type = "g"; break;
-    case "%": percentage = true; type = "f"; break;
-    case "p": percentage = true; type = "r"; break;
-    case "d": integer = true; precision = "0"; break;
-  }
-
-  type = d3_format_types[type] || d3_format_typeDefault;
-
-  return function(value) {
-    var number = percentage ? value * 100 : +value,
-        negative = (number < 0) && (number = -number) ? "\u2212" : sign;
-
-    // Return the empty string for floats formatted as ints.
-    if (integer && (number % 1)) return "";
-
-    // Convert the input value to the desired precision.
-    value = type(number, precision);
-
-    // If the fill character is 0, the sign and group is applied after the fill.
-    if (zfill) {
-      var length = value.length + negative.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-    }
-
-    // Otherwise (e.g., space-filling), the sign and group is applied before.
-    else {
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-      var length = value.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-    }
-    if (percentage) value += "%";
-
-    return value;
-  };
-};
-
-// [[fill]align][sign][#][0][width][,][.precision][type]
-var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
-
-var d3_format_types = {
-  g: function(x, p) { return x.toPrecision(p); },
-  e: function(x, p) { return x.toExponential(p); },
-  f: function(x, p) { return x.toFixed(p); },
-  r: function(x, p) {
-    var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
-    return d3.round(x, p - n).toFixed(Math.max(0, Math.min(20, p - n)));
-  }
-};
-
-function d3_format_typeDefault(x) {
-  return x + "";
-}
-
-// Apply comma grouping for thousands.
-function d3_format_group(value) {
-  var i = value.lastIndexOf("."),
-      f = i >= 0 ? value.substring(i) : (i = value.length, ""),
-      t = [];
-  while (i > 0) t.push(value.substring(i -= 3, i + 3));
-  return t.reverse().join(",") + f;
-}
-/*
- * TERMS OF USE - EASING EQUATIONS
- *
- * Open source under the BSD License.
- *
- * Copyright 2001 Robert Penner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- *
- * - Neither the name of the author nor the names of contributors may be used to
- *   endorse or promote products derived from this software without specific
- *   prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-var d3_ease_quad = d3_ease_poly(2),
-    d3_ease_cubic = d3_ease_poly(3);
-
-var d3_ease = {
-  linear: function() { return d3_ease_linear; },
-  poly: d3_ease_poly,
-  quad: function() { return d3_ease_quad; },
-  cubic: function() { return d3_ease_cubic; },
-  sin: function() { return d3_ease_sin; },
-  exp: function() { return d3_ease_exp; },
-  circle: function() { return d3_ease_circle; },
-  elastic: d3_ease_elastic,
-  back: d3_ease_back,
-  bounce: function() { return d3_ease_bounce; }
-};
-
-var d3_ease_mode = {
-  "in": function(f) { return f; },
-  "out": d3_ease_reverse,
-  "in-out": d3_ease_reflect,
-  "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
-};
-
-d3.ease = function(name) {
-  var i = name.indexOf("-"),
-      t = i >= 0 ? name.substring(0, i) : name,
-      m = i >= 0 ? name.substring(i + 1) : "in";
-  return d3_ease_clamp(d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1))));
-};
-
-function d3_ease_clamp(f) {
-  return function(t) {
-    return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
-  };
-}
-
-function d3_ease_reverse(f) {
-  return function(t) {
-    return 1 - f(1 - t);
-  };
-}
-
-function d3_ease_reflect(f) {
-  return function(t) {
-    return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
-  };
-}
-
-function d3_ease_linear(t) {
-  return t;
-}
-
-function d3_ease_poly(e) {
-  return function(t) {
-    return Math.pow(t, e);
-  }
-}
-
-function d3_ease_sin(t) {
-  return 1 - Math.cos(t * Math.PI / 2);
-}
-
-function d3_ease_exp(t) {
-  return Math.pow(2, 10 * (t - 1));
-}
-
-function d3_ease_circle(t) {
-  return 1 - Math.sqrt(1 - t * t);
-}
-
-function d3_ease_elastic(a, p) {
-  var s;
-  if (arguments.length < 2) p = 0.45;
-  if (arguments.length < 1) { a = 1; s = p / 4; }
-  else s = p / (2 * Math.PI) * Math.asin(1 / a);
-  return function(t) {
-    return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
-  };
-}
-
-function d3_ease_back(s) {
-  if (!s) s = 1.70158;
-  return function(t) {
-    return t * t * ((s + 1) * t - s);
-  };
-}
-
-function d3_ease_bounce(t) {
-  return t < 1 / 2.75 ? 7.5625 * t * t
-      : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75
-      : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375
-      : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
-}
-d3.event = null;
-d3.interpolate = function(a, b) {
-  var i = d3.interpolators.length, f;
-  while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
-  return f;
-};
-
-d3.interpolateNumber = function(a, b) {
-  b -= a;
-  return function(t) { return a + b * t; };
-};
-
-d3.interpolateRound = function(a, b) {
-  b -= a;
-  return function(t) { return Math.round(a + b * t); };
-};
-
-d3.interpolateString = function(a, b) {
-  var m, // current match
-      i, // current index
-      j, // current index (for coallescing)
-      s0 = 0, // start index of current string prefix
-      s1 = 0, // end index of current string prefix
-      s = [], // string constants and placeholders
-      q = [], // number interpolators
-      n, // q.length
-      o;
-
-  // Reset our regular expression!
-  d3_interpolate_number.lastIndex = 0;
-
-  // Find all numbers in b.
-  for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
-    if (m.index) s.push(b.substring(s0, s1 = m.index));
-    q.push({i: s.length, x: m[0]});
-    s.push(null);
-    s0 = d3_interpolate_number.lastIndex;
-  }
-  if (s0 < b.length) s.push(b.substring(s0));
-
-  // Find all numbers in a.
-  for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
-    o = q[i];
-    if (o.x == m[0]) { // The numbers match, so coallesce.
-      if (o.i) {
-        if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i - 1] += o.x;
-          s.splice(o.i, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i - 1] += o.x + s[o.i + 1];
-          s.splice(o.i, 2);
-          for (j = i + 1; j < n; ++j) q[j].i -= 2;
-        }
-      } else {
-          if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i] = o.x;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i] = o.x + s[o.i + 1];
-          s.splice(o.i + 1, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        }
-      }
-      q.splice(i, 1);
-      n--;
-      i--;
-    } else {
-      o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
-    }
-  }
-
-  // Remove any numbers in b not found in a.
-  while (i < n) {
-    o = q.pop();
-    if (s[o.i + 1] == null) { // This match is followed by another number.
-      s[o.i] = o.x;
-    } else { // This match is followed by a string, so coallesce twice.
-      s[o.i] = o.x + s[o.i + 1];
-      s.splice(o.i + 1, 1);
-    }
-    n--;
-  }
-
-  // Special optimization for only a single match.
-  if (s.length === 1) {
-    return s[0] == null ? q[0].x : function() { return b; };
-  }
-
-  // Otherwise, interpolate each of the numbers and rejoin the string.
-  return function(t) {
-    for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
-    return s.join("");
-  };
-};
-
-d3.interpolateRgb = function(a, b) {
-  a = d3.rgb(a);
-  b = d3.rgb(b);
-  var ar = a.r,
-      ag = a.g,
-      ab = a.b,
-      br = b.r - ar,
-      bg = b.g - ag,
-      bb = b.b - ab;
-  return function(t) {
-    return "rgb(" + Math.round(ar + br * t)
-        + "," + Math.round(ag + bg * t)
-        + "," + Math.round(ab + bb * t)
-        + ")";
-  };
-};
-
-// interpolates HSL space, but outputs RGB string (for compatibility)
-d3.interpolateHsl = function(a, b) {
-  a = d3.hsl(a);
-  b = d3.hsl(b);
-  var h0 = a.h,
-      s0 = a.s,
-      l0 = a.l,
-      h1 = b.h - h0,
-      s1 = b.s - s0,
-      l1 = b.l - l0;
-  return function(t) {
-    return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
-  };
-};
-
-d3.interpolateArray = function(a, b) {
-  var x = [],
-      c = [],
-      na = a.length,
-      nb = b.length,
-      n0 = Math.min(a.length, b.length),
-      i;
-  for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
-  for (; i < na; ++i) c[i] = a[i];
-  for (; i < nb; ++i) c[i] = b[i];
-  return function(t) {
-    for (i = 0; i < n0; ++i) c[i] = x[i](t);
-    return c;
-  };
-};
-
-d3.interpolateObject = function(a, b) {
-  var i = {},
-      c = {},
-      k;
-  for (k in a) {
-    if (k in b) {
-      i[k] = d3_interpolateByName(k)(a[k], b[k]);
-    } else {
-      c[k] = a[k];
-    }
-  }
-  for (k in b) {
-    if (!(k in a)) {
-      c[k] = b[k];
-    }
-  }
-  return function(t) {
-    for (k in i) c[k] = i[k](t);
-    return c;
-  };
-}
-
-var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
-    d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1};
-
-function d3_interpolateByName(n) {
-  return n in d3_interpolate_rgb || /\bcolor\b/.test(n)
-      ? d3.interpolateRgb
-      : d3.interpolate;
-}
-
-d3.interpolators = [
-  d3.interpolateObject,
-  function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
-  function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); },
-  function(a, b) { return (typeof b === "string" ? b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(String(a), b); },
-  function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); }
-];
-function d3_uninterpolateNumber(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return (x - a) * b; };
-}
-
-function d3_uninterpolateClamp(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
-}
-d3.rgb = function(r, g, b) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)
-      : d3_rgb(~~r, ~~g, ~~b);
-};
-
-function d3_rgb(r, g, b) {
-  return new d3_Rgb(r, g, b);
-}
-
-function d3_Rgb(r, g, b) {
-  this.r = r;
-  this.g = g;
-  this.b = b;
-}
-
-d3_Rgb.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  var r = this.r,
-      g = this.g,
-      b = this.b,
-      i = 30;
-  if (!r && !g && !b) return d3_rgb(i, i, i);
-  if (r && r < i) r = i;
-  if (g && g < i) g = i;
-  if (b && b < i) b = i;
-  return d3_rgb(
-    Math.min(255, Math.floor(r / k)),
-    Math.min(255, Math.floor(g / k)),
-    Math.min(255, Math.floor(b / k)));
-};
-
-d3_Rgb.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_rgb(
-    Math.max(0, Math.floor(k * this.r)),
-    Math.max(0, Math.floor(k * this.g)),
-    Math.max(0, Math.floor(k * this.b)));
-};
-
-d3_Rgb.prototype.hsl = function() {
-  return d3_rgb_hsl(this.r, this.g, this.b);
-};
-
-d3_Rgb.prototype.toString = function() {
-  return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
-};
-
-function d3_rgb_hex(v) {
-  return v < 0x10 ? "0" + v.toString(16) : v.toString(16);
-}
-
-function d3_rgb_parse(format, rgb, hsl) {
-  var r = 0, // red channel; int in [0, 255]
-      g = 0, // green channel; int in [0, 255]
-      b = 0, // blue channel; int in [0, 255]
-      m1, // CSS color specification match
-      m2, // CSS color specification type (e.g., rgb)
-      name;
-
-  /* Handle hsl, rgb. */
-  m1 = /([a-z]+)\((.*)\)/i.exec(format);
-  if (m1) {
-    m2 = m1[2].split(",");
-    switch (m1[1]) {
-      case "hsl": {
-        return hsl(
-          parseFloat(m2[0]), // degrees
-          parseFloat(m2[1]) / 100, // percentage
-          parseFloat(m2[2]) / 100 // percentage
-        );
-      }
-      case "rgb": {
-        return rgb(
-          d3_rgb_parseNumber(m2[0]),
-          d3_rgb_parseNumber(m2[1]),
-          d3_rgb_parseNumber(m2[2])
-        );
-      }
-    }
-  }
-
-  /* Named colors. */
-  if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b);
-
-  /* Hexadecimal colors: #rgb and #rrggbb. */
-  if (format != null && format.charAt(0) === "#") {
-    if (format.length === 4) {
-      r = format.charAt(1); r += r;
-      g = format.charAt(2); g += g;
-      b = format.charAt(3); b += b;
-    } else if (format.length === 7) {
-      r = format.substring(1, 3);
-      g = format.substring(3, 5);
-      b = format.substring(5, 7);
-    }
-    r = parseInt(r, 16);
-    g = parseInt(g, 16);
-    b = parseInt(b, 16);
-  }
-
-  return rgb(r, g, b);
-}
-
-function d3_rgb_hsl(r, g, b) {
-  var min = Math.min(r /= 255, g /= 255, b /= 255),
-      max = Math.max(r, g, b),
-      d = max - min,
-      h,
-      s,
-      l = (max + min) / 2;
-  if (d) {
-    s = l < .5 ? d / (max + min) : d / (2 - max - min);
-    if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
-    else if (g == max) h = (b - r) / d + 2;
-    else h = (r - g) / d + 4;
-    h *= 60;
-  } else {
-    s = h = 0;
-  }
-  return d3_hsl(h, s, l);
-}
-
-function d3_rgb_parseNumber(c) { // either integer or percentage
-  var f = parseFloat(c);
-  return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
-}
-
-var d3_rgb_names = {
-  aliceblue: "#f0f8ff",
-  antiquewhite: "#faebd7",
-  aqua: "#00ffff",
-  aquamarine: "#7fffd4",
-  azure: "#f0ffff",
-  beige: "#f5f5dc",
-  bisque: "#ffe4c4",
-  black: "#000000",
-  blanchedalmond: "#ffebcd",
-  blue: "#0000ff",
-  blueviolet: "#8a2be2",
-  brown: "#a52a2a",
-  burlywood: "#deb887",
-  cadetblue: "#5f9ea0",
-  chartreuse: "#7fff00",
-  chocolate: "#d2691e",
-  coral: "#ff7f50",
-  cornflowerblue: "#6495ed",
-  cornsilk: "#fff8dc",
-  crimson: "#dc143c",
-  cyan: "#00ffff",
-  darkblue: "#00008b",
-  darkcyan: "#008b8b",
-  darkgoldenrod: "#b8860b",
-  darkgray: "#a9a9a9",
-  darkgreen: "#006400",
-  darkgrey: "#a9a9a9",
-  darkkhaki: "#bdb76b",
-  darkmagenta: "#8b008b",
-  darkolivegreen: "#556b2f",
-  darkorange: "#ff8c00",
-  darkorchid: "#9932cc",
-  darkred: "#8b0000",
-  darksalmon: "#e9967a",
-  darkseagreen: "#8fbc8f",
-  darkslateblue: "#483d8b",
-  darkslategray: "#2f4f4f",
-  darkslategrey: "#2f4f4f",
-  darkturquoise: "#00ced1",
-  darkviolet: "#9400d3",
-  deeppink: "#ff1493",
-  deepskyblue: "#00bfff",
-  dimgray: "#696969",
-  dimgrey: "#696969",
-  dodgerblue: "#1e90ff",
-  firebrick: "#b22222",
-  floralwhite: "#fffaf0",
-  forestgreen: "#228b22",
-  fuchsia: "#ff00ff",
-  gainsboro: "#dcdcdc",
-  ghostwhite: "#f8f8ff",
-  gold: "#ffd700",
-  goldenrod: "#daa520",
-  gray: "#808080",
-  green: "#008000",
-  greenyellow: "#adff2f",
-  grey: "#808080",
-  honeydew: "#f0fff0",
-  hotpink: "#ff69b4",
-  indianred: "#cd5c5c",
-  indigo: "#4b0082",
-  ivory: "#fffff0",
-  khaki: "#f0e68c",
-  lavender: "#e6e6fa",
-  lavenderblush: "#fff0f5",
-  lawngreen: "#7cfc00",
-  lemonchiffon: "#fffacd",
-  lightblue: "#add8e6",
-  lightcoral: "#f08080",
-  lightcyan: "#e0ffff",
-  lightgoldenrodyellow: "#fafad2",
-  lightgray: "#d3d3d3",
-  lightgreen: "#90ee90",
-  lightgrey: "#d3d3d3",
-  lightpink: "#ffb6c1",
-  lightsalmon: "#ffa07a",
-  lightseagreen: "#20b2aa",
-  lightskyblue: "#87cefa",
-  lightslategray: "#778899",
-  lightslategrey: "#778899",
-  lightsteelblue: "#b0c4de",
-  lightyellow: "#ffffe0",
-  lime: "#00ff00",
-  limegreen: "#32cd32",
-  linen: "#faf0e6",
-  magenta: "#ff00ff",
-  maroon: "#800000",
-  mediumaquamarine: "#66cdaa",
-  mediumblue: "#0000cd",
-  mediumorchid: "#ba55d3",
-  mediumpurple: "#9370db",
-  mediumseagreen: "#3cb371",
-  mediumslateblue: "#7b68ee",
-  mediumspringgreen: "#00fa9a",
-  mediumturquoise: "#48d1cc",
-  mediumvioletred: "#c71585",
-  midnightblue: "#191970",
-  mintcream: "#f5fffa",
-  mistyrose: "#ffe4e1",
-  moccasin: "#ffe4b5",
-  navajowhite: "#ffdead",
-  navy: "#000080",
-  oldlace: "#fdf5e6",
-  olive: "#808000",
-  olivedrab: "#6b8e23",
-  orange: "#ffa500",
-  orangered: "#ff4500",
-  orchid: "#da70d6",
-  palegoldenrod: "#eee8aa",
-  palegreen: "#98fb98",
-  paleturquoise: "#afeeee",
-  palevioletred: "#db7093",
-  papayawhip: "#ffefd5",
-  peachpuff: "#ffdab9",
-  peru: "#cd853f",
-  pink: "#ffc0cb",
-  plum: "#dda0dd",
-  powderblue: "#b0e0e6",
-  purple: "#800080",
-  red: "#ff0000",
-  rosybrown: "#bc8f8f",
-  royalblue: "#4169e1",
-  saddlebrown: "#8b4513",
-  salmon: "#fa8072",
-  sandybrown: "#f4a460",
-  seagreen: "#2e8b57",
-  seashell: "#fff5ee",
-  sienna: "#a0522d",
-  silver: "#c0c0c0",
-  skyblue: "#87ceeb",
-  slateblue: "#6a5acd",
-  slategray: "#708090",
-  slategrey: "#708090",
-  snow: "#fffafa",
-  springgreen: "#00ff7f",
-  steelblue: "#4682b4",
-  tan: "#d2b48c",
-  teal: "#008080",
-  thistle: "#d8bfd8",
-  tomato: "#ff6347",
-  turquoise: "#40e0d0",
-  violet: "#ee82ee",
-  wheat: "#f5deb3",
-  white: "#ffffff",
-  whitesmoke: "#f5f5f5",
-  yellow: "#ffff00",
-  yellowgreen: "#9acd32"
-};
-
-for (var d3_rgb_name in d3_rgb_names) {
-  d3_rgb_names[d3_rgb_name] = d3_rgb_parse(
-      d3_rgb_names[d3_rgb_name],
-      d3_rgb,
-      d3_hsl_rgb);
-}
-d3.hsl = function(h, s, l) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)
-      : d3_hsl(+h, +s, +l);
-};
-
-function d3_hsl(h, s, l) {
-  return new d3_Hsl(h, s, l);
-}
-
-function d3_Hsl(h, s, l) {
-  this.h = h;
-  this.s = s;
-  this.l = l;
-}
-
-d3_Hsl.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, this.l / k);
-};
-
-d3_Hsl.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, k * this.l);
-};
-
-d3_Hsl.prototype.rgb = function() {
-  return d3_hsl_rgb(this.h, this.s, this.l);
-};
-
-d3_Hsl.prototype.toString = function() {
-  return "hsl(" + this.h + "," + this.s * 100 + "%," + this.l * 100 + "%)";
-};
-
-function d3_hsl_rgb(h, s, l) {
-  var m1,
-      m2;
-
-  /* Some simple corrections for h, s and l. */
-  h = h % 360; if (h < 0) h += 360;
-  s = s < 0 ? 0 : s > 1 ? 1 : s;
-  l = l < 0 ? 0 : l > 1 ? 1 : l;
-
-  /* From FvD 13.37, CSS Color Module Level 3 */
-  m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
-  m1 = 2 * l - m2;
-
-  function v(h) {
-    if (h > 360) h -= 360;
-    else if (h < 0) h += 360;
-    if (h < 60) return m1 + (m2 - m1) * h / 60;
-    if (h < 180) return m2;
-    if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
-    return m1;
-  }
-
-  function vv(h) {
-    return Math.round(v(h) * 255);
-  }
-
-  return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
-}
-function d3_selection(groups) {
-  d3_arraySubclass(groups, d3_selectionPrototype);
-  return groups;
-}
-
-var d3_select = function(s, n) { return n.querySelector(s); },
-    d3_selectAll = function(s, n) { return n.querySelectorAll(s); };
-
-// Prefer Sizzle, if available.
-if (typeof Sizzle === "function") {
-  d3_select = function(s, n) { return Sizzle(s, n)[0]; };
-  d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
-}
-
-var d3_selectionPrototype = [];
-
-d3.selection = function() {
-  return d3_selectionRoot;
-};
-
-d3.selection.prototype = d3_selectionPrototype;
-d3_selectionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      group,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(subnode = selector.call(node, node.__data__, i));
-        if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selector(selector) {
-  return function() {
-    return d3_select(selector, this);
-  };
-}
-d3_selectionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node, node.__data__, i));
-        subgroup.parentNode = node;
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selectorAll(selector) {
-  return function() {
-    return d3_selectAll(selector, this);
-  };
-}
-d3_selectionPrototype.attr = function(name, value) {
-  name = d3.ns.qualify(name);
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    return name.local
-        ? node.getAttributeNS(name.space, name.local)
-        : node.getAttribute(name);
-  }
-
-  function attrNull() {
-    this.removeAttribute(name);
-  }
-
-  function attrNullNS() {
-    this.removeAttributeNS(name.space, name.local);
-  }
-
-  function attrConstant() {
-    this.setAttribute(name, value);
-  }
-
-  function attrConstantNS() {
-    this.setAttributeNS(name.space, name.local, value);
-  }
-
-  function attrFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttribute(name);
-    else this.setAttribute(name, x);
-  }
-
-  function attrFunctionNS() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttributeNS(name.space, name.local);
-    else this.setAttributeNS(name.space, name.local, x);
-  }
-
-  return this.each(value == null
-      ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
-      ? (name.local ? attrFunctionNS : attrFunction)
-      : (name.local ? attrConstantNS : attrConstant)));
-};
-d3_selectionPrototype.classed = function(name, value) {
-  var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    if (c = node.classList) return c.contains(name);
-    var c = node.className;
-    re.lastIndex = 0;
-    return re.test(c.baseVal != null ? c.baseVal : c);
-  }
-
-  function classedAdd() {
-    if (c = this.classList) return c.add(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    re.lastIndex = 0;
-    if (!re.test(cv)) {
-      cv = d3_collapse(cv + " " + name);
-      if (cb) c.baseVal = cv;
-      else this.className = cv;
-    }
-  }
-
-  function classedRemove() {
-    if (c = this.classList) return c.remove(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    cv = d3_collapse(cv.replace(re, " "));
-    if (cb) c.baseVal = cv;
-    else this.className = cv;
-  }
-
-  function classedFunction() {
-    (value.apply(this, arguments)
-        ? classedAdd
-        : classedRemove).call(this);
-  }
-
-  return this.each(typeof value === "function"
-      ? classedFunction : value
-      ? classedAdd
-      : classedRemove);
-};
-d3_selectionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return window
-      .getComputedStyle(this.node(), null)
-      .getPropertyValue(name);
-
-  function styleNull() {
-    this.style.removeProperty(name);
-  }
-
-  function styleConstant() {
-    this.style.setProperty(name, value, priority);
-  }
-
-  function styleFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.style.removeProperty(name);
-    else this.style.setProperty(name, x, priority);
-  }
-
-  return this.each(value == null
-      ? styleNull : (typeof value === "function"
-      ? styleFunction : styleConstant));
-};
-d3_selectionPrototype.property = function(name, value) {
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return this.node()[name];
-
-  function propertyNull() {
-    delete this[name];
-  }
-
-  function propertyConstant() {
-    this[name] = value;
-  }
-
-  function propertyFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) delete this[name];
-    else this[name] = x;
-  }
-
-  return this.each(value == null
-      ? propertyNull : (typeof value === "function"
-      ? propertyFunction : propertyConstant));
-};
-d3_selectionPrototype.text = function(value) {
-  return arguments.length < 1 ? this.node().textContent
-      : (this.each(typeof value === "function"
-      ? function() { this.textContent = value.apply(this, arguments); }
-      : function() { this.textContent = value; }));
-};
-d3_selectionPrototype.html = function(value) {
-  return arguments.length < 1 ? this.node().innerHTML
-      : (this.each(typeof value === "function"
-      ? function() { this.innerHTML = value.apply(this, arguments); }
-      : function() { this.innerHTML = value; }));
-};
-// TODO append(node)?
-// TODO append(function)?
-d3_selectionPrototype.append = function(name) {
-  name = d3.ns.qualify(name);
-
-  function append() {
-    return this.appendChild(document.createElement(name));
-  }
-
-  function appendNS() {
-    return this.appendChild(document.createElementNS(name.space, name.local));
-  }
-
-  return this.select(name.local ? appendNS : append);
-};
-// TODO insert(node, function)?
-// TODO insert(function, string)?
-// TODO insert(function, function)?
-d3_selectionPrototype.insert = function(name, before) {
-  name = d3.ns.qualify(name);
-
-  function insert() {
-    return this.insertBefore(
-        document.createElement(name),
-        d3_select(before, this));
-  }
-
-  function insertNS() {
-    return this.insertBefore(
-        document.createElementNS(name.space, name.local),
-        d3_select(before, this));
-  }
-
-  return this.select(name.local ? insertNS : insert);
-};
-// TODO remove(selector)?
-// TODO remove(node)?
-// TODO remove(function)?
-d3_selectionPrototype.remove = function() {
-  return this.each(function() {
-    var parent = this.parentNode;
-    if (parent) parent.removeChild(this);
-  });
-};
-// TODO data(null) for clearing data?
-d3_selectionPrototype.data = function(data, join) {
-  var enter = [],
-      update = [],
-      exit = [];
-
-  function bind(group, groupData) {
-    var i,
-        n = group.length,
-        m = groupData.length,
-        n0 = Math.min(n, m),
-        n1 = Math.max(n, m),
-        updateNodes = [],
-        enterNodes = [],
-        exitNodes = [],
-        node,
-        nodeData;
-
-    if (join) {
-      var nodeByKey = {},
-          keys = [],
-          key,
-          j = groupData.length;
-
-      for (i = -1; ++i < n;) {
-        key = join.call(node = group[i], node.__data__, i);
-        if (key in nodeByKey) {
-          exitNodes[j++] = node; // duplicate key
-        } else {
-          nodeByKey[key] = node;
-        }
-        keys.push(key);
-      }
-
-      for (i = -1; ++i < m;) {
-        node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-        delete nodeByKey[key];
-      }
-
-      for (i = -1; ++i < n;) {
-        if (keys[i] in nodeByKey) {
-          exitNodes[i] = group[i];
-        }
-      }
-    } else {
-      for (i = -1; ++i < n0;) {
-        node = group[i];
-        nodeData = groupData[i];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-      }
-      for (; i < m; ++i) {
-        enterNodes[i] = d3_selection_dataNode(groupData[i]);
-        updateNodes[i] = exitNodes[i] = null;
-      }
-      for (; i < n1; ++i) {
-        exitNodes[i] = group[i];
-        enterNodes[i] = updateNodes[i] = null;
-      }
-    }
-
-    enterNodes.update
-        = updateNodes;
-
-    enterNodes.parentNode
-        = updateNodes.parentNode
-        = exitNodes.parentNode
-        = group.parentNode;
-
-    enter.push(enterNodes);
-    update.push(updateNodes);
-    exit.push(exitNodes);
-  }
-
-  var i = -1,
-      n = this.length,
-      group;
-  if (typeof data === "function") {
-    while (++i < n) {
-      bind(group = this[i], data.call(group, group.parentNode.__data__, i));
-    }
-  } else {
-    while (++i < n) {
-      bind(group = this[i], data);
-    }
-  }
-
-  var selection = d3_selection(update);
-  selection.enter = function() { return d3_selection_enter(enter); };
-  selection.exit = function() { return d3_selection(exit); };
-  return selection;
-};
-
-function d3_selection_dataNode(data) {
-  return {__data__: data};
-}
-function d3_selection_enter(selection) {
-  d3_arraySubclass(selection, d3_selection_enterPrototype);
-  return selection;
-}
-
-var d3_selection_enterPrototype = [];
-
-d3_selection_enterPrototype.append = d3_selectionPrototype.append;
-d3_selection_enterPrototype.insert = d3_selectionPrototype.insert;
-d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
-d3_selection_enterPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      upgroup,
-      group,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    upgroup = (group = this[j]).update;
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = group.parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i));
-        subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-// TODO preserve null elements to maintain index?
-d3_selectionPrototype.filter = function(filter) {
-  var subgroups = [],
-      subgroup,
-      group,
-      node;
-
-  for (var j = 0, m = this.length; j < m; j++) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = 0, n = group.length; i < n; i++) {
-      if ((node = group[i]) && filter.call(node, node.__data__, i)) {
-        subgroup.push(node);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-d3_selectionPrototype.map = function(map) {
-  return this.each(function() {
-    this.__data__ = map.apply(this, arguments);
-  });
-};
-d3_selectionPrototype.sort = function(comparator) {
-  comparator = d3_selection_sortComparator.apply(this, arguments);
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j].sort(comparator), i = 1, n = group.length, prev = group[0]; i < n; i++) {
-      var node = group[i];
-      if (node) {
-        if (prev) prev.parentNode.insertBefore(node, prev.nextSibling);
-        prev = node;
-      }
-    }
-  }
-  return this;
-};
-
-function d3_selection_sortComparator(comparator) {
-  if (!arguments.length) comparator = d3.ascending;
-  return function(a, b) {
-    return comparator(a && a.__data__, b && b.__data__);
-  };
-}
-// type can be namespaced, e.g., "click.foo"
-// listener can be null for removal
-d3_selectionPrototype.on = function(type, listener, capture) {
-  if (arguments.length < 3) capture = false;
-
-  // parse the type specifier
-  var name = "__on" + type, i = type.indexOf(".");
-  if (i > 0) type = type.substring(0, i);
-
-  // if called with only one argument, return the current listener
-  if (arguments.length < 2) return (i = this.node()[name]) && i._;
-
-  // remove the old event listener, and add the new event listener
-  return this.each(function(d, i) {
-    var node = this;
-
-    if (node[name]) node.removeEventListener(type, node[name], capture);
-    if (listener) node.addEventListener(type, node[name] = l, capture);
-
-    // wrapped event listener that preserves i
-    function l(e) {
-      var o = d3.event; // Events can be reentrant (e.g., focus).
-      d3.event = e;
-      try {
-        listener.call(node, node.__data__, i);
-      } finally {
-        d3.event = o;
-      }
-    }
-
-    // stash the unwrapped listener for retrieval
-    l._ = listener;
-  });
-};
-d3_selectionPrototype.each = function(callback) {
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      var node = group[i];
-      if (node) callback.call(node, node.__data__, i, j);
-    }
-  }
-  return this;
-};
-//
-// Note: assigning to the arguments array simultaneously changes the value of
-// the corresponding argument!
-//
-// TODO The `this` argument probably shouldn't be the first argument to the
-// callback, anyway, since it's redundant. However, that will require a major
-// version bump due to backwards compatibility, so I'm not changing it right
-// away.
-//
-d3_selectionPrototype.call = function(callback) {
-  callback.apply(this, (arguments[0] = this, arguments));
-  return this;
-};
-d3_selectionPrototype.empty = function() {
-  return !this.node();
-};
-d3_selectionPrototype.node = function(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) return node;
-    }
-  }
-  return null;
-};
-d3_selectionPrototype.transition = function() {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      subgroup.push((node = group[i]) ? {node: node, delay: 0, duration: 250} : null);
-    }
-  }
-
-  return d3_transition(subgroups, d3_transitionInheritId || ++d3_transitionId);
-};
-var d3_selectionRoot = d3_selection([[document]]);
-
-d3_selectionRoot[0].parentNode = document.documentElement;
-
-// TODO fast singleton implementation!
-d3.select = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.select(selector)
-      : d3_selection([[selector]]); // assume node
-};
-
-d3.selectAll = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.selectAll(selector)
-      : d3_selection([selector]); // assume node[]
-};
-function d3_transition(groups, id) {
-  d3_arraySubclass(groups, d3_transitionPrototype);
-
-  var tweens = {},
-      event = d3.dispatch("start", "end"),
-      ease = d3_transitionEase,
-      then = Date.now();
-
-  groups.id = id;
-
-  groups.tween = function(name, tween) {
-    if (arguments.length < 2) return tweens[name];
-    if (tween == null) delete tweens[name];
-    else tweens[name] = tween;
-    return groups;
-  };
-
-  groups.ease = function(value) {
-    if (!arguments.length) return ease;
-    ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
-    return groups;
-  };
-
-  groups.each = function(type, listener) {
-    if (arguments.length < 2) return d3_transition_each.call(groups, type);
-    event[type].add(listener);
-    return groups;
-  };
-
-  d3.timer(function(elapsed) {
-    groups.each(function(d, i, j) {
-      var tweened = [],
-          node = this,
-          delay = groups[j][i].delay,
-          duration = groups[j][i].duration,
-          lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0});
-
-      ++lock.count;
-
-      delay <= elapsed ? start(elapsed) : d3.timer(start, delay, then);
-
-      function start(elapsed) {
-        if (lock.active > id) return stop();
-        lock.active = id;
-
-        for (var tween in tweens) {
-          if (tween = tweens[tween].call(node, d, i)) {
-            tweened.push(tween);
-          }
-        }
-
-        event.start.dispatch.call(node, d, i);
-        if (!tick(elapsed)) d3.timer(tick, 0, then);
-        return 1;
-      }
-
-      function tick(elapsed) {
-        if (lock.active !== id) return stop();
-
-        var t = (elapsed - delay) / duration,
-            e = ease(t),
-            n = tweened.length;
-
-        while (n > 0) {
-          tweened[--n].call(node, e);
-        }
-
-        if (t >= 1) {
-          stop();
-          d3_transitionInheritId = id;
-          event.end.dispatch.call(node, d, i);
-          d3_transitionInheritId = 0;
-          return 1;
-        }
-      }
-
-      function stop() {
-        if (!--lock.count) delete node.__transition__;
-        return 1;
-      }
-    });
-    return 1;
-  }, 0, then);
-
-  return groups;
-}
-
-function d3_transitionTween(b) {
-  return typeof b === "function"
-      ? function(d, i, a) { var v = b.call(this, d, i) + ""; return a != v && d3.interpolate(a, v); }
-      : (b = b + "", function(d, i, a) { return a != b && d3.interpolate(a, b); });
-}
-
-var d3_transitionPrototype = [],
-    d3_transitionId = 0,
-    d3_transitionInheritId = 0,
-    d3_transitionEase = d3.ease("cubic-in-out");
-
-d3_transitionPrototype.call = d3_selectionPrototype.call;
-
-d3.transition = function() {
-  return d3_selectionRoot.transition();
-};
-
-d3.transition.prototype = d3_transitionPrototype;
-d3_transitionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) {
-        if ("__data__" in node.node) subnode.__data__ = node.node.__data__;
-        subgroup.push({node: subnode, delay: node.delay, duration: node.duration});
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node.node, node.node.__data__, i));
-        for (var k = -1, o = subgroup.length; ++k < o;) {
-          subgroup[k] = {node: subgroup[k], delay: node.delay, duration: node.duration};
-        }
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.attr = function(name, value) {
-  return this.attrTween(name, d3_transitionTween(value));
-};
-
-d3_transitionPrototype.attrTween = function(name, tween) {
-  name = d3.ns.qualify(name);
-
-  function attrTween(d, i) {
-    var f = tween.call(this, d, i, this.getAttribute(name));
-    return f && function(t) {
-      this.setAttribute(name, f(t));
-    };
-  }
-
-  function attrTweenNS(d, i) {
-    var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
-    return f && function(t) {
-      this.setAttributeNS(name.space, name.local, f(t));
-    };
-  }
-
-  return this.tween("attr." + name, name.local ? attrTweenNS : attrTween);
-};
-d3_transitionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.styleTween(name, d3_transitionTween(value), priority);
-};
-
-d3_transitionPrototype.styleTween = function(name, tween, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.tween("style." + name, function(d, i) {
-    var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
-    return f && function(t) {
-      this.style.setProperty(name, f(t), priority);
-    };
-  });
-};
-d3_transitionPrototype.text = function(value) {
-  return this.tween("text", function(d, i) {
-    this.textContent = typeof value === "function"
-        ? value.call(this, d, i)
-        : value;
-  });
-};
-d3_transitionPrototype.remove = function() {
-  return this.each("end", function() {
-    var p;
-    if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
-  });
-};
-d3_transitionPrototype.delay = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].delay = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].delay = value; }));
-};
-d3_transitionPrototype.duration = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].duration = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].duration = value; }));
-};
-function d3_transition_each(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) callback.call(node = node.node, node.__data__, i, j);
-    }
-  }
-  return this;
-}
-d3_transitionPrototype.transition = function() {
-  return this.select(d3_this);
-};
-var d3_timer_queue = null,
-    d3_timer_interval, // is an interval (or frame) active?
-    d3_timer_timeout; // is a timeout active?
-
-// The timer will continue to fire until callback returns true.
-d3.timer = function(callback, delay, then) {
-  var found = false,
-      t0,
-      t1 = d3_timer_queue;
-
-  if (arguments.length < 3) {
-    if (arguments.length < 2) delay = 0;
-    else if (!isFinite(delay)) return;
-    then = Date.now();
-  }
-
-  // See if the callback's already in the queue.
-  while (t1) {
-    if (t1.callback === callback) {
-      t1.then = then;
-      t1.delay = delay;
-      found = true;
-      break;
-    }
-    t0 = t1;
-    t1 = t1.next;
-  }
-
-  // Otherwise, add the callback to the queue.
-  if (!found) d3_timer_queue = {
-    callback: callback,
-    then: then,
-    delay: delay,
-    next: d3_timer_queue
-  };
-
-  // Start animatin'!
-  if (!d3_timer_interval) {
-    d3_timer_timeout = clearTimeout(d3_timer_timeout);
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-function d3_timer_step() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  var delay = d3_timer_flush() - now;
-  if (delay > 24) {
-    if (isFinite(delay)) {
-      clearTimeout(d3_timer_timeout);
-      d3_timer_timeout = setTimeout(d3_timer_step, delay);
-    }
-    d3_timer_interval = 0;
-  } else {
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-d3.timer.flush = function() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (!t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  d3_timer_flush();
-};
-
-// Flush after callbacks, to avoid concurrent queue modification.
-function d3_timer_flush() {
-  var t0 = null,
-      t1 = d3_timer_queue,
-      then = Infinity;
-  while (t1) {
-    if (t1.flush) {
-      t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
-    } else {
-      then = Math.min(then, t1.then + t1.delay);
-      t1 = (t0 = t1).next;
-    }
-  }
-  return then;
-}
-
-var d3_timer_frame = window.requestAnimationFrame
-    || window.webkitRequestAnimationFrame
-    || window.mozRequestAnimationFrame
-    || window.oRequestAnimationFrame
-    || window.msRequestAnimationFrame
-    || function(callback) { setTimeout(callback, 17); };
-function d3_noop() {}
-d3.scale = {};
-
-function d3_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-function d3_scale_nice(domain, nice) {
-  var i0 = 0,
-      i1 = domain.length - 1,
-      x0 = domain[i0],
-      x1 = domain[i1],
-      dx;
-
-  if (x1 < x0) {
-    dx = i0; i0 = i1; i1 = dx;
-    dx = x0; x0 = x1; x1 = dx;
-  }
-
-  nice = nice(x1 - x0);
-  domain[i0] = nice.floor(x0);
-  domain[i1] = nice.ceil(x1);
-  return domain;
-}
-
-function d3_scale_niceDefault() {
-  return Math;
-}
-d3.scale.linear = function() {
-  return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false);
-};
-
-function d3_scale_linear(domain, range, interpolate, clamp) {
-  var output,
-      input;
-
-  function rescale() {
-    var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear,
-        uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
-    output = linear(domain, range, uninterpolate, interpolate);
-    input = linear(range, domain, uninterpolate, d3.interpolate);
-    return scale;
-  }
-
-  function scale(x) {
-    return output(x);
-  }
-
-  // Note: requires range is coercible to number!
-  scale.invert = function(y) {
-    return input(y);
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.map(Number);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.rangeRound = function(x) {
-    return scale.range(x).interpolate(d3.interpolateRound);
-  };
-
-  scale.clamp = function(x) {
-    if (!arguments.length) return clamp;
-    clamp = x;
-    return rescale();
-  };
-
-  scale.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolate = x;
-    return rescale();
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(domain, m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(domain, m);
-  };
-
-  scale.nice = function() {
-    d3_scale_nice(domain, d3_scale_linearNice);
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_linear(domain, range, interpolate, clamp);
-  };
-
-  return rescale();
-};
-
-function d3_scale_linearRebind(scale, linear) {
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-  return scale;
-}
-
-function d3_scale_linearNice(dx) {
-  dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
-  return {
-    floor: function(x) { return Math.floor(x / dx) * dx; },
-    ceil: function(x) { return Math.ceil(x / dx) * dx; }
-  };
-}
-
-// TODO Dates? Ugh.
-function d3_scale_linearTickRange(domain, m) {
-  var extent = d3_scaleExtent(domain),
-      span = extent[1] - extent[0],
-      step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
-      err = m / span * step;
-
-  // Filter ticks to get closer to the desired count.
-  if (err <= .15) step *= 10;
-  else if (err <= .35) step *= 5;
-  else if (err <= .75) step *= 2;
-
-  // Round start and stop values to step interval.
-  extent[0] = Math.ceil(extent[0] / step) * step;
-  extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
-  extent[2] = step;
-  return extent;
-}
-
-function d3_scale_linearTicks(domain, m) {
-  return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
-}
-
-function d3_scale_linearTickFormat(domain, m) {
-  return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
-}
-function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
-  var u = uninterpolate(domain[0], domain[1]),
-      i = interpolate(range[0], range[1]);
-  return function(x) {
-    return i(u(x));
-  };
-}
-function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
-  var u = [],
-      i = [],
-      j = 0,
-      n = domain.length;
-
-  while (++j < n) {
-    u.push(uninterpolate(domain[j - 1], domain[j]));
-    i.push(interpolate(range[j - 1], range[j]));
-  }
-
-  return function(x) {
-    var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
-    return i[j](u[j](x));
-  };
-}
-d3.scale.log = function() {
-  return d3_scale_log(d3.scale.linear(), d3_scale_logp);
-};
-
-function d3_scale_log(linear, log) {
-  var pow = log.pow;
-
-  function scale(x) {
-    return linear(log(x));
-  }
-
-  scale.invert = function(x) {
-    return pow(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(pow);
-    log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
-    pow = log.pow;
-    linear.domain(x.map(log));
-    return scale;
-  };
-
-  scale.nice = function() {
-    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
-    return scale;
-  };
-
-  scale.ticks = function() {
-    var extent = d3_scaleExtent(linear.domain()),
-        ticks = [];
-    if (extent.every(isFinite)) {
-      var i = Math.floor(extent[0]),
-          j = Math.ceil(extent[1]),
-          u = pow(extent[0]),
-          v = pow(extent[1]);
-      if (log === d3_scale_logn) {
-        ticks.push(pow(i));
-        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
-      } else {
-        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
-        ticks.push(pow(i));
-      }
-      for (i = 0; ticks[i] < u; i++) {} // strip small values
-      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
-      ticks = ticks.slice(i, j);
-    }
-    return ticks;
-  };
-
-  scale.tickFormat = function() {
-    return d3_scale_logTickFormat;
-  };
-
-  scale.copy = function() {
-    return d3_scale_log(linear.copy(), log);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_logp(x) {
-  return Math.log(x) / Math.LN10;
-}
-
-function d3_scale_logn(x) {
-  return -Math.log(-x) / Math.LN10;
-}
-
-d3_scale_logp.pow = function(x) {
-  return Math.pow(10, x);
-};
-
-d3_scale_logn.pow = function(x) {
-  return -Math.pow(10, -x);
-};
-
-function d3_scale_logTickFormat(d) {
-  return d.toPrecision(1);
-}
-d3.scale.pow = function() {
-  return d3_scale_pow(d3.scale.linear(), 1);
-};
-
-function d3_scale_pow(linear, exponent) {
-  var powp = d3_scale_powPow(exponent),
-      powb = d3_scale_powPow(1 / exponent);
-
-  function scale(x) {
-    return linear(powp(x));
-  }
-
-  scale.invert = function(x) {
-    return powb(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(powb);
-    linear.domain(x.map(powp));
-    return scale;
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(scale.domain(), m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(scale.domain(), m);
-  };
-
-  scale.nice = function() {
-    return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
-  };
-
-  scale.exponent = function(x) {
-    if (!arguments.length) return exponent;
-    var domain = scale.domain();
-    powp = d3_scale_powPow(exponent = x);
-    powb = d3_scale_powPow(1 / exponent);
-    return scale.domain(domain);
-  };
-
-  scale.copy = function() {
-    return d3_scale_pow(linear.copy(), exponent);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_powPow(e) {
-  return function(x) {
-    return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
-  };
-}
-d3.scale.sqrt = function() {
-  return d3.scale.pow().exponent(.5);
-};
-d3.scale.ordinal = function() {
-  return d3_scale_ordinal([], {t: "range", x: []});
-};
-
-function d3_scale_ordinal(domain, ranger) {
-  var index,
-      range,
-      rangeBand;
-
-  function scale(x) {
-    return range[((index[x] || (index[x] = domain.push(x))) - 1) % range.length];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = [];
-    index = {};
-    var i = -1, n = x.length, xi;
-    while (++i < n) if (!index[xi = x[i]]) index[xi] = domain.push(xi);
-    return scale[ranger.t](ranger.x, ranger.p);
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    rangeBand = 0;
-    ranger = {t: "range", x: x};
-    return scale;
-  };
-
-  scale.rangePoints = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length - 1 + padding);
-    range = domain.length < 2 ? [(start + stop) / 2] : d3.range(start + step * padding / 2, stop + step / 2, step);
-    rangeBand = 0;
-    ranger = {t: "rangePoints", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length + padding);
-    range = d3.range(start + step * padding, stop, step);
-    rangeBand = step * (1 - padding);
-    ranger = {t: "rangeBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeRoundBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = Math.floor((stop - start) / (domain.length + padding)),
-        err = stop - start - (domain.length - padding) * step;
-    range = d3.range(start + Math.round(err / 2), stop, step);
-    rangeBand = Math.round(step * (1 - padding));
-    ranger = {t: "rangeRoundBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBand = function() {
-    return rangeBand;
-  };
-
-  scale.copy = function() {
-    return d3_scale_ordinal(domain, ranger);
-  };
-
-  return scale.domain(domain);
-};
-/*
- * This product includes color specifications and designs developed by Cynthia
- * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
- */
-
-d3.scale.category10 = function() {
-  return d3.scale.ordinal().range(d3_category10);
-};
-
-d3.scale.category20 = function() {
-  return d3.scale.ordinal().range(d3_category20);
-};
-
-d3.scale.category20b = function() {
-  return d3.scale.ordinal().range(d3_category20b);
-};
-
-d3.scale.category20c = function() {
-  return d3.scale.ordinal().range(d3_category20c);
-};
-
-var d3_category10 = [
-  "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
-  "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
-];
-
-var d3_category20 = [
-  "#1f77b4", "#aec7e8",
-  "#ff7f0e", "#ffbb78",
-  "#2ca02c", "#98df8a",
-  "#d62728", "#ff9896",
-  "#9467bd", "#c5b0d5",
-  "#8c564b", "#c49c94",
-  "#e377c2", "#f7b6d2",
-  "#7f7f7f", "#c7c7c7",
-  "#bcbd22", "#dbdb8d",
-  "#17becf", "#9edae5"
-];
-
-var d3_category20b = [
-  "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
-  "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
-  "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
-  "#843c39", "#ad494a", "#d6616b", "#e7969c",
-  "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
-];
-
-var d3_category20c = [
-  "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
-  "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
-  "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
-  "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
-  "#636363", "#969696", "#bdbdbd", "#d9d9d9"
-];
-d3.scale.quantile = function() {
-  return d3_scale_quantile([], []);
-};
-
-function d3_scale_quantile(domain, range) {
-  var thresholds;
-
-  function rescale() {
-    var k = 0,
-        n = domain.length,
-        q = range.length;
-    thresholds = [];
-    while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
-    return scale;
-  }
-
-  function scale(x) {
-    if (isNaN(x = +x)) return NaN;
-    return range[d3.bisect(thresholds, x)];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.quantiles = function() {
-    return thresholds;
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantile(domain, range); // copy on write!
-  };
-
-  return rescale();
-};
-d3.scale.quantize = function() {
-  return d3_scale_quantize(0, 1, [0, 1]);
-};
-
-function d3_scale_quantize(x0, x1, range) {
-  var kx, i;
-
-  function scale(x) {
-    return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
-  }
-
-  function rescale() {
-    kx = range.length / (x1 - x0);
-    i = range.length - 1;
-    return scale;
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return [x0, x1];
-    x0 = +x[0];
-    x1 = +x[x.length - 1];
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantize(x0, x1, range); // copy on write
-  };
-
-  return rescale();
-};
-d3.svg = {};
-d3.svg.arc = function() {
-  var innerRadius = d3_svg_arcInnerRadius,
-      outerRadius = d3_svg_arcOuterRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  function arc() {
-    var r0 = innerRadius.apply(this, arguments),
-        r1 = outerRadius.apply(this, arguments),
-        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
-        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
-        da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0),
-        df = da < Math.PI ? "0" : "1",
-        c0 = Math.cos(a0),
-        s0 = Math.sin(a0),
-        c1 = Math.cos(a1),
-        s1 = Math.sin(a1);
-    return da >= d3_svg_arcMax
-      ? (r0
-      ? "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "M0," + r0
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0)
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + r0
-      + "Z"
-      : "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "Z")
-      : (r0
-      ? "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L" + r0 * c1 + "," + r0 * s1
-      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
-      + "Z"
-      : "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L0,0"
-      + "Z");
-  }
-
-  arc.innerRadius = function(v) {
-    if (!arguments.length) return innerRadius;
-    innerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.outerRadius = function(v) {
-    if (!arguments.length) return outerRadius;
-    outerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.centroid = function() {
-    var r = (innerRadius.apply(this, arguments)
-        + outerRadius.apply(this, arguments)) / 2,
-        a = (startAngle.apply(this, arguments)
-        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
-    return [Math.cos(a) * r, Math.sin(a) * r];
-  };
-
-  return arc;
-};
-
-var d3_svg_arcOffset = -Math.PI / 2,
-    d3_svg_arcMax = 2 * Math.PI - 1e-6;
-
-function d3_svg_arcInnerRadius(d) {
-  return d.innerRadius;
-}
-
-function d3_svg_arcOuterRadius(d) {
-  return d.outerRadius;
-}
-
-function d3_svg_arcStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_arcEndAngle(d) {
-  return d.endAngle;
-}
-function d3_svg_line(projection) {
-  var x = d3_svg_lineX,
-      y = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function line(d) {
-    return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
-  }
-
-  line.x = function(v) {
-    if (!arguments.length) return x;
-    x = v;
-    return line;
-  };
-
-  line.y = function(v) {
-    if (!arguments.length) return y;
-    y = v;
-    return line;
-  };
-
-  line.interpolate = function(v) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = v];
-    return line;
-  };
-
-  line.tension = function(v) {
-    if (!arguments.length) return tension;
-    tension = v;
-    return line;
-  };
-
-  return line;
-}
-
-d3.svg.line = function() {
-  return d3_svg_line(Object);
-};
-
-// Converts the specified array of data into an array of points
-// (x-y tuples), by evaluating the specified `x` and `y` functions on each
-// data point. The `this` context of the evaluated functions is the specified
-// "self" object; each function is passed the current datum and index.
-function d3_svg_linePoints(self, d, x, y) {
-  var points = [],
-      i = -1,
-      n = d.length,
-      fx = typeof x === "function",
-      fy = typeof y === "function",
-      value;
-  if (fx && fy) {
-    while (++i < n) points.push([
-      x.call(self, value = d[i], i),
-      y.call(self, value, i)
-    ]);
-  } else if (fx) {
-    while (++i < n) points.push([x.call(self, d[i], i), y]);
-  } else if (fy) {
-    while (++i < n) points.push([x, y.call(self, d[i], i)]);
-  } else {
-    while (++i < n) points.push([x, y]);
-  }
-  return points;
-}
-
-// The default `x` property, which references d[0].
-function d3_svg_lineX(d) {
-  return d[0];
-}
-
-// The default `y` property, which references d[1].
-function d3_svg_lineY(d) {
-  return d[1];
-}
-
-// The various interpolators supported by the `line` class.
-var d3_svg_lineInterpolators = {
-  "linear": d3_svg_lineLinear,
-  "step-before": d3_svg_lineStepBefore,
-  "step-after": d3_svg_lineStepAfter,
-  "basis": d3_svg_lineBasis,
-  "basis-open": d3_svg_lineBasisOpen,
-  "basis-closed": d3_svg_lineBasisClosed,
-  "bundle": d3_svg_lineBundle,
-  "cardinal": d3_svg_lineCardinal,
-  "cardinal-open": d3_svg_lineCardinalOpen,
-  "cardinal-closed": d3_svg_lineCardinalClosed,
-  "monotone": d3_svg_lineMonotone
-};
-
-// Linear interpolation; generates "L" commands.
-function d3_svg_lineLinear(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepBefore(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepAfter(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
-  return path.join("");
-}
-
-// Open cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalOpen(points, tension) {
-  return points.length < 4
-      ? d3_svg_lineLinear(points)
-      : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Closed cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalClosed(points, tension) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
-        d3_svg_lineCardinalTangents([points[points.length - 2]]
-        .concat(points, [points[1]]), tension));
-}
-
-// Cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinal(points, tension, closed) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite(points,
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Hermite spline construction; generates "C" commands.
-function d3_svg_lineHermite(points, tangents) {
-  if (tangents.length < 1
-      || (points.length != tangents.length
-      && points.length != tangents.length + 2)) {
-    return d3_svg_lineLinear(points);
-  }
-
-  var quad = points.length != tangents.length,
-      path = "",
-      p0 = points[0],
-      p = points[1],
-      t0 = tangents[0],
-      t = t0,
-      pi = 1;
-
-  if (quad) {
-    path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
-        + "," + p[0] + "," + p[1];
-    p0 = points[1];
-    pi = 2;
-  }
-
-  if (tangents.length > 1) {
-    t = tangents[1];
-    p = points[pi];
-    pi++;
-    path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
-        + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
-        + "," + p[0] + "," + p[1];
-    for (var i = 2; i < tangents.length; i++, pi++) {
-      p = points[pi];
-      t = tangents[i];
-      path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
-          + "," + p[0] + "," + p[1];
-    }
-  }
-
-  if (quad) {
-    var lp = points[pi];
-    path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
-        + "," + lp[0] + "," + lp[1];
-  }
-
-  return path;
-}
-
-// Generates tangents for a cardinal spline.
-function d3_svg_lineCardinalTangents(points, tension) {
-  var tangents = [],
-      a = (1 - tension) / 2,
-      p0,
-      p1 = points[0],
-      p2 = points[1],
-      i = 1,
-      n = points.length;
-  while (++i < n) {
-    p0 = p1;
-    p1 = p2;
-    p2 = points[i];
-    tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
-  }
-  return tangents;
-}
-
-// B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasis(points) {
-  if (points.length < 3) return d3_svg_lineLinear(points);
-  var path = [],
-      i = 1,
-      n = points.length,
-      pi = points[0],
-      x0 = pi[0],
-      y0 = pi[1],
-      px = [x0, x0, x0, (pi = points[1])[0]],
-      py = [y0, y0, y0, pi[1]];
-  path.push(x0, ",", y0);
-  d3_svg_lineBasisBezier(path, px, py);
-  while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  i = -1;
-  while (++i < 2) {
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Open B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisOpen(points) {
-  if (points.length < 4) return d3_svg_lineLinear(points);
-  var path = [],
-      i = -1,
-      n = points.length,
-      pi,
-      px = [0],
-      py = [0];
-  while (++i < 3) {
-    pi = points[i];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
-    + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
-  --i; while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Closed B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisClosed(points) {
-  var path,
-      i = -1,
-      n = points.length,
-      m = n + 4,
-      pi,
-      px = [],
-      py = [];
-  while (++i < 4) {
-    pi = points[i % n];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path = [
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
-  ];
-  --i; while (++i < m) {
-    pi = points[i % n];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-function d3_svg_lineBundle(points, tension) {
-  var n = points.length - 1,
-      x0 = points[0][0],
-      y0 = points[0][1],
-      dx = points[n][0] - x0,
-      dy = points[n][1] - y0,
-      i = -1,
-      p,
-      t;
-  while (++i <= n) {
-    p = points[i];
-    t = i / n;
-    p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
-    p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
-  }
-  return d3_svg_lineBasis(points);
-}
-
-// Returns the dot product of the given four-element vectors.
-function d3_svg_lineDot4(a, b) {
-  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
-}
-
-// Matrix to transform basis (b-spline) control points to bezier
-// control points. Derived from FvD 11.2.8.
-var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
-    d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
-    d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
-
-// Pushes a "C" Bézier curve onto the specified path array, given the
-// two specified four-element arrays which define the control points.
-function d3_svg_lineBasisBezier(path, x, y) {
-  path.push(
-      "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
-}
-
-// Computes the slope from points p0 to p1.
-function d3_svg_lineSlope(p0, p1) {
-  return (p1[1] - p0[1]) / (p1[0] - p0[0]);
-}
-
-// Compute three-point differences for the given points.
-// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
-function d3_svg_lineFiniteDifferences(points) {
-  var i = 0,
-      j = points.length - 1,
-      m = [],
-      p0 = points[0],
-      p1 = points[1],
-      d = m[0] = d3_svg_lineSlope(p0, p1);
-  while (++i < j) {
-    m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
-  }
-  m[i] = d;
-  return m;
-}
-
-// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
-// interpolation. Returns an array of tangent vectors. For details, see
-// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
-function d3_svg_lineMonotoneTangents(points) {
-  var tangents = [],
-      d,
-      a,
-      b,
-      s,
-      m = d3_svg_lineFiniteDifferences(points),
-      i = -1,
-      j = points.length - 1;
-
-  // The first two steps are done by computing finite-differences:
-  // 1. Compute the slopes of the secant lines between successive points.
-  // 2. Initialize the tangents at every point as the average of the secants.
-
-  // Then, for each segment…
-  while (++i < j) {
-    d = d3_svg_lineSlope(points[i], points[i + 1]);
-
-    // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
-    // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
-    // preserve monotonicity. Ignore step 4 and 5 for those k.
-
-    if (Math.abs(d) < 1e-6) {
-      m[i] = m[i + 1] = 0;
-    } else {
-      // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
-      a = m[i] / d;
-      b = m[i + 1] / d;
-
-      // 5. Prevent overshoot and ensure monotonicity by restricting the
-      // magnitude of vector <ak, bk> to a circle of radius 3.
-      s = a * a + b * b;
-      if (s > 9) {
-        s = d * 3 / Math.sqrt(s);
-        m[i] = s * a;
-        m[i + 1] = s * b;
-      }
-    }
-  }
-
-  // Compute the normalized tangent vector from the slopes. Note that if x is
-  // not monotonic, it's possible that the slope will be infinite, so we protect
-  // against NaN by setting the coordinate to zero.
-  i = -1; while (++i <= j) {
-    s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
-      / (6 * (1 + m[i] * m[i]));
-    tangents.push([s || 0, m[i] * s || 0]);
-  }
-
-  return tangents;
-}
-
-function d3_svg_lineMonotone(points) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] +
-        d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
-}
-d3.svg.line.radial = function() {
-  var line = d3_svg_line(d3_svg_lineRadial);
-  line.radius = line.x, delete line.x;
-  line.angle = line.y, delete line.y;
-  return line;
-};
-
-function d3_svg_lineRadial(points) {
-  var point,
-      i = -1,
-      n = points.length,
-      r,
-      a;
-  while (++i < n) {
-    point = points[i];
-    r = point[0];
-    a = point[1] + d3_svg_arcOffset;
-    point[0] = r * Math.cos(a);
-    point[1] = r * Math.sin(a);
-  }
-  return points;
-}
-function d3_svg_area(projection) {
-  var x0 = d3_svg_lineX,
-      x1 = d3_svg_lineX,
-      y0 = 0,
-      y1 = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function area(d) {
-    if (d.length < 1) return null;
-    var points0 = d3_svg_linePoints(this, d, x0, y0),
-        points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
-    return "M" + interpolator(projection(points1), tension)
-         + "L" + interpolator(projection(points0.reverse()), tension)
-         + "Z";
-  }
-
-  area.x = function(x) {
-    if (!arguments.length) return x1;
-    x0 = x1 = x;
-    return area;
-  };
-
-  area.x0 = function(x) {
-    if (!arguments.length) return x0;
-    x0 = x;
-    return area;
-  };
-
-  area.x1 = function(x) {
-    if (!arguments.length) return x1;
-    x1 = x;
-    return area;
-  };
-
-  area.y = function(y) {
-    if (!arguments.length) return y1;
-    y0 = y1 = y;
-    return area;
-  };
-
-  area.y0 = function(y) {
-    if (!arguments.length) return y0;
-    y0 = y;
-    return area;
-  };
-
-  area.y1 = function(y) {
-    if (!arguments.length) return y1;
-    y1 = y;
-    return area;
-  };
-
-  area.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = x];
-    return area;
-  };
-
-  area.tension = function(x) {
-    if (!arguments.length) return tension;
-    tension = x;
-    return area;
-  };
-
-  return area;
-}
-
-d3.svg.area = function() {
-  return d3_svg_area(Object);
-};
-
-function d3_svg_areaX(points) {
-  return function(d, i) {
-    return points[i][0];
-  };
-}
-
-function d3_svg_areaY(points) {
-  return function(d, i) {
-    return points[i][1];
-  };
-}
-d3.svg.area.radial = function() {
-  var area = d3_svg_area(d3_svg_lineRadial);
-  area.radius = area.x, delete area.x;
-  area.innerRadius = area.x0, delete area.x0;
-  area.outerRadius = area.x1, delete area.x1;
-  area.angle = area.y, delete area.y;
-  area.startAngle = area.y0, delete area.y0;
-  area.endAngle = area.y1, delete area.y1;
-  return area;
-};
-d3.svg.chord = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      radius = d3_svg_chordRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  // TODO Allow control point to be customized.
-
-  function chord(d, i) {
-    var s = subgroup(this, source, d, i),
-        t = subgroup(this, target, d, i);
-    return "M" + s.p0
-      + arc(s.r, s.p1) + (equals(s, t)
-      ? curve(s.r, s.p1, s.r, s.p0)
-      : curve(s.r, s.p1, t.r, t.p0)
-      + arc(t.r, t.p1)
-      + curve(t.r, t.p1, s.r, s.p0))
-      + "Z";
-  }
-
-  function subgroup(self, f, d, i) {
-    var subgroup = f.call(self, d, i),
-        r = radius.call(self, subgroup, i),
-        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
-        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
-    return {
-      r: r,
-      a0: a0,
-      a1: a1,
-      p0: [r * Math.cos(a0), r * Math.sin(a0)],
-      p1: [r * Math.cos(a1), r * Math.sin(a1)]
-    };
-  }
-
-  function equals(a, b) {
-    return a.a0 == b.a0 && a.a1 == b.a1;
-  }
-
-  function arc(r, p) {
-    return "A" + r + "," + r + " 0 0,1 " + p;
-  }
-
-  function curve(r0, p0, r1, p1) {
-    return "Q 0,0 " + p1;
-  }
-
-  chord.radius = function(v) {
-    if (!arguments.length) return radius;
-    radius = d3.functor(v);
-    return chord;
-  };
-
-  chord.source = function(v) {
-    if (!arguments.length) return source;
-    source = d3.functor(v);
-    return chord;
-  };
-
-  chord.target = function(v) {
-    if (!arguments.length) return target;
-    target = d3.functor(v);
-    return chord;
-  };
-
-  chord.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return chord;
-  };
-
-  chord.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return chord;
-  };
-
-  return chord;
-};
-
-function d3_svg_chordSource(d) {
-  return d.source;
-}
-
-function d3_svg_chordTarget(d) {
-  return d.target;
-}
-
-function d3_svg_chordRadius(d) {
-  return d.radius;
-}
-
-function d3_svg_chordStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_chordEndAngle(d) {
-  return d.endAngle;
-}
-d3.svg.diagonal = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      projection = d3_svg_diagonalProjection;
-
-  function diagonal(d, i) {
-    var p0 = source.call(this, d, i),
-        p3 = target.call(this, d, i),
-        m = (p0.y + p3.y) / 2,
-        p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
-    p = p.map(projection);
-    return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
-  }
-
-  diagonal.source = function(x) {
-    if (!arguments.length) return source;
-    source = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.target = function(x) {
-    if (!arguments.length) return target;
-    target = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.projection = function(x) {
-    if (!arguments.length) return projection;
-    projection = x;
-    return diagonal;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalProjection(d) {
-  return [d.x, d.y];
-}
-d3.svg.diagonal.radial = function() {
-  var diagonal = d3.svg.diagonal(),
-      projection = d3_svg_diagonalProjection,
-      projection_ = diagonal.projection;
-
-  diagonal.projection = function(x) {
-    return arguments.length
-        ? projection_(d3_svg_diagonalRadialProjection(projection = x))
-        : projection;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalRadialProjection(projection) {
-  return function() {
-    var d = projection.apply(this, arguments),
-        r = d[0],
-        a = d[1] + d3_svg_arcOffset;
-    return [r * Math.cos(a), r * Math.sin(a)];
-  };
-}
-d3.svg.mouse = function(container) {
-  return d3_svg_mousePoint(container, d3.event);
-};
-
-// https://bugs.webkit.org/show_bug.cgi?id=44083
-var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
-
-function d3_svg_mousePoint(container, e) {
-  var point = (container.ownerSVGElement || container).createSVGPoint();
-  if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
-    var svg = d3.select(document.body)
-      .append("svg:svg")
-        .style("position", "absolute")
-        .style("top", 0)
-        .style("left", 0);
-    var ctm = svg[0][0].getScreenCTM();
-    d3_mouse_bug44083 = !(ctm.f || ctm.e);
-    svg.remove();
-  }
-  if (d3_mouse_bug44083) {
-    point.x = e.pageX;
-    point.y = e.pageY;
-  } else {
-    point.x = e.clientX;
-    point.y = e.clientY;
-  }
-  point = point.matrixTransform(container.getScreenCTM().inverse());
-  return [point.x, point.y];
-};
-d3.svg.touches = function(container) {
-  var touches = d3.event.touches;
-  return touches ? Array.prototype.map.call(touches, function(touch) {
-    var point = d3_svg_mousePoint(container, touch);
-    point.identifier = touch.identifier;
-    return point;
-  }) : [];
-};
-d3.svg.symbol = function() {
-  var type = d3_svg_symbolType,
-      size = d3_svg_symbolSize;
-
-  function symbol(d, i) {
-    return (d3_svg_symbols[type.call(this, d, i)]
-        || d3_svg_symbols.circle)
-        (size.call(this, d, i));
-  }
-
-  symbol.type = function(x) {
-    if (!arguments.length) return type;
-    type = d3.functor(x);
-    return symbol;
-  };
-
-  // size of symbol in square pixels
-  symbol.size = function(x) {
-    if (!arguments.length) return size;
-    size = d3.functor(x);
-    return symbol;
-  };
-
-  return symbol;
-};
-
-function d3_svg_symbolSize() {
-  return 64;
-}
-
-function d3_svg_symbolType() {
-  return "circle";
-}
-
-// TODO cross-diagonal?
-var d3_svg_symbols = {
-  "circle": function(size) {
-    var r = Math.sqrt(size / Math.PI);
-    return "M0," + r
-        + "A" + r + "," + r + " 0 1,1 0," + (-r)
-        + "A" + r + "," + r + " 0 1,1 0," + r
-        + "Z";
-  },
-  "cross": function(size) {
-    var r = Math.sqrt(size / 5) / 2;
-    return "M" + -3 * r + "," + -r
-        + "H" + -r
-        + "V" + -3 * r
-        + "H" + r
-        + "V" + -r
-        + "H" + 3 * r
-        + "V" + r
-        + "H" + r
-        + "V" + 3 * r
-        + "H" + -r
-        + "V" + r
-        + "H" + -3 * r
-        + "Z";
-  },
-  "diamond": function(size) {
-    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
-        rx = ry * d3_svg_symbolTan30;
-    return "M0," + -ry
-        + "L" + rx + ",0"
-        + " 0," + ry
-        + " " + -rx + ",0"
-        + "Z";
-  },
-  "square": function(size) {
-    var r = Math.sqrt(size) / 2;
-    return "M" + -r + "," + -r
-        + "L" + r + "," + -r
-        + " " + r + "," + r
-        + " " + -r + "," + r
-        + "Z";
-  },
-  "triangle-down": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + ry
-        + "L" + rx +"," + -ry
-        + " " + -rx + "," + -ry
-        + "Z";
-  },
-  "triangle-up": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + -ry
-        + "L" + rx +"," + ry
-        + " " + -rx + "," + ry
-        + "Z";
-  }
-};
-
-d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
-
-var d3_svg_symbolSqrt3 = Math.sqrt(3),
-    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
-d3.svg.axis = function() {
-  var scale = d3.scale.linear(),
-      orient = "bottom",
-      tickMajorSize = 6,
-      tickMinorSize = 6,
-      tickEndSize = 6,
-      tickPadding = 3,
-      tickArguments_ = [10],
-      tickFormat_,
-      tickSubdivide = 0;
-
-  function axis(selection) {
-    selection.each(function(d, i, j) {
-      var g = d3.select(this);
-
-      // Ticks.
-      var ticks = scale.ticks.apply(scale, tickArguments_),
-          tickFormat = tickFormat_ == null ? scale.tickFormat.apply(scale, tickArguments_) : tickFormat_;
-
-      // Minor ticks.
-      var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
-          subtick = g.selectAll(".minor").data(subticks, String),
-          subtickEnter = subtick.enter().insert("svg:line", "g").attr("class", "tick minor").style("opacity", 1e-6),
-          subtickExit = transition(subtick.exit()).style("opacity", 1e-6).remove(),
-          subtickUpdate = transition(subtick).style("opacity", 1);
-
-      // Major ticks.
-      var tick = g.selectAll("g").data(ticks, String),
-          tickEnter = tick.enter().insert("svg:g", "path").style("opacity", 1e-6),
-          tickExit = transition(tick.exit()).style("opacity", 1e-6).remove(),
-          tickUpdate = transition(tick).style("opacity", 1),
-          tickTransform;
-
-      // Domain.
-      var range = d3_scaleExtent(scale.range()),
-          path = g.selectAll(".domain").data([0]),
-          pathEnter = path.enter().append("svg:path").attr("class", "domain"),
-          pathUpdate = transition(path);
-
-      // Stash the new scale and grab the old scale.
-      var scale0 = this.__chart__ || scale;
-      this.__chart__ = scale.copy();
-
-      tickEnter.append("svg:line").attr("class", "tick");
-      tickEnter.append("svg:text");
-      tickUpdate.select("text").text(tickFormat);
-
-      switch (orient) {
-        case "bottom": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".71em").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", tickMajorSize);
-          tickUpdate.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
-          break;
-        }
-        case "top": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", -tickMinorSize);
-          tickEnter.select("text").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", -tickMajorSize);
-          tickUpdate.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
-          break;
-        }
-        case "left": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", -tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em").attr("text-anchor", "end");
-          tickUpdate.select("line").attr("x2", -tickMajorSize);
-          tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
-          break;
-        }
-        case "right": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em");
-          tickUpdate.select("line").attr("x2", tickMajorSize);
-          tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
-          break;
-        }
-      }
-
-      tickEnter.call(tickTransform, scale0);
-      tickUpdate.call(tickTransform, scale);
-      tickExit.call(tickTransform, scale);
-
-      subtickEnter.call(tickTransform, scale0);
-      subtickUpdate.call(tickTransform, scale);
-      subtickExit.call(tickTransform, scale);
-
-      function transition(o) {
-        return selection.delay ? o.transition()
-            .delay(selection[j][i].delay)
-            .duration(selection[j][i].duration)
-            .ease(selection.ease()) : o;
-      }
-    });
-  }
-
-  axis.scale = function(x) {
-    if (!arguments.length) return scale;
-    scale = x;
-    return axis;
-  };
-
-  axis.orient = function(x) {
-    if (!arguments.length) return orient;
-    orient = x;
-    return axis;
-  };
-
-  axis.ticks = function() {
-    if (!arguments.length) return tickArguments_;
-    tickArguments_ = arguments;
-    return axis;
-  };
-
-  axis.tickFormat = function(x) {
-    if (!arguments.length) return tickFormat_;
-    tickFormat_ = x;
-    return axis;
-  };
-
-  axis.tickSize = function(x, y, z) {
-    if (!arguments.length) return tickMajorSize;
-    var n = arguments.length - 1;
-    tickMajorSize = +x;
-    tickMinorSize = n > 1 ? +y : tickMajorSize;
-    tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
-    return axis;
-  };
-
-  axis.tickPadding = function(x) {
-    if (!arguments.length) return tickPadding;
-    tickPadding = +x;
-    return axis;
-  };
-
-  axis.tickSubdivide = function(x) {
-    if (!arguments.length) return tickSubdivide;
-    tickSubdivide = +x;
-    return axis;
-  };
-
-  return axis;
-};
-
-function d3_svg_axisX(selection, x) {
-  selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
-}
-
-function d3_svg_axisY(selection, y) {
-  selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; });
-}
-
-function d3_svg_axisSubdivide(scale, ticks, m) {
-  subticks = [];
-  if (m && ticks.length > 1) {
-    var extent = d3_scaleExtent(scale.domain()),
-        subticks,
-        i = -1,
-        n = ticks.length,
-        d = (ticks[1] - ticks[0]) / ++m,
-        j,
-        v;
-    while (++i < n) {
-      for (j = m; --j > 0;) {
-        if ((v = +ticks[i] - j * d) >= extent[0]) {
-          subticks.push(v);
-        }
-      }
-    }
-    for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) {
-      subticks.push(v);
-    }
-  }
-  return subticks;
-}
-d3.behavior = {};
-d3.behavior.drag = function() {
-  var event = d3.dispatch("drag", "dragstart", "dragend");
-
-  function drag() {
-    this
-        .on("mousedown.drag", mousedown)
-        .on("touchstart.drag", mousedown);
-
-    d3.select(window)
-        .on("mousemove.drag", d3_behavior_dragMove)
-        .on("touchmove.drag", d3_behavior_dragMove)
-        .on("mouseup.drag", d3_behavior_dragUp, true)
-        .on("touchend.drag", d3_behavior_dragUp, true)
-        .on("click.drag", d3_behavior_dragClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_dragEvent = event;
-    d3_behavior_dragOffset = d3_behavior_dragPoint((d3_behavior_dragTarget = this).parentNode);
-    d3_behavior_dragMoved = 0;
-    d3_behavior_dragArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_dragDispatch("dragstart");
-  }
-
-  drag.on = function(type, listener) {
-    event[type].add(listener);
-    return drag;
-  };
-
-  return drag;
-};
-
-var d3_behavior_dragEvent,
-    d3_behavior_dragTarget,
-    d3_behavior_dragArguments,
-    d3_behavior_dragOffset,
-    d3_behavior_dragMoved,
-    d3_behavior_dragStopClick;
-
-function d3_behavior_dragDispatch(type) {
-  var o = d3.event, p = d3_behavior_dragTarget.parentNode, dx = 0, dy = 0;
-
-  if (p) {
-    p = d3_behavior_dragPoint(p);
-    dx = p[0] - d3_behavior_dragOffset[0];
-    dy = p[1] - d3_behavior_dragOffset[1];
-    d3_behavior_dragOffset = p;
-    d3_behavior_dragMoved |= dx | dy;
-  }
-
-  try {
-    d3.event = {dx: dx, dy: dy};
-    d3_behavior_dragEvent[type].dispatch.apply(d3_behavior_dragTarget, d3_behavior_dragArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-
-function d3_behavior_dragPoint(container) {
-  return d3.event.touches
-      ? d3.svg.touches(container)[0]
-      : d3.svg.mouse(container);
-}
-
-function d3_behavior_dragMove() {
-  if (!d3_behavior_dragTarget) return;
-  var parent = d3_behavior_dragTarget.parentNode;
-
-  // O NOES! The drag element was removed from the DOM.
-  if (!parent) return d3_behavior_dragUp();
-
-  d3_behavior_dragDispatch("drag");
-  d3_behavior_dragCancel();
-}
-
-function d3_behavior_dragUp() {
-  if (!d3_behavior_dragTarget) return;
-  d3_behavior_dragDispatch("dragend");
-  d3_behavior_dragTarget = null;
-
-  // If the node was moved, prevent the mouseup from propagating.
-  // Also prevent the subsequent click from propagating (e.g., for anchors).
-  if (d3_behavior_dragMoved) {
-    d3_behavior_dragStopClick = true;
-    d3_behavior_dragCancel();
-  }
-}
-
-function d3_behavior_dragClick() {
-  if (d3_behavior_dragStopClick) {
-    d3_behavior_dragCancel();
-    d3_behavior_dragStopClick = false;
-  }
-}
-
-function d3_behavior_dragCancel() {
-  d3.event.stopPropagation();
-  d3.event.preventDefault();
-}
-// TODO unbind zoom behavior?
-// TODO unbind listener?
-d3.behavior.zoom = function() {
-  var xyz = [0, 0, 0],
-      event = d3.dispatch("zoom");
-
-  function zoom() {
-    this
-        .on("mousedown.zoom", mousedown)
-        .on("mousewheel.zoom", mousewheel)
-        .on("DOMMouseScroll.zoom", mousewheel)
-        .on("dblclick.zoom", dblclick)
-        .on("touchstart.zoom", touchstart);
-
-    d3.select(window)
-        .on("mousemove.zoom", d3_behavior_zoomMousemove)
-        .on("mouseup.zoom", d3_behavior_zoomMouseup)
-        .on("touchmove.zoom", d3_behavior_zoomTouchmove)
-        .on("touchend.zoom", d3_behavior_zoomTouchup)
-        .on("click.zoom", d3_behavior_zoomClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_zoomXyz = xyz;
-    d3_behavior_zoomDispatch = event.zoom.dispatch;
-    d3_behavior_zoomTarget = this;
-    d3_behavior_zoomArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomMoved = false;
-    d3.event.preventDefault();
-    window.focus();
-  }
-
-  // store starting mouse location
-  function mousewheel() {
-    start.apply(this, arguments);
-    if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming);
-  }
-
-  function dblclick() {
-    start.apply(this, arguments);
-    var mouse = d3.svg.mouse(d3_behavior_zoomTarget);
-    d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse));
-  }
-
-  // doubletap detection
-  function touchstart() {
-    start.apply(this, arguments);
-    var touches = d3_behavior_zoomTouchup(),
-        touch,
-        now = Date.now();
-    if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) {
-      d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]);
-    }
-    d3_behavior_zoomLast = now;
-  }
-
-  zoom.on = function(type, listener) {
-    event[type].add(listener);
-    return zoom;
-  };
-
-  return zoom;
-};
-
-var d3_behavior_zoomDiv,
-    d3_behavior_zoomPanning,
-    d3_behavior_zoomZooming,
-    d3_behavior_zoomLocations = {}, // identifier -> location
-    d3_behavior_zoomLast = 0,
-    d3_behavior_zoomXyz,
-    d3_behavior_zoomDispatch,
-    d3_behavior_zoomTarget,
-    d3_behavior_zoomArguments,
-    d3_behavior_zoomMoved,
-    d3_behavior_zoomStopClick;
-
-function d3_behavior_zoomLocation(point) {
-  return [
-    point[0] - d3_behavior_zoomXyz[0],
-    point[1] - d3_behavior_zoomXyz[1],
-    d3_behavior_zoomXyz[2]
-  ];
-}
-
-// detect the pixels that would be scrolled by this wheel event
-function d3_behavior_zoomDelta() {
-
-  // mousewheel events are totally broken!
-  // https://bugs.webkit.org/show_bug.cgi?id=40441
-  // not only that, but Chrome and Safari differ in re. to acceleration!
-  if (!d3_behavior_zoomDiv) {
-    d3_behavior_zoomDiv = d3.select("body").append("div")
-        .style("visibility", "hidden")
-        .style("top", 0)
-        .style("height", 0)
-        .style("width", 0)
-        .style("overflow-y", "scroll")
-      .append("div")
-        .style("height", "2000px")
-      .node().parentNode;
-  }
-
-  var e = d3.event, delta;
-  try {
-    d3_behavior_zoomDiv.scrollTop = 1000;
-    d3_behavior_zoomDiv.dispatchEvent(e);
-    delta = 1000 - d3_behavior_zoomDiv.scrollTop;
-  } catch (error) {
-    delta = e.wheelDelta || (-e.detail * 5);
-  }
-
-  return delta * .005;
-}
-
-// Note: Since we don't rotate, it's possible for the touches to become
-// slightly detached from their original positions. Thus, we recompute the
-// touch points on touchend as well as touchstart!
-function d3_behavior_zoomTouchup() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget),
-      i = -1,
-      n = touches.length,
-      touch;
-  while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch);
-  return touches;
-}
-
-function d3_behavior_zoomTouchmove() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget);
-  switch (touches.length) {
-
-    // single-touch pan
-    case 1: {
-      var touch = touches[0];
-      d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]);
-      break;
-    }
-
-    // double-touch pan + zoom
-    case 2: {
-      var p0 = touches[0],
-          p1 = touches[1],
-          p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2],
-          l0 = d3_behavior_zoomLocations[p0.identifier],
-          l1 = d3_behavior_zoomLocations[p1.identifier],
-          l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]];
-      d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2);
-      break;
-    }
-  }
-}
-
-function d3_behavior_zoomMousemove() {
-  d3_behavior_zoomZooming = null;
-  if (d3_behavior_zoomPanning) {
-    d3_behavior_zoomMoved = true;
-    d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
-  }
-}
-
-function d3_behavior_zoomMouseup() {
-  if (d3_behavior_zoomPanning) {
-    if (d3_behavior_zoomMoved) d3_behavior_zoomStopClick = true;
-    d3_behavior_zoomMousemove();
-    d3_behavior_zoomPanning = null;
-  }
-}
-
-function d3_behavior_zoomClick() {
-  if (d3_behavior_zoomStopClick) {
-    d3.event.stopPropagation();
-    d3.event.preventDefault();
-    d3_behavior_zoomStopClick = false;
-  }
-}
-
-function d3_behavior_zoomTo(z, x0, x1) {
-  var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]),
-      x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0],
-      y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1],
-      o = d3.event, // Events can be reentrant (e.g., focus).
-      k = Math.pow(2, z);
-
-  d3.event = {
-    scale: k,
-    translate: [x, y],
-    transform: function(sx, sy) {
-      if (sx) transform(sx, x);
-      if (sy) transform(sy, y);
-    }
-  };
-
-  function transform(scale, o) {
-    var domain = scale.__domain || (scale.__domain = scale.domain()),
-        range = scale.range().map(function(v) { return (v - o) / k; });
-    scale.domain(domain).domain(range.map(scale.invert));
-  }
-
-  try {
-    d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-})();
diff --git a/plasmid/source-lsi/html/d3.layout.js b/plasmid/source-lsi/html/d3.layout.js
deleted file mode 100755
index 6cc1d7161677597ae7f718a4c0cafb90a240a56a..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/d3.layout.js
+++ /dev/null
@@ -1,1865 +0,0 @@
-(function(){d3.layout = {};
-// Implements hierarchical edge bundling using Holten's algorithm. For each
-// input link, a path is computed that travels through the tree, up the parent
-// hierarchy to the least common ancestor, and then back down to the destination
-// node. Each path is simply an array of nodes.
-d3.layout.bundle = function() {
-  return function(links) {
-    var paths = [],
-        i = -1,
-        n = links.length;
-    while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
-    return paths;
-  };
-};
-
-function d3_layout_bundlePath(link) {
-  var start = link.source,
-      end = link.target,
-      lca = d3_layout_bundleLeastCommonAncestor(start, end),
-      points = [start];
-  while (start !== lca) {
-    start = start.parent;
-    points.push(start);
-  }
-  var k = points.length;
-  while (end !== lca) {
-    points.splice(k, 0, end);
-    end = end.parent;
-  }
-  return points;
-}
-
-function d3_layout_bundleAncestors(node) {
-  var ancestors = [],
-      parent = node.parent;
-  while (parent != null) {
-    ancestors.push(node);
-    node = parent;
-    parent = parent.parent;
-  }
-  ancestors.push(node);
-  return ancestors;
-}
-
-function d3_layout_bundleLeastCommonAncestor(a, b) {
-  if (a === b) return a;
-  var aNodes = d3_layout_bundleAncestors(a),
-      bNodes = d3_layout_bundleAncestors(b),
-      aNode = aNodes.pop(),
-      bNode = bNodes.pop(),
-      sharedNode = null;
-  while (aNode === bNode) {
-    sharedNode = aNode;
-    aNode = aNodes.pop();
-    bNode = bNodes.pop();
-  }
-  return sharedNode;
-}
-d3.layout.chord = function() {
-  var chord = {},
-      chords,
-      groups,
-      matrix,
-      n,
-      padding = 0,
-      sortGroups,
-      sortSubgroups,
-      sortChords;
-
-  function relayout() {
-    var subgroups = {},
-        groupSums = [],
-        groupIndex = d3.range(n),
-        subgroupIndex = [],
-        k,
-        x,
-        x0,
-        i,
-        j;
-
-    chords = [];
-    groups = [];
-
-    // Compute the sum.
-    k = 0, i = -1; while (++i < n) {
-      x = 0, j = -1; while (++j < n) {
-        x += matrix[i][j];
-      }
-      groupSums.push(x);
-      subgroupIndex.push(d3.range(n));
-      k += x;
-    }
-
-    // Sort groups…
-    if (sortGroups) {
-      groupIndex.sort(function(a, b) {
-        return sortGroups(groupSums[a], groupSums[b]);
-      });
-    }
-
-    // Sort subgroups…
-    if (sortSubgroups) {
-      subgroupIndex.forEach(function(d, i) {
-        d.sort(function(a, b) {
-          return sortSubgroups(matrix[i][a], matrix[i][b]);
-        });
-      });
-    }
-
-    // Convert the sum to scaling factor for [0, 2pi].
-    // TODO Allow start and end angle to be specified.
-    // TODO Allow padding to be specified as percentage?
-    k = (2 * Math.PI - padding * n) / k;
-
-    // Compute the start and end angle for each group and subgroup.
-    x = 0, i = -1; while (++i < n) {
-      x0 = x, j = -1; while (++j < n) {
-        var di = groupIndex[i],
-            dj = subgroupIndex[i][j],
-            v = matrix[di][dj];
-        subgroups[di + "-" + dj] = {
-          index: di,
-          subindex: dj,
-          startAngle: x,
-          endAngle: x += v * k,
-          value: v
-        };
-      }
-      groups.push({
-        index: di,
-        startAngle: x0,
-        endAngle: x,
-        value: (x - x0) / k
-      });
-      x += padding;
-    }
-
-    // Generate chords for each (non-empty) subgroup-subgroup link.
-    i = -1; while (++i < n) {
-      j = i - 1; while (++j < n) {
-        var source = subgroups[i + "-" + j],
-            target = subgroups[j + "-" + i];
-        if (source.value || target.value) {
-          chords.push(source.value < target.value
-              ? {source: target, target: source}
-              : {source: source, target: target});
-        }
-      }
-    }
-
-    if (sortChords) resort();
-  }
-
-  function resort() {
-    chords.sort(function(a, b) {
-      return sortChords(a.target.value, b.target.value);
-    });
-  }
-
-  chord.matrix = function(x) {
-    if (!arguments.length) return matrix;
-    n = (matrix = x) && matrix.length;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.padding = function(x) {
-    if (!arguments.length) return padding;
-    padding = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortGroups = function(x) {
-    if (!arguments.length) return sortGroups;
-    sortGroups = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortSubgroups = function(x) {
-    if (!arguments.length) return sortSubgroups;
-    sortSubgroups = x;
-    chords = null;
-    return chord;
-  };
-
-  chord.sortChords = function(x) {
-    if (!arguments.length) return sortChords;
-    sortChords = x;
-    if (chords) resort();
-    return chord;
-  };
-
-  chord.chords = function() {
-    if (!chords) relayout();
-    return chords;
-  };
-
-  chord.groups = function() {
-    if (!groups) relayout();
-    return groups;
-  };
-
-  return chord;
-};
-// A rudimentary force layout using Gauss-Seidel.
-d3.layout.force = function() {
-  var force = {},
-      event = d3.dispatch("tick"),
-      size = [1, 1],
-      drag,
-      alpha,
-      friction = .9,
-      linkDistance = d3_layout_forceLinkDistance,
-      linkStrength = d3_layout_forceLinkStrength,
-      charge = -30,
-      gravity = .1,
-      theta = .8,
-      interval,
-      nodes = [],
-      links = [],
-      distances,
-      strengths;
-
-  function repulse(node, kc) {
-    return function(quad, x1, y1, x2, y2) {
-      if (quad.point !== node) {
-        var dx = quad.cx - node.x,
-            dy = quad.cy - node.y,
-            dn = 1 / Math.sqrt(dx * dx + dy * dy);
-
-        /* Barnes-Hut criterion. */
-        if ((x2 - x1) * dn < theta) {
-          var k = kc * quad.count * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-          return true;
-        }
-
-        if (quad.point && isFinite(dn)) {
-          var k = kc * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-        }
-      }
-    };
-  }
-
-  function tick() {
-    var n = nodes.length,
-        m = links.length,
-        q,
-        i, // current index
-        o, // current object
-        s, // current source
-        t, // current target
-        l, // current distance
-        k, // current force
-        x, // x-distance
-        y; // y-distance
-
-    // gauss-seidel relaxation for links
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      s = o.source;
-      t = o.target;
-      x = t.x - s.x;
-      y = t.y - s.y;
-      if (l = (x * x + y * y)) {
-        l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
-        x *= l;
-        y *= l;
-        t.x -= x * (k = s.weight / (t.weight + s.weight));
-        t.y -= y * k;
-        s.x += x * (k = 1 - k);
-        s.y += y * k;
-      }
-    }
-
-    // apply gravity forces
-    if (k = alpha * gravity) {
-      x = size[0] / 2;
-      y = size[1] / 2;
-      i = -1; if (k) while (++i < n) {
-        o = nodes[i];
-        o.x += (x - o.x) * k;
-        o.y += (y - o.y) * k;
-      }
-    }
-
-    // compute quadtree center of mass and apply charge forces
-    if (k = alpha * charge) {
-      d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes));
-      i = -1; while (++i < n) {
-        if (!(o = nodes[i]).fixed) {
-          q.visit(repulse(o, k));
-        }
-      }
-    }
-
-    // position verlet integration
-    i = -1; while (++i < n) {
-      o = nodes[i];
-      if (o.fixed) {
-        o.x = o.px;
-        o.y = o.py;
-      } else {
-        o.x -= (o.px - (o.px = o.x)) * friction;
-        o.y -= (o.py - (o.py = o.y)) * friction;
-      }
-    }
-
-    event.tick.dispatch({type: "tick", alpha: alpha});
-
-    // simulated annealing, basically
-    return (alpha *= .99) < .005;
-  }
-
-  force.on = function(type, listener) {
-    event[type].add(listener);
-    return force;
-  };
-
-  force.nodes = function(x) {
-    if (!arguments.length) return nodes;
-    nodes = x;
-    return force;
-  };
-
-  force.links = function(x) {
-    if (!arguments.length) return links;
-    links = x;
-    return force;
-  };
-
-  force.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return force;
-  };
-
-  force.linkDistance = function(x) {
-    if (!arguments.length) return linkDistance;
-    linkDistance = d3.functor(x);
-    return force;
-  };
-
-  // For backwards-compatibility.
-  force.distance = force.linkDistance;
-
-  force.linkStrength = function(x) {
-    if (!arguments.length) return linkStrength;
-    linkStrength = d3.functor(x);
-    return force;
-  };
-
-  force.friction = function(x) {
-    if (!arguments.length) return friction;
-    friction = x;
-    return force;
-  };
-
-  force.charge = function(x) {
-    if (!arguments.length) return charge;
-    charge = x;
-    return force;
-  };
-
-  force.gravity = function(x) {
-    if (!arguments.length) return gravity;
-    gravity = x;
-    return force;
-  };
-
-  force.theta = function(x) {
-    if (!arguments.length) return theta;
-    theta = x;
-    return force;
-  };
-
-  force.start = function() {
-    var i,
-        j,
-        n = nodes.length,
-        m = links.length,
-        w = size[0],
-        h = size[1],
-        neighbors,
-        o;
-
-    for (i = 0; i < n; ++i) {
-      (o = nodes[i]).index = i;
-      o.weight = 0;
-    }
-
-    distances = [];
-    strengths = [];
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      if (typeof o.source == "number") o.source = nodes[o.source];
-      if (typeof o.target == "number") o.target = nodes[o.target];
-      distances[i] = linkDistance.call(this, o, i);
-      strengths[i] = linkStrength.call(this, o, i);
-      ++o.source.weight;
-      ++o.target.weight;
-    }
-
-    for (i = 0; i < n; ++i) {
-      o = nodes[i];
-      if (isNaN(o.x)) o.x = position("x", w);
-      if (isNaN(o.y)) o.y = position("y", h);
-      if (isNaN(o.px)) o.px = o.x;
-      if (isNaN(o.py)) o.py = o.y;
-    }
-
-    // initialize node position based on first neighbor
-    function position(dimension, size) {
-      var neighbors = neighbor(i),
-          j = -1,
-          m = neighbors.length,
-          x;
-      while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
-      return Math.random() * size;
-    }
-
-    // initialize neighbors lazily
-    function neighbor() {
-      if (!neighbors) {
-        neighbors = [];
-        for (j = 0; j < n; ++j) {
-          neighbors[j] = [];
-        }
-        for (j = 0; j < m; ++j) {
-          var o = links[j];
-          neighbors[o.source.index].push(o.target);
-          neighbors[o.target.index].push(o.source);
-        }
-      }
-      return neighbors[i];
-    }
-
-    return force.resume();
-  };
-
-  force.resume = function() {
-    alpha = .1;
-    d3.timer(tick);
-    return force;
-  };
-
-  force.stop = function() {
-    alpha = 0;
-    return force;
-  };
-
-  // use `node.call(force.drag)` to make nodes draggable
-  force.drag = function() {
-    if (!drag) drag = d3.behavior.drag()
-        .on("dragstart", dragstart)
-        .on("drag", d3_layout_forceDrag)
-        .on("dragend", d3_layout_forceDragEnd);
-
-    this.on("mouseover.force", d3_layout_forceDragOver)
-        .on("mouseout.force", d3_layout_forceDragOut)
-        .call(drag);
-  };
-
-  function dragstart(d) {
-    d3_layout_forceDragOver(d3_layout_forceDragNode = d);
-    d3_layout_forceDragForce = force;
-  }
-
-  return force;
-};
-
-var d3_layout_forceDragForce,
-    d3_layout_forceDragNode;
-
-function d3_layout_forceDragOver(d) {
-  d.fixed |= 2;
-}
-
-function d3_layout_forceDragOut(d) {
-  if (d !== d3_layout_forceDragNode) d.fixed &= 1;
-}
-
-function d3_layout_forceDragEnd() {
-  d3_layout_forceDrag();
-  d3_layout_forceDragNode.fixed &= 1;
-  d3_layout_forceDragForce = d3_layout_forceDragNode = null;
-}
-
-function d3_layout_forceDrag() {
-  d3_layout_forceDragNode.px += d3.event.dx;
-  d3_layout_forceDragNode.py += d3.event.dy;
-  d3_layout_forceDragForce.resume(); // restart annealing
-}
-
-function d3_layout_forceAccumulate(quad) {
-  var cx = 0,
-      cy = 0;
-  quad.count = 0;
-  if (!quad.leaf) {
-    var nodes = quad.nodes,
-        n = nodes.length,
-        i = -1,
-        c;
-    while (++i < n) {
-      c = nodes[i];
-      if (c == null) continue;
-      d3_layout_forceAccumulate(c);
-      quad.count += c.count;
-      cx += c.count * c.cx;
-      cy += c.count * c.cy;
-    }
-  }
-  if (quad.point) {
-    // jitter internal nodes that are coincident
-    if (!quad.leaf) {
-      quad.point.x += Math.random() - .5;
-      quad.point.y += Math.random() - .5;
-    }
-    quad.count++;
-    cx += quad.point.x;
-    cy += quad.point.y;
-  }
-  quad.cx = cx / quad.count;
-  quad.cy = cy / quad.count;
-}
-
-function d3_layout_forceLinkDistance(link) {
-  return 20;
-}
-
-function d3_layout_forceLinkStrength(link) {
-  return 1;
-}
-d3.layout.partition = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      size = [1, 1]; // width, height
-
-  function position(node, x, dx, dy) {
-    var children = node.children;
-    node.x = x;
-    node.y = node.depth * dy;
-    node.dx = dx;
-    node.dy = dy;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          c,
-          d;
-      dx = node.value ? dx / node.value : 0;
-      while (++i < n) {
-        position(c = children[i], x, d = c.value * dx, dy);
-        x += d;
-      }
-    }
-  }
-
-  function depth(node) {
-    var children = node.children,
-        d = 0;
-    if (children) {
-      var i = -1,
-          n = children.length;
-      while (++i < n) d = Math.max(d, depth(children[i]));
-    }
-    return 1 + d;
-  }
-
-  function partition(d, i) {
-    var nodes = hierarchy.call(this, d, i);
-    position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
-    return nodes;
-  }
-
-  partition.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return partition;
-  };
-
-  return d3_layout_hierarchyRebind(partition, hierarchy);
-};
-d3.layout.pie = function() {
-  var value = Number,
-      sort = null,
-      startAngle = 0,
-      endAngle = 2 * Math.PI;
-
-  function pie(data, i) {
-
-    // Compute the start angle.
-    var a = +(typeof startAngle === "function"
-        ? startAngle.apply(this, arguments)
-        : startAngle);
-
-    // Compute the angular range (end - start).
-    var k = (typeof endAngle === "function"
-        ? endAngle.apply(this, arguments)
-        : endAngle) - startAngle;
-
-    // Optionally sort the data.
-    var index = d3.range(data.length);
-    if (sort != null) index.sort(function(i, j) {
-      return sort(data[i], data[j]);
-    });
-
-    // Compute the numeric values for each data element.
-    var values = data.map(value);
-
-    // Convert k into a scale factor from value to angle, using the sum.
-    k /= values.reduce(function(p, d) { return p + d; }, 0);
-
-    // Compute the arcs!
-    var arcs = index.map(function(i) {
-      return {
-        data: data[i],
-        value: d = values[i],
-        startAngle: a,
-        endAngle: a += d * k
-      };
-    });
-
-    // Return the arcs in the original data's order.
-    return data.map(function(d, i) {
-      return arcs[index[i]];
-    });
-  }
-
-  /**
-   * Specifies the value function *x*, which returns a nonnegative numeric value
-   * for each datum. The default value function is `Number`. The value function
-   * is passed two arguments: the current datum and the current index.
-   */
-  pie.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return pie;
-  };
-
-  /**
-   * Specifies a sort comparison operator *x*. The comparator is passed two data
-   * elements from the data array, a and b; it returns a negative value if a is
-   * less than b, a positive value if a is greater than b, and zero if a equals
-   * b.
-   */
-  pie.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall start angle of the pie chart. Defaults to 0. The
-   * start angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.startAngle = function(x) {
-    if (!arguments.length) return startAngle;
-    startAngle = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall end angle of the pie chart. Defaults to 2Ï€. The
-   * end angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.endAngle = function(x) {
-    if (!arguments.length) return endAngle;
-    endAngle = x;
-    return pie;
-  };
-
-  return pie;
-};
-// data is two-dimensional array of x,y; we populate y0
-d3.layout.stack = function() {
-  var values = Object,
-      order = d3_layout_stackOrders["default"],
-      offset = d3_layout_stackOffsets["zero"],
-      out = d3_layout_stackOut,
-      x = d3_layout_stackX,
-      y = d3_layout_stackY;
-
-  function stack(data, index) {
-
-    // Convert series to canonical two-dimensional representation.
-    var series = data.map(function(d, i) {
-      return values.call(stack, d, i);
-    });
-
-    // Convert each series to canonical [[x,y]] representation.
-    var points = series.map(function(d, i) {
-      return d.map(function(v, i) {
-        return [x.call(stack, v, i), y.call(stack, v, i)];
-      });
-    });
-
-    // Compute the order of series, and permute them.
-    var orders = order.call(stack, points, index);
-    series = d3.permute(series, orders);
-    points = d3.permute(points, orders);
-
-    // Compute the baseline…
-    var offsets = offset.call(stack, points, index);
-
-    // And propagate it to other series.
-    var n = series.length,
-        m = series[0].length,
-        i,
-        j,
-        o;
-    for (j = 0; j < m; ++j) {
-      out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
-      for (i = 1; i < n; ++i) {
-        out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
-      }
-    }
-
-    return data;
-  }
-
-  stack.values = function(x) {
-    if (!arguments.length) return values;
-    values = x;
-    return stack;
-  };
-
-  stack.order = function(x) {
-    if (!arguments.length) return order;
-    order = typeof x === "function" ? x : d3_layout_stackOrders[x];
-    return stack;
-  };
-
-  stack.offset = function(x) {
-    if (!arguments.length) return offset;
-    offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
-    return stack;
-  };
-
-  stack.x = function(z) {
-    if (!arguments.length) return x;
-    x = z;
-    return stack;
-  };
-
-  stack.y = function(z) {
-    if (!arguments.length) return y;
-    y = z;
-    return stack;
-  };
-
-  stack.out = function(z) {
-    if (!arguments.length) return out;
-    out = z;
-    return stack;
-  };
-
-  return stack;
-}
-
-function d3_layout_stackX(d) {
-  return d.x;
-}
-
-function d3_layout_stackY(d) {
-  return d.y;
-}
-
-function d3_layout_stackOut(d, y0, y) {
-  d.y0 = y0;
-  d.y = y;
-}
-
-var d3_layout_stackOrders = {
-
-  "inside-out": function(data) {
-    var n = data.length,
-        i,
-        j,
-        max = data.map(d3_layout_stackMaxIndex),
-        sums = data.map(d3_layout_stackReduceSum),
-        index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
-        top = 0,
-        bottom = 0,
-        tops = [],
-        bottoms = [];
-    for (i = 0; i < n; ++i) {
-      j = index[i];
-      if (top < bottom) {
-        top += sums[j];
-        tops.push(j);
-      } else {
-        bottom += sums[j];
-        bottoms.push(j);
-      }
-    }
-    return bottoms.reverse().concat(tops);
-  },
-
-  "reverse": function(data) {
-    return d3.range(data.length).reverse();
-  },
-
-  "default": function(data) {
-    return d3.range(data.length);
-  }
-
-};
-
-var d3_layout_stackOffsets = {
-
-  "silhouette": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        sums = [],
-        max = 0,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o > max) max = o;
-      sums.push(o);
-    }
-    for (j = 0; j < m; ++j) {
-      y0[j] = (max - sums[j]) / 2;
-    }
-    return y0;
-  },
-
-  "wiggle": function(data) {
-    var n = data.length,
-        x = data[0],
-        m = x.length,
-        max = 0,
-        i,
-        j,
-        k,
-        s1,
-        s2,
-        s3,
-        dx,
-        o,
-        o0,
-        y0 = [];
-    y0[0] = o = o0 = 0;
-    for (j = 1; j < m; ++j) {
-      for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
-      for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
-        for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
-          s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
-        }
-        s2 += s3 * data[i][j][1];
-      }
-      y0[j] = o -= s1 ? s2 / s1 * dx : 0;
-      if (o < o0) o0 = o;
-    }
-    for (j = 0; j < m; ++j) y0[j] -= o0;
-    return y0;
-  },
-
-  "expand": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        k = 1 / n,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
-      else for (i = 0; i < n; i++) data[i][j][1] = k;
-    }
-    for (j = 0; j < m; ++j) y0[j] = 0;
-    return y0;
-  },
-
-  "zero": function(data) {
-    var j = -1,
-        m = data[0].length,
-        y0 = [];
-    while (++j < m) y0[j] = 0;
-    return y0;
-  }
-
-};
-
-function d3_layout_stackMaxIndex(array) {
-  var i = 1,
-      j = 0,
-      v = array[0][1],
-      k,
-      n = array.length;
-  for (; i < n; ++i) {
-    if ((k = array[i][1]) > v) {
-      j = i;
-      v = k;
-    }
-  }
-  return j;
-}
-
-function d3_layout_stackReduceSum(d) {
-  return d.reduce(d3_layout_stackSum, 0);
-}
-
-function d3_layout_stackSum(p, d) {
-  return p + d[1];
-}
-d3.layout.histogram = function() {
-  var frequency = true,
-      valuer = Number,
-      ranger = d3_layout_histogramRange,
-      binner = d3_layout_histogramBinSturges;
-
-  function histogram(data, i) {
-    var bins = [],
-        values = data.map(valuer, this),
-        range = ranger.call(this, values, i),
-        thresholds = binner.call(this, range, values, i),
-        bin,
-        i = -1,
-        n = values.length,
-        m = thresholds.length - 1,
-        k = frequency ? 1 : 1 / n,
-        x;
-
-    // Initialize the bins.
-    while (++i < m) {
-      bin = bins[i] = [];
-      bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
-      bin.y = 0;
-    }
-
-    // Fill the bins, ignoring values outside the range.
-    i = -1; while(++i < n) {
-      x = values[i];
-      if ((x >= range[0]) && (x <= range[1])) {
-        bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
-        bin.y += k;
-        bin.push(data[i]);
-      }
-    }
-
-    return bins;
-  }
-
-  // Specifies how to extract a value from the associated data. The default
-  // value function is `Number`, which is equivalent to the identity function.
-  histogram.value = function(x) {
-    if (!arguments.length) return valuer;
-    valuer = x;
-    return histogram;
-  };
-
-  // Specifies the range of the histogram. Values outside the specified range
-  // will be ignored. The argument `x` may be specified either as a two-element
-  // array representing the minimum and maximum value of the range, or as a
-  // function that returns the range given the array of values and the current
-  // index `i`. The default range is the extent (minimum and maximum) of the
-  // values.
-  histogram.range = function(x) {
-    if (!arguments.length) return ranger;
-    ranger = d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies how to bin values in the histogram. The argument `x` may be
-  // specified as a number, in which case the range of values will be split
-  // uniformly into the given number of bins. Or, `x` may be an array of
-  // threshold values, defining the bins; the specified array must contain the
-  // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
-  // may be a function which is evaluated, being passed the range, the array of
-  // values, and the current index `i`, returning an array of thresholds. The
-  // default bin function will divide the values into uniform bins using
-  // Sturges' formula.
-  histogram.bins = function(x) {
-    if (!arguments.length) return binner;
-    binner = typeof x === "number"
-        ? function(range) { return d3_layout_histogramBinFixed(range, x); }
-        : d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies whether the histogram's `y` value is a count (frequency) or a
-  // probability (density). The default value is true.
-  histogram.frequency = function(x) {
-    if (!arguments.length) return frequency;
-    frequency = !!x;
-    return histogram;
-  };
-
-  return histogram;
-};
-
-function d3_layout_histogramBinSturges(range, values) {
-  return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
-}
-
-function d3_layout_histogramBinFixed(range, n) {
-  var x = -1,
-      b = +range[0],
-      m = (range[1] - b) / n,
-      f = [];
-  while (++x <= n) f[x] = m * x + b;
-  return f;
-}
-
-function d3_layout_histogramRange(values) {
-  return [d3.min(values), d3.max(values)];
-}
-d3.layout.hierarchy = function() {
-  var sort = d3_layout_hierarchySort,
-      children = d3_layout_hierarchyChildren,
-      value = d3_layout_hierarchyValue;
-
-  // Recursively compute the node depth and value.
-  // Also converts the data representation into a standard hierarchy structure.
-  function recurse(data, depth, nodes) {
-    var childs = children.call(hierarchy, data, depth),
-        node = d3_layout_hierarchyInline ? data : {data: data};
-    node.depth = depth;
-    nodes.push(node);
-    if (childs) {
-      var i = -1,
-          n = childs.length,
-          c = node.children = [],
-          v = 0,
-          j = depth + 1;
-      while (++i < n) {
-        d = recurse(childs[i], j, nodes);
-        d.parent = node;
-        c.push(d);
-        v += d.value;
-      }
-      if (sort) c.sort(sort);
-      if (value) node.value = v;
-    } else if (value) {
-      node.value = +value.call(hierarchy, data, depth) || 0;
-    }
-    return node;
-  }
-
-  // Recursively re-evaluates the node value.
-  function revalue(node, depth) {
-    var children = node.children,
-        v = 0;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          j = depth + 1;
-      while (++i < n) v += revalue(children[i], j);
-    } else if (value) {
-      v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0;
-    }
-    if (value) node.value = v;
-    return v;
-  }
-
-  function hierarchy(d) {
-    var nodes = [];
-    recurse(d, 0, nodes);
-    return nodes;
-  }
-
-  hierarchy.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return hierarchy;
-  };
-
-  hierarchy.children = function(x) {
-    if (!arguments.length) return children;
-    children = x;
-    return hierarchy;
-  };
-
-  hierarchy.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return hierarchy;
-  };
-
-  // Re-evaluates the `value` property for the specified hierarchy.
-  hierarchy.revalue = function(root) {
-    revalue(root, 0);
-    return root;
-  };
-
-  return hierarchy;
-};
-
-// A method assignment helper for hierarchy subclasses.
-function d3_layout_hierarchyRebind(object, hierarchy) {
-  object.sort = d3.rebind(object, hierarchy.sort);
-  object.children = d3.rebind(object, hierarchy.children);
-  object.links = d3_layout_hierarchyLinks;
-  object.value = d3.rebind(object, hierarchy.value);
-
-  // If the new API is used, enabling inlining.
-  object.nodes = function(d) {
-    d3_layout_hierarchyInline = true;
-    return (object.nodes = object)(d);
-  };
-
-  return object;
-}
-
-function d3_layout_hierarchyChildren(d) {
-  return d.children;
-}
-
-function d3_layout_hierarchyValue(d) {
-  return d.value;
-}
-
-function d3_layout_hierarchySort(a, b) {
-  return b.value - a.value;
-}
-
-// Returns an array source+target objects for the specified nodes.
-function d3_layout_hierarchyLinks(nodes) {
-  return d3.merge(nodes.map(function(parent) {
-    return (parent.children || []).map(function(child) {
-      return {source: parent, target: child};
-    });
-  }));
-}
-
-// For backwards-compatibility, don't enable inlining by default.
-var d3_layout_hierarchyInline = false;
-d3.layout.pack = function() {
-  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
-      size = [1, 1];
-
-  function pack(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    // Recursively compute the layout.
-    root.x = 0;
-    root.y = 0;
-    d3_layout_packTree(root);
-
-    // Scale the layout to fit the requested size.
-    var w = size[0],
-        h = size[1],
-        k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
-    d3_layout_packTransform(root, w / 2, h / 2, k);
-
-    return nodes;
-  }
-
-  pack.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return pack;
-  };
-
-  return d3_layout_hierarchyRebind(pack, hierarchy);
-};
-
-function d3_layout_packSort(a, b) {
-  return a.value - b.value;
-}
-
-function d3_layout_packInsert(a, b) {
-  var c = a._pack_next;
-  a._pack_next = b;
-  b._pack_prev = a;
-  b._pack_next = c;
-  c._pack_prev = b;
-}
-
-function d3_layout_packSplice(a, b) {
-  a._pack_next = b;
-  b._pack_prev = a;
-}
-
-function d3_layout_packIntersects(a, b) {
-  var dx = b.x - a.x,
-      dy = b.y - a.y,
-      dr = a.r + b.r;
-  return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
-}
-
-function d3_layout_packCircle(nodes) {
-  var xMin = Infinity,
-      xMax = -Infinity,
-      yMin = Infinity,
-      yMax = -Infinity,
-      n = nodes.length,
-      a, b, c, j, k;
-
-  function bound(node) {
-    xMin = Math.min(node.x - node.r, xMin);
-    xMax = Math.max(node.x + node.r, xMax);
-    yMin = Math.min(node.y - node.r, yMin);
-    yMax = Math.max(node.y + node.r, yMax);
-  }
-
-  // Create node links.
-  nodes.forEach(d3_layout_packLink);
-
-  // Create first node.
-  a = nodes[0];
-  a.x = -a.r;
-  a.y = 0;
-  bound(a);
-
-  // Create second node.
-  if (n > 1) {
-    b = nodes[1];
-    b.x = b.r;
-    b.y = 0;
-    bound(b);
-
-    // Create third node and build chain.
-    if (n > 2) {
-      c = nodes[2];
-      d3_layout_packPlace(a, b, c);
-      bound(c);
-      d3_layout_packInsert(a, c);
-      a._pack_prev = c;
-      d3_layout_packInsert(c, b);
-      b = a._pack_next;
-
-      // Now iterate through the rest.
-      for (var i = 3; i < n; i++) {
-        d3_layout_packPlace(a, b, c = nodes[i]);
-
-        // Search for the closest intersection.
-        var isect = 0, s1 = 1, s2 = 1;
-        for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
-          if (d3_layout_packIntersects(j, c)) {
-            isect = 1;
-            break;
-          }
-        }
-        if (isect == 1) {
-          for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
-            if (d3_layout_packIntersects(k, c)) {
-              if (s2 < s1) {
-                isect = -1;
-                j = k;
-              }
-              break;
-            }
-          }
-        }
-
-        // Update node chain.
-        if (isect == 0) {
-          d3_layout_packInsert(a, c);
-          b = c;
-          bound(c);
-        } else if (isect > 0) {
-          d3_layout_packSplice(a, j);
-          b = j;
-          i--;
-        } else { // isect < 0
-          d3_layout_packSplice(j, b);
-          a = j;
-          i--;
-        }
-      }
-    }
-  }
-
-  // Re-center the circles and return the encompassing radius.
-  var cx = (xMin + xMax) / 2,
-      cy = (yMin + yMax) / 2,
-      cr = 0;
-  for (var i = 0; i < n; i++) {
-    var node = nodes[i];
-    node.x -= cx;
-    node.y -= cy;
-    cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
-  }
-
-  // Remove node links.
-  nodes.forEach(d3_layout_packUnlink);
-
-  return cr;
-}
-
-function d3_layout_packLink(node) {
-  node._pack_next = node._pack_prev = node;
-}
-
-function d3_layout_packUnlink(node) {
-  delete node._pack_next;
-  delete node._pack_prev;
-}
-
-function d3_layout_packTree(node) {
-  var children = node.children;
-  if (children) {
-    children.forEach(d3_layout_packTree);
-    node.r = d3_layout_packCircle(children);
-  } else {
-    node.r = Math.sqrt(node.value);
-  }
-}
-
-function d3_layout_packTransform(node, x, y, k) {
-  var children = node.children;
-  node.x = (x += k * node.x);
-  node.y = (y += k * node.y);
-  node.r *= k;
-  if (children) {
-    var i = -1, n = children.length;
-    while (++i < n) d3_layout_packTransform(children[i], x, y, k);
-  }
-}
-
-function d3_layout_packPlace(a, b, c) {
-  var da = b.r + c.r,
-      db = a.r + c.r,
-      dx = b.x - a.x,
-      dy = b.y - a.y,
-      dc = Math.sqrt(dx * dx + dy * dy),
-      cos = (db * db + dc * dc - da * da) / (2 * db * dc),
-      theta = Math.acos(cos),
-      x = cos * db,
-      h = Math.sin(theta) * db;
-  dx /= dc;
-  dy /= dc;
-  c.x = a.x + x * dx + h * dy;
-  c.y = a.y + x * dy - h * dx;
-}
-// Implements a hierarchical layout using the cluster (or dendogram) algorithm.
-d3.layout.cluster = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function cluster(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0],
-        previousNode,
-        x = 0,
-        kx,
-        ky;
-
-    // First walk, computing the initial x & y values.
-    d3_layout_treeVisitAfter(root, function(node) {
-      if (node.children) {
-        node.x = d3_layout_clusterX(node.children);
-        node.y = d3_layout_clusterY(node.children);
-      } else {
-        node.x = previousNode ? x += separation(node, previousNode) : 0;
-        node.y = 0;
-        previousNode = node;
-      }
-    });
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_clusterLeft(root),
-        right = d3_layout_clusterRight(root),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2;
-
-    // Second walk, normalizing x & y to the desired size.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = (1 - node.y / root.y) * size[1];
-    });
-
-    return nodes;
-  }
-
-  cluster.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return cluster;
-  };
-
-  cluster.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return cluster;
-  };
-
-  return d3_layout_hierarchyRebind(cluster, hierarchy);
-};
-
-function d3_layout_clusterY(children) {
-  return 1 + d3.max(children, function(child) {
-    return child.y;
-  });
-}
-
-function d3_layout_clusterX(children) {
-  return children.reduce(function(x, child) {
-    return x + child.x;
-  }, 0) / children.length;
-}
-
-function d3_layout_clusterLeft(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterLeft(children[0]) : node;
-}
-
-function d3_layout_clusterRight(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterRight(children[children.length - 1]) : node;
-}
-// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
-d3.layout.tree = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function tree(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    function firstWalk(node, previousSibling) {
-      var children = node.children,
-          layout = node._tree;
-      if (children && (n = children.length)) {
-        var n,
-            firstChild = children[0],
-            previousChild,
-            ancestor = firstChild,
-            child,
-            i = -1;
-        while (++i < n) {
-          child = children[i];
-          firstWalk(child, previousChild);
-          ancestor = apportion(child, previousChild, ancestor);
-          previousChild = child;
-        }
-        d3_layout_treeShift(node);
-        var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-          layout.mod = layout.prelim - midpoint;
-        } else {
-          layout.prelim = midpoint;
-        }
-      } else {
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-        }
-      }
-    }
-
-    function secondWalk(node, x) {
-      node.x = node._tree.prelim + x;
-      var children = node.children;
-      if (children) {
-        var i = -1,
-            n = children.length;
-        x += node._tree.mod;
-        while (++i < n) {
-          secondWalk(children[i], x);
-        }
-      }
-    }
-
-    function apportion(node, previousSibling, ancestor) {
-      if (previousSibling) {
-        var vip = node,
-            vop = node,
-            vim = previousSibling,
-            vom = node.parent.children[0],
-            sip = vip._tree.mod,
-            sop = vop._tree.mod,
-            sim = vim._tree.mod,
-            som = vom._tree.mod,
-            shift;
-        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
-          vom = d3_layout_treeLeft(vom);
-          vop = d3_layout_treeRight(vop);
-          vop._tree.ancestor = node;
-          shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
-          if (shift > 0) {
-            d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
-            sip += shift;
-            sop += shift;
-          }
-          sim += vim._tree.mod;
-          sip += vip._tree.mod;
-          som += vom._tree.mod;
-          sop += vop._tree.mod;
-        }
-        if (vim && !d3_layout_treeRight(vop)) {
-          vop._tree.thread = vim;
-          vop._tree.mod += sim - sop;
-        }
-        if (vip && !d3_layout_treeLeft(vom)) {
-          vom._tree.thread = vip;
-          vom._tree.mod += sip - som;
-          ancestor = node;
-        }
-      }
-      return ancestor;
-    }
-
-    // Initialize temporary layout variables.
-    d3_layout_treeVisitAfter(root, function(node, previousSibling) {
-      node._tree = {
-        ancestor: node,
-        prelim: 0,
-        mod: 0,
-        change: 0,
-        shift: 0,
-        number: previousSibling ? previousSibling._tree.number + 1 : 0
-      };
-    });
-
-    // Compute the layout using Buchheim et al.'s algorithm.
-    firstWalk(root);
-    secondWalk(root, -root._tree.prelim);
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
-        right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
-        deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2,
-        y1 = deep.depth || 1;
-
-    // Clear temporary layout variables; transform x and y.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = node.depth / y1 * size[1];
-      delete node._tree;
-    });
-
-    return nodes;
-  }
-
-  tree.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return tree;
-  };
-
-  tree.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return tree;
-  };
-
-  return d3_layout_hierarchyRebind(tree, hierarchy);
-};
-
-function d3_layout_treeSeparation(a, b) {
-  return a.parent == b.parent ? 1 : 2;
-}
-
-// function d3_layout_treeSeparationRadial(a, b) {
-//   return (a.parent == b.parent ? 1 : 2) / a.depth;
-// }
-
-function d3_layout_treeLeft(node) {
-  return node.children ? node.children[0] : node._tree.thread;
-}
-
-function d3_layout_treeRight(node) {
-  return node.children ? node.children[node.children.length - 1] : node._tree.thread;
-}
-
-function d3_layout_treeSearch(node, compare) {
-  var children = node.children;
-  if (children) {
-    var child,
-        n = children.length,
-        i = -1;
-    while (++i < n) {
-      if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
-        node = child;
-      }
-    }
-  }
-  return node;
-}
-
-function d3_layout_treeRightmost(a, b) {
-  return a.x - b.x;
-}
-
-function d3_layout_treeLeftmost(a, b) {
-  return b.x - a.x;
-}
-
-function d3_layout_treeDeepest(a, b) {
-  return a.depth - b.depth;
-}
-
-function d3_layout_treeVisitAfter(node, callback) {
-  function visit(node, previousSibling) {
-    var children = node.children;
-    if (children) {
-      var child,
-          previousChild = null,
-          i = -1,
-          n = children.length;
-      while (++i < n) {
-        child = children[i];
-        visit(child, previousChild);
-        previousChild = child;
-      }
-    }
-    callback(node, previousSibling);
-  }
-  visit(node, null);
-}
-
-function d3_layout_treeShift(node) {
-  var shift = 0,
-      change = 0,
-      children = node.children,
-      i = children.length,
-      child;
-  while (--i >= 0) {
-    child = children[i]._tree;
-    child.prelim += shift;
-    child.mod += shift;
-    shift += child.shift + (change += child.change);
-  }
-}
-
-function d3_layout_treeMove(ancestor, node, shift) {
-  ancestor = ancestor._tree;
-  node = node._tree;
-  var change = shift / (node.number - ancestor.number);
-  ancestor.change += change;
-  node.change -= change;
-  node.shift += shift;
-  node.prelim += shift;
-  node.mod += shift;
-}
-
-function d3_layout_treeAncestor(vim, node, ancestor) {
-  return vim._tree.ancestor.parent == node.parent
-      ? vim._tree.ancestor
-      : ancestor;
-}
-// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
-// Modified to support a target aspect ratio by Jeff Heer
-d3.layout.treemap = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      round = Math.round,
-      size = [1, 1], // width, height
-      padding = null,
-      pad = d3_layout_treemapPadNull,
-      sticky = false,
-      stickies,
-      ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
-
-  // Compute the area for each child based on value & scale.
-  function scale(children, k) {
-    var i = -1,
-        n = children.length,
-        child,
-        area;
-    while (++i < n) {
-      area = (child = children[i]).value * (k < 0 ? 0 : k);
-      child.area = isNaN(area) || area <= 0 ? 0 : area;
-    }
-  }
-
-  // Recursively arranges the specified node's children into squarified rows.
-  function squarify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        row = [],
-        children = node.children.slice(), // copy-on-write
-        child,
-        best = Infinity, // the best row score so far
-        score, // the current row score
-        u = Math.min(rect.dx, rect.dy), // initial orientation
-        n;
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while ((n = children.length) > 0) {
-      row.push(child = children[n - 1]);
-      row.area += child.area;
-      if ((score = worst(row, u)) <= best) { // continue with this orientation
-        children.pop();
-        best = score;
-      } else { // abort, and try a different orientation
-        row.area -= row.pop().area;
-        position(row, u, rect, false);
-        u = Math.min(rect.dx, rect.dy);
-        row.length = row.area = 0;
-        best = Infinity;
-      }
-    }
-    if (row.length) {
-      position(row, u, rect, true);
-      row.length = row.area = 0;
-    }
-    node.children.forEach(squarify);
-  }
-
-  // Recursively resizes the specified node's children into existing rows.
-  // Preserves the existing layout!
-  function stickify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        children = node.children.slice(), // copy-on-write
-        child,
-        row = [];
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while (child = children.pop()) {
-      row.push(child);
-      row.area += child.area;
-      if (child.z != null) {
-        position(row, child.z ? rect.dx : rect.dy, rect, !children.length);
-        row.length = row.area = 0;
-      }
-    }
-    node.children.forEach(stickify);
-  }
-
-  // Computes the score for the specified row, as the worst aspect ratio.
-  function worst(row, u) {
-    var s = row.area,
-        r,
-        rmax = 0,
-        rmin = Infinity,
-        i = -1,
-        n = row.length;
-    while (++i < n) {
-      if (!(r = row[i].area)) continue;
-      if (r < rmin) rmin = r;
-      if (r > rmax) rmax = r;
-    }
-    s *= s;
-    u *= u;
-    return s
-        ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
-        : Infinity;
-  }
-
-  // Positions the specified row of nodes. Modifies `rect`.
-  function position(row, u, rect, flush) {
-    var i = -1,
-        n = row.length,
-        x = rect.x,
-        y = rect.y,
-        v = u ? round(row.area / u) : 0,
-        o;
-    if (u == rect.dx) { // horizontal subdivision
-      if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dy = v;
-        x += o.dx = v ? round(o.area / v) : 0;
-      }
-      o.z = true;
-      o.dx += rect.x + rect.dx - x; // rounding error
-      rect.y += v;
-      rect.dy -= v;
-    } else { // vertical subdivision
-      if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dx = v;
-        y += o.dy = v ? round(o.area / v) : 0;
-      }
-      o.z = false;
-      o.dy += rect.y + rect.dy - y; // rounding error
-      rect.x += v;
-      rect.dx -= v;
-    }
-  }
-
-  function treemap(d) {
-    var nodes = stickies || hierarchy(d),
-        root = nodes[0];
-    root.x = 0;
-    root.y = 0;
-    root.dx = size[0];
-    root.dy = size[1];
-    if (stickies) hierarchy.revalue(root);
-    scale([root], root.dx * root.dy / root.value);
-    (stickies ? stickify : squarify)(root);
-    if (sticky) stickies = nodes;
-    return nodes;
-  }
-
-  treemap.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return treemap;
-  };
-
-  treemap.padding = function(x) {
-    if (!arguments.length) return padding;
-
-    function padFunction(node) {
-      var p = x.call(treemap, node, node.depth);
-      return p == null
-          ? d3_layout_treemapPadNull(node)
-          : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
-    }
-
-    function padConstant(node) {
-      return d3_layout_treemapPad(node, x);
-    }
-
-    var type;
-    pad = (padding = x) == null ? d3_layout_treemapPadNull
-        : (type = typeof x) === "function" ? padFunction
-        : type === "number" ? (x = [x, x, x, x], padConstant)
-        : padConstant;
-    return treemap;
-  };
-
-  treemap.round = function(x) {
-    if (!arguments.length) return round != Number;
-    round = x ? Math.round : Number;
-    return treemap;
-  };
-
-  treemap.sticky = function(x) {
-    if (!arguments.length) return sticky;
-    sticky = x;
-    stickies = null;
-    return treemap;
-  };
-
-  treemap.ratio = function(x) {
-    if (!arguments.length) return ratio;
-    ratio = x;
-    return treemap;
-  };
-
-  return d3_layout_hierarchyRebind(treemap, hierarchy);
-};
-
-function d3_layout_treemapPadNull(node) {
-  return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
-}
-
-function d3_layout_treemapPad(node, padding) {
-  var x = node.x + padding[3],
-      y = node.y + padding[0],
-      dx = node.dx - padding[1] - padding[3],
-      dy = node.dy - padding[0] - padding[2];
-  if (dx < 0) { x += dx / 2; dx = 0; }
-  if (dy < 0) { y += dy / 2; dy = 0; }
-  return {x: x, y: y, dx: dx, dy: dy};
-}
-})();
diff --git a/plasmid/source-lsi/html/d3.time.js b/plasmid/source-lsi/html/d3.time.js
deleted file mode 100644
index e1c0831c88e2984fbabc189a5347238bde72abb2..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/d3.time.js
+++ /dev/null
@@ -1,692 +0,0 @@
-(function(){d3.time = {};
-
-var d3_time = Date;
-d3.time.format = function(template) {
-  var n = template.length;
-
-  function format(date) {
-    var string = [],
-        i = -1,
-        j = 0,
-        c,
-        f;
-    while (++i < n) {
-      if (template.charCodeAt(i) == 37) {
-        string.push(
-            template.substring(j, i),
-            (f = d3_time_formats[c = template.charAt(++i)])
-            ? f(date) : c);
-        j = i + 1;
-      }
-    }
-    string.push(template.substring(j, i));
-    return string.join("");
-  }
-
-  format.parse = function(string) {
-    var date = new d3_time(1900, 0, 1),
-        i = d3_time_parse(date, template, string, 0);
-    if (i != string.length) return null;
-    if (date.hour12) {
-      var hours = date.getHours() % 12;
-      date.setHours(date.hour12pm ? hours + 12 : hours);
-    }
-    delete date.hour12;
-    delete date.hour12pm;
-    return date;
-  };
-
-  format.toString = function() {
-    return template;
-  };
-
-  return format;
-};
-
-function d3_time_parse(date, template, string, j) {
-  var c,
-      p,
-      i = 0,
-      n = template.length,
-      m = string.length;
-  while (i < n) {
-    if (j >= m) return -1;
-    c = template.charCodeAt(i++);
-    if (c == 37) {
-      p = d3_time_parsers[template.charAt(i++)];
-      if (!p || ((j = p(date, string, j)) < 0)) return -1;
-    } else if (c != string.charCodeAt(j++)) {
-      return -1;
-    }
-  }
-  return j;
-}
-
-var d3_time_zfill2 = d3.format("02d"),
-    d3_time_zfill3 = d3.format("03d"),
-    d3_time_zfill4 = d3.format("04d"),
-    d3_time_sfill2 = d3.format("2d");
-
-var d3_time_formats = {
-  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
-  A: function(d) { return d3_time_weekdays[d.getDay()]; },
-  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
-  B: function(d) { return d3_time_months[d.getMonth()]; },
-  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
-  d: function(d) { return d3_time_zfill2(d.getDate()); },
-  e: function(d) { return d3_time_sfill2(d.getDate()); },
-  H: function(d) { return d3_time_zfill2(d.getHours()); },
-  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
-  j: d3_time_dayOfYear,
-  L: function(d) { return d3_time_zfill3(d.getMilliseconds()); },
-  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
-  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
-  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
-  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
-  U: d3_time_weekNumberSunday,
-  w: function(d) { return d.getDay(); },
-  W: d3_time_weekNumberMonday,
-  x: d3.time.format("%m/%d/%y"),
-  X: d3.time.format("%H:%M:%S"),
-  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
-  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
-  Z: d3_time_zone,
-  "%": function(d) { return "%"; }
-};
-
-var d3_time_parsers = {
-  a: d3_time_parseWeekdayAbbrev,
-  A: d3_time_parseWeekday,
-  b: d3_time_parseMonthAbbrev,
-  B: d3_time_parseMonth,
-  c: d3_time_parseLocaleFull,
-  d: d3_time_parseDay,
-  e: d3_time_parseDay,
-  H: d3_time_parseHour24,
-  I: d3_time_parseHour12,
-  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
-  L: d3_time_parseMilliseconds,
-  m: d3_time_parseMonthNumber,
-  M: d3_time_parseMinutes,
-  p: d3_time_parseAmPm,
-  S: d3_time_parseSeconds,
-  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
-  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
-  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
-  x: d3_time_parseLocaleDate,
-  X: d3_time_parseLocaleTime,
-  y: d3_time_parseYear,
-  Y: d3_time_parseFullYear
-  // ,
-  // Z: function(d, s, i) { /*TODO time zone */ return i; },
-  // "%": function(d, s, i) { /*TODO literal % */ return i; }
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekdayAbbrev(date, string, i) {
-  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
-}
-
-var d3_time_weekdayAbbrevLookup = {
-  sun: 3,
-  mon: 3,
-  tue: 3,
-  wed: 3,
-  thu: 3,
-  fri: 3,
-  sat: 3
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekday(date, string, i) {
-  d3_time_weekdayRe.lastIndex = 0;
-  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
-  return n ? i += n[0].length : -1;
-}
-
-var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
-
-var d3_time_weekdays = [
-  "Sunday",
-  "Monday",
-  "Tuesday",
-  "Wednesday",
-  "Thursday",
-  "Friday",
-  "Saturday"
-];
-
-function d3_time_parseMonthAbbrev(date, string, i) {
-  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
-  return n == null ? -1 : (date.setMonth(n), i);
-}
-
-var d3_time_monthAbbrevLookup = {
-  jan: 0,
-  feb: 1,
-  mar: 2,
-  apr: 3,
-  may: 4,
-  jun: 5,
-  jul: 6,
-  aug: 7,
-  sep: 8,
-  oct: 9,
-  nov: 10,
-  dec: 11
-};
-
-function d3_time_parseMonth(date, string, i) {
-  d3_time_monthRe.lastIndex = 0;
-  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
-  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
-}
-
-var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
-
-var d3_time_monthLookup = {
-  january: 0,
-  february: 1,
-  march: 2,
-  april: 3,
-  may: 4,
-  june: 5,
-  july: 6,
-  august: 7,
-  september: 8,
-  october: 9,
-  november: 10,
-  december: 11
-};
-
-var d3_time_months = [
-  "January",
-  "February",
-  "March",
-  "April",
-  "May",
-  "June",
-  "July",
-  "August",
-  "September",
-  "October",
-  "November",
-  "December"
-];
-
-function d3_time_parseLocaleFull(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
-}
-
-function d3_time_parseLocaleDate(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
-}
-
-function d3_time_parseLocaleTime(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
-}
-
-function d3_time_parseFullYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
-  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_century() {
-  return ~~(new Date().getFullYear() / 1000) * 1000;
-}
-
-function d3_time_parseMonthNumber(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
-}
-
-function d3_time_parseDay(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [0,23].
-function d3_time_parseHour24(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [1,12].
-function d3_time_parseHour12(date, string, i) {
-  date.hour12 = true;
-  return d3_time_parseHour24(date, string, i);
-}
-
-function d3_time_parseMinutes(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseSeconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseMilliseconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 3));
-  return n ? (date.setMilliseconds(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't look at the next directive.
-var d3_time_numberRe = /\s*\d+/;
-
-function d3_time_parseAmPm(date, string, i) {
-  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
-  return n == null ? -1 : (date.hour12pm = n, i);
-}
-
-var d3_time_amPmLookup = {
-  am: 0,
-  pm: 1
-};
-
-function d3_time_year(d) {
-  return new d3_time(d.getFullYear(), 0, 1);
-}
-
-function d3_time_daysElapsed(d0, d1) {
-  return ~~((d1 - d0) / 864e5 - (d1.getTimezoneOffset() - d0.getTimezoneOffset()) / 1440);
-}
-
-function d3_time_dayOfYear(d) {
-  return d3_time_zfill3(1 + d3_time_daysElapsed(d3_time_year(d), d));
-}
-
-function d3_time_weekNumberSunday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + d0.getDay()) / 7));
-}
-
-function d3_time_weekNumberMonday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + (d0.getDay() + 6) % 7) / 7));
-}
-
-// TODO table of time zone offset names?
-function d3_time_zone(d) {
-  var z = d.getTimezoneOffset(),
-      zs = z > 0 ? "-" : "+",
-      zh = ~~(Math.abs(z) / 60),
-      zm = Math.abs(z) % 60;
-  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
-}
-d3.time.format.utc = function(template) {
-  var local = d3.time.format(template);
-
-  function format(date) {
-    try {
-      d3_time = d3_time_format_utc;
-      var utc = new d3_time();
-      utc._ = date;
-      return local(utc);
-    } finally {
-      d3_time = Date;
-    }
-  }
-
-  format.parse = function(string) {
-    try {
-      d3_time = d3_time_format_utc;
-      var date = local.parse(string);
-      return date && date._;
-    } finally {
-      d3_time = Date;
-    }
-  };
-
-  format.toString = local.toString;
-
-  return format;
-};
-
-function d3_time_format_utc() {
-  this._ = new Date(Date.UTC.apply(this, arguments));
-}
-
-d3_time_format_utc.prototype = {
-  getDate: function() { return this._.getUTCDate(); },
-  getDay: function() { return this._.getUTCDay(); },
-  getFullYear: function() { return this._.getUTCFullYear(); },
-  getHours: function() { return this._.getUTCHours(); },
-  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
-  getMinutes: function() { return this._.getUTCMinutes(); },
-  getMonth: function() { return this._.getUTCMonth(); },
-  getSeconds: function() { return this._.getUTCSeconds(); },
-  getTimezoneOffset: function() { return 0; },
-  valueOf: function() { return this._.getTime(); },
-  setDate: function(x) { this._.setUTCDate(x); },
-  setDay: function(x) { this._.setUTCDay(x); },
-  setFullYear: function(x) { this._.setUTCFullYear(x); },
-  setHours: function(x) { this._.setUTCHours(x); },
-  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
-  setMinutes: function(x) { this._.setUTCMinutes(x); },
-  setMonth: function(x) { this._.setUTCMonth(x); },
-  setSeconds: function(x) { this._.setUTCSeconds(x); }
-};
-var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
-
-d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso;
-
-function d3_time_formatIsoNative(date) {
-  return date.toISOString();
-}
-
-d3_time_formatIsoNative.parse = function(string) {
-  return new Date(string);
-};
-
-d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
-function d3_time_range(floor, step, number) {
-  return function(t0, t1, dt) {
-    var time = floor(t0), times = [];
-    if (time < t0) step(time);
-    if (dt > 1) {
-      while (time < t1) {
-        var date = new Date(+time);
-        if (!(number(date) % dt)) times.push(date);
-        step(time);
-      }
-    } else {
-      while (time < t1) times.push(new Date(+time)), step(time);
-    }
-    return times;
-  };
-}
-d3.time.second = function(date) {
-  return new Date(~~(date / 1e3) * 1e3);
-};
-
-d3.time.second.utc = d3.time.second;
-d3.time.seconds = d3_time_range(d3.time.second, function(date) {
-  date.setTime(date.getTime() + 1e3);
-}, function(date) {
-  return date.getSeconds();
-});
-
-d3.time.seconds.utc = d3.time.seconds;
-d3.time.minute = function(date) {
-  return new Date(~~(date / 6e4) * 6e4);
-};
-
-d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getMinutes();
-});
-
-d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getUTCMinutes();
-});
-
-function d3_time_minutesStep(date) {
-  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
-}
-d3.time.hour = function(date) {
-  var offset = date.getTimezoneOffset() / 60;
-  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
-};
-
-d3.time.hour.utc = function(date) {
-  return new Date(~~(date / 36e5) * 36e5);
-};
-d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
-  return date.getHours();
-});
-
-d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
-  return date.getUTCHours();
-});
-
-function d3_time_hoursStep(date) {
-  date.setTime(date.getTime() + 36e5);
-}
-d3.time.day = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
-};
-
-d3.time.day.utc = function(date) {
-  return new Date(~~(date / 864e5) * 864e5);
-};
-d3.time.days = d3_time_range(d3.time.day, function(date) {
-  date.setDate(date.getDate() + 1);
-}, function(date) {
-  return date.getDate() - 1;
-});
-
-d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 1);
-}, function(date) {
-  return date.getUTCDate() - 1;
-});
-d3.time.week = function(date) {
-  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
-  return date;
-};
-
-d3.time.week.utc = function(date) {
-  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
-  return date;
-};
-d3.time.weeks = d3_time_range(d3.time.week, function(date) {
-  date.setDate(date.getDate() + 7);
-}, function(date) {
-  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
-});
-
-d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 7);
-}, function(date) {
-  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
-});
-d3.time.month = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), 1);
-};
-
-d3.time.month.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
-};
-d3.time.months = d3_time_range(d3.time.month, function(date) {
-  date.setMonth(date.getMonth() + 1);
-}, function(date) {
-  return date.getMonth();
-});
-
-d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
-  date.setUTCMonth(date.getUTCMonth() + 1);
-}, function(date) {
-  return date.getUTCMonth();
-});
-d3.time.year = function(date) {
-  return new Date(date.getFullYear(), 0, 1);
-};
-
-d3.time.year.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
-};
-d3.time.years = d3_time_range(d3.time.year, function(date) {
-  date.setFullYear(date.getFullYear() + 1);
-}, function(date) {
-  return date.getFullYear();
-});
-
-d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
-  date.setUTCFullYear(date.getUTCFullYear() + 1);
-}, function(date) {
-  return date.getUTCFullYear();
-});
-// TODO nice
-function d3_time_scale(linear, methods, format) {
-
-  function scale(x) {
-    return linear(x);
-  }
-
-  scale.invert = function(x) {
-    return d3_time_scaleDate(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
-    linear.domain(x);
-    return scale;
-  };
-
-  scale.ticks = function(m, k) {
-    var extent = d3_time_scaleExtent(scale.domain());
-    if (typeof m !== "function") {
-      var span = extent[1] - extent[0],
-          target = span / m,
-          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
-      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
-      m = methods[i];
-      k = m[1];
-      m = m[0];
-    }
-    return m(extent[0], extent[1], k);
-  };
-
-  scale.tickFormat = function() {
-    return format;
-  };
-
-  scale.copy = function() {
-    return d3_time_scale(linear.copy(), methods, format);
-  };
-
-  // TOOD expose d3_scale_linear_rebind?
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-
-  return scale;
-}
-
-// TODO expose d3_scaleExtent?
-function d3_time_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-
-function d3_time_scaleDate(t) {
-  return new Date(t);
-}
-
-function d3_time_scaleFormat(formats) {
-  return function(date) {
-    var i = formats.length - 1, f = formats[i];
-    while (!f[1](date)) f = formats[--i];
-    return f[0](date);
-  };
-}
-
-var d3_time_scaleSteps = [
-  1e3,    // 1-second
-  5e3,    // 5-second
-  15e3,   // 15-second
-  3e4,    // 30-second
-  6e4,    // 1-minute
-  3e5,    // 5-minute
-  9e5,    // 15-minute
-  18e5,   // 30-minute
-  36e5,   // 1-hour
-  108e5,  // 3-hour
-  216e5,  // 6-hour
-  432e5,  // 12-hour
-  864e5,  // 1-day
-  1728e5, // 2-day
-  6048e5, // 1-week
-  1728e6, // 1-month
-  7776e6, // 3-month
-  31536e6 // 1-year
-];
-
-var d3_time_scaleLocalMethods = [
-  [d3.time.seconds, 1],
-  [d3.time.seconds, 5],
-  [d3.time.seconds, 15],
-  [d3.time.seconds, 30],
-  [d3.time.minutes, 1],
-  [d3.time.minutes, 5],
-  [d3.time.minutes, 15],
-  [d3.time.minutes, 30],
-  [d3.time.hours, 1],
-  [d3.time.hours, 3],
-  [d3.time.hours, 6],
-  [d3.time.hours, 12],
-  [d3.time.days, 1],
-  [d3.time.days, 2],
-  [d3.time.weeks, 1],
-  [d3.time.months, 1],
-  [d3.time.months, 3],
-  [d3.time.years, 1]
-];
-
-var d3_time_scaleLocalFormats = [
-  [d3.time.format("%Y"), function(d) { return true; }],
-  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
-  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
-  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
-  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
-  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
-  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
-];
-
-var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
-
-d3.time.scale = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
-};
-var d3_time_scaleUTCMethods = [
-  [d3.time.seconds.utc, 1],
-  [d3.time.seconds.utc, 5],
-  [d3.time.seconds.utc, 15],
-  [d3.time.seconds.utc, 30],
-  [d3.time.minutes.utc, 1],
-  [d3.time.minutes.utc, 5],
-  [d3.time.minutes.utc, 15],
-  [d3.time.minutes.utc, 30],
-  [d3.time.hours.utc, 1],
-  [d3.time.hours.utc, 3],
-  [d3.time.hours.utc, 6],
-  [d3.time.hours.utc, 12],
-  [d3.time.days.utc, 1],
-  [d3.time.days.utc, 2],
-  [d3.time.weeks.utc, 1],
-  [d3.time.months.utc, 1],
-  [d3.time.months.utc, 3],
-  [d3.time.years.utc, 1]
-];
-
-var d3_time_scaleUTCFormats = [
-  [d3.time.format.utc("%Y"), function(d) { return true; }],
-  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
-  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
-  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
-  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
-];
-
-var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
-
-d3.time.scale.utc = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
-};
-})();
diff --git a/plasmid/source-lsi/html/d3.tsv.js b/plasmid/source-lsi/html/d3.tsv.js
deleted file mode 100644
index 8d9a5e4f7038bfe558e2cca878854d234b770b8d..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/d3.tsv.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * TSV Parser from:
- *   https://github.com/vlandham/d3.tsv
- */
-(function(){d3.tsv = function(url, callback) {
-  d3.text(url, "text/tab-separated-values", function(text) {
-    callback(text && d3.tsv.parse(text, "\t"));
-  });
-};
-
-d3.tsv.version = "0.0.2"
-d3.tsv.parse = function(text, separator) {
-  var header;
-  return separator && d3.tsv.parseRows(text, separator, function(row, i) {
-    if (i) {
-      var o = {}, j = -1, m = header.length;
-      while (++j < m) o[header[j]] = row[j];
-      return o;
-    } else {
-      header = row;
-      return null;
-    }
-  });
-};
-
-d3.tsv.parseRows = function(text, separator, f) {
-  var EOL = {}, // sentinel value for end-of-line
-      EOF = {}, // sentinel value for end-of-file
-      rows = [], // output rows
-      re = new RegExp("\r\n|[" + separator + "\r\n]", "g"), // field separator regex
-      separatorCode = separator.charCodeAt(0), // code to match separator with
-      n = 0, // the current line number
-      t, // the current token
-      eol; // is the current token followed by EOL?
-
-  re.lastIndex = 0; // work-around bug in FF 3.6
-
-  /** @private Returns the next token. */
-  function token() {
-    if (re.lastIndex >= text.length) return EOF; // special case: end of file
-    if (eol) { eol = false; return EOL; } // special case: end of line
-
-    // special case: quotes
-    var j = re.lastIndex;
-    if (text.charCodeAt(j) === 34) {
-      var i = j;
-      while (i++ < text.length) {
-        if (text.charCodeAt(i) === 34) {
-          if (text.charCodeAt(i + 1) !== 34) break;
-          i++;
-        }
-      }
-      re.lastIndex = i + 2;
-      var c = text.charCodeAt(i + 1);
-      if (c === 13) {
-        eol = true;
-        if (text.charCodeAt(i + 2) === 10) re.lastIndex++;
-      } else if (c === 10) {
-        eol = true;
-      }
-      return text.substring(j + 1, i).replace(/""/g, "\"");
-    }
-
-    // common case
-    var m = re.exec(text);
-    if (m) {
-      eol = m[0].charCodeAt(0) !== separatorCode;
-      return text.substring(j, m.index);
-    }
-    re.lastIndex = text.length;
-    return text.substring(j);
-  }
-
-  while ((t = token()) !== EOF) {
-    var a = [];
-    while ((t !== EOL) && (t !== EOF)) {
-      a.push(t);
-      t = token();
-    }
-    if (f && !(a = f(a, n++))) continue;
-    rows.push(a);
-  }
-
-  return rows;
-};
-d3.tsv.format = function(rows) {
-  return rows.map(function (row) {
-    return d3_formatRow(row, "\t");
-  }).join("\n");
-};
-
-function d3_formatRow(row, separator) {
-  return row.map(d3_formatValue).join(separator);
-}
-
-function d3_formatValue(text) {
-  return /[",\n]/.test(text)
-      ? "\"" + text.replace(/\"/g, "\"\"") + "\""
-      : text;
-}
-})();
\ No newline at end of file
diff --git a/plasmid/source-lsi/html/enzyme-body-style.css b/plasmid/source-lsi/html/enzyme-body-style.css
deleted file mode 100644
index d4df0a129a0fabd47e8647a0da3d569fbff4c40d..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/enzyme-body-style.css
+++ /dev/null
@@ -1,58 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis_enzyme { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis_enzyme div { padding-top: 2px;}
-
-
-
-enzyme.table { counter-reset: line-number; }
-
-.enzyme-table-data-cell {
-	overflow: hidden;
-		
-}
-
-#enzyme-table tr:nth-of-type(odd) {
-   background-color:#E6CC80;
-}
-
-#enzyme-table tr:nth-of-type(even) {
-   background-color:#ECEFEF;
-}
-
-
-
-
-#enzyme-table tr.enzyme-table-data td {
-  padding: 5px;
-}
-
-#enzyme-table tr.enzyme-table-data:hover td {
-  padding: 5px 2px;
-}
-
-#enzyme-table td{
-
-padding:5px;
-}
-
-#enzyme-table tr.enzyme-table-header {
- 
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#D1A319;
-}
-
-#enzyme-table th {
- 
-  padding-left:5px;
-  padding-right:5px;
-}
-
diff --git a/plasmid/source-lsi/html/enzyme-browser.html b/plasmid/source-lsi/html/enzyme-browser.html
deleted file mode 100644
index f3a9e969e9e03a42947cb8ea32804ec73142e47c..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/enzyme-browser.html
+++ /dev/null
@@ -1,497 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Enzyme Browser</title>
-	<link type="text/css" rel="stylesheet" href="enzyme-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-// Some global variables we refer to
-
-/// All enzyme
-var enzyme = null;
-
-/// The enzyme that are currently being inspected
-var inspectedEnzyme = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis_enzyme");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-
-	order1 = ["ENZYME", "INACTIVIATION_TEMP", "INCUBATION_TEMP","REACTION_CONDITIONS","RESTRICTION_SITE"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    enzyme = objectOrId;
-  } else {
-  	enzyme = enzymeById[objectOrId];
-  }
-  
-  return enzyme;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the enzyme variable */
-function initializeEnzyme(result)
-{
-      // Construct a map of all enzyme by id
-  enzymeById = {};
-
-	// Split the enzyme into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpEnzyme = [], otherEnzyme = [];
-	var frpRegex = /^B[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        enzymeById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the enzymeById map
-	    theSample = enzymeById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpEnzyme.push(theSample);
-		} else {
-			otherEnzyme.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherEnzyme.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpEnzyme.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of enzyme
-	enzyme = frpEnzyme.concat(otherEnzyme);
-}
-
-
-//
-
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeEnzyme(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (enzyme.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis_enzyme").select("#enzyme-table").selectAll("tr.enzyme-table-data").data(enzyme);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "enzyme-table-data")
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.ENZYME, sample.properties.INACTIVIATION_TEMP, sample.properties.INCUBATION_TEMP, sample.properties.REACTION_CONDITIONS, sample.properties.RESTRICTION_SITE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "enzyme-table-data-cell")
-			.text(String)
-
-}
-
-function enzymeFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText, enzFilterText)
-{
-
-
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-	if (enzFilterText == undefined) 
-	{
-		enzFilterText = "";
-	}
-
-	
-	
-		
-	var displayedEnzyme = enzyme.filter(enzymeFilter.curry(codeFilterText, "CODE"));
-	displayedEnzyme = displayedEnzyme.filter(enzymeFilter.curry(enzFilterText, "ENZYME"));
-	
-	
-
-
-	var selection2 = d3.select("#vis_enzyme").select("#enzyme-table").selectAll("tr.enzyme-table-data").data(enzyme);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedEnzyme) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "ENZYMES" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#enz_filter').val());
-	});	
-		
-	$('#enz_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#enz_filter').val());
-	});
-
- 	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	<div id = "title" style="padding-top:20px"> Enzymes </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-
-	
-
-	<div id="filter-button"	style="padding-left:200px; padding-top:600px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-		<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Code</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 		
-		<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Enzymes</td><td><input style="width: 200px" id="enz_filter" type="text"></td></tr>
-	  </table> 		
-    </div>	
- 	
-		
-	
-    
-		<div id="vis_enzyme">
-		<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="enzyme-table" style="float: left">
-			  <tr class="enzyme-table-header" style="position: relative; top: expression(this.offsetParent.scrollTop-2);"><th>Enzyme Code</th><th>Enzyme</th><th>Inactivation Temp.</th><th>Incubation Temp.</th><th>Reaction Conditions</th><th>Restriction Sites</th></tr>
-			  <tbody><tr style="overflow:scroll"></tr></tbody>
-			</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/equipment-body-style.css b/plasmid/source-lsi/html/equipment-body-style.css
deleted file mode 100644
index 862c83d4ef2cc80e4e00782e238495312e00af1c..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/equipment-body-style.css
+++ /dev/null
@@ -1,48 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-
-/* Table */
-
-
-.equipment-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#equipment-table tr:nth-child(odd) td{
-  background-color:#ECDFEC;
-}
-
-
-#equipment-table tr:nth-child(even) td{
-  background-color:#ECEFEF;
-}
-
-
-
-#equipment-table td{
-
-padding:5px;
-}
-
-#equipment-table tr.equipment-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#C2ACC2;	
-  
-}
-
-
-
-
diff --git a/plasmid/source-lsi/html/equipment-browser.html b/plasmid/source-lsi/html/equipment-browser.html
deleted file mode 100644
index 078728cb362d4f2d31c354e5e79cc4adc617df76..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/equipment-browser.html
+++ /dev/null
@@ -1,709 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Plasmid Browser</title>
-	<link type="text/css" rel="stylesheet" href="equipment-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-//openbisServer = new openbis('https://localhost:8443/openbis/openbis', 'https://bs-mbp156.ethz.ch:8443/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All equipments
-var equipments = null;
-
-/// The equipments that are currently being inspected
-var inspectedPlasmids = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "PLASMID_NAME", "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order2 = ["BOX_NUMBER", "ROW", "COLUMN","REGISTRATION_DATE"]
-	new_list2 = []
-	for (var a in order2) {
-		for (var b in pairs) {
-			if (pairs[b][0] == order2[a]) {
-				new_list2.push(pairs[b]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    equipment = objectOrId;
-  } else {
-  	equipment = equipmentsById[objectOrId];
-  }
-  
-  return equipment;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the equipments variable */
-function initializePlasmids(result)
-{
-      // Construct a map of all equipments by id
-  equipmentsById = {};
-
-	// Split the equipments into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        equipmentsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the equipmentsById map
-	    theSample = equipmentsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of equipments
-	equipments = frpPlasmids.concat(otherPlasmids);
-}
-
-/** Set the size of the equipment-table based on whether or not inspectors are visible */
-function resizePlasmidTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	if (inspectedPlasmids.length > 0) {
-		cellWidth = ((getAppWidth() - inspectorsWidth) / 9) - padding + "px";
-		areInspectorsVisible = true;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var equipmentTableTransition = d3.selectAll('div.equipment-table-data-cell');
-	equipmentTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectPlasmid(equipment)
-{
-	if (inspectedPlasmids.indexOf(equipment) < 0) {
-		inspectedPlasmids.push(equipment);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var equipmentToSend = $.extend({}, equipment);
-		delete equipmentToSend.parents;
-		delete equipmentToSend.children;
-		openbisServer.listDataSetsForSample(equipmentToSend, true, dataset.curry(equipment));
-	}
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(equipment)
-{
-	var index = inspectedPlasmids.indexOf(equipment);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedPlasmids.splice(index, 1);
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function dataset(equipment, data) {
-	for (var i in data.result) {
-	  console.log(data.result)
-		openbisServer.listFilesForDataSet(data.result[i].code, "/", true, filelist.curry(equipment, data.result[i]));
-	}
-}
-
-function filelist(equipment, dataset, files) {
-	for (var i in files.result) {
-		if (!files.result[i].isDirectory) {
-			var inspector = inspectors.select("#"+equipment.code+"_INSPECTOR");
-			var pathInDataSet = files.result[i].pathInDataSet;
-			var downloadUrl = 'https://openbis-lsi.ethz.ch:8444/datastore_server/'+dataset.code+"/"+pathInDataSet+"?sessionID=" + openbisServer.sessionToken;
-			
-			inspector.select("td.data_sets").append("a").attr("href", downloadUrl).text(pathInDataSet)
-			inspector.select("td.data_sets").append("br");
-			
-			if (/\.svg$/.test(pathInDataSet)) {
-					// Retrieve the svg file and inject it into the DOM
-					d3.xml(downloadUrl, "image/svg+xml", function(xml) {
-						var importedNode = document.importNode(xml.documentElement, true);
-						d3.select(importedNode)
-							.attr("width", inspectorsWidth - 20)
-							.attr("height", inspectorsWidth - 20)
-							.attr("viewBox", "200 200 650 650");
-						inspector.node().appendChild(importedNode);
-					});
-			}
-		}
-	}
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedPlasmids, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-				
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-	
-
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializePlasmids(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (equipments.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#equipment-table").selectAll("tr.equipment-table-data").data(equipments);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "equipment-table-data")
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.COMPUTER, sample.properties.CONTACT_PERSON, sample.properties.IDENTIFIER , sample.properties.LOCATION , sample.properties.NAME , sample.properties.PHONE , sample.properties.TYPE, sample.properties.VENDOR, sample.properties.PRODUCTNUMBER, sample.properties.PRICE, sample.properties.CURRENCY]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "equipment-table-data-cell")
-			.text(String)
-
-}
-
-function equipmentFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText)
-{
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-
-	
-	
-	var displayedPlasmids = equipments.filter(equipmentFilter.curry(codeFilterText, "CODE"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#equipment-table").selectAll("tr.equipment-table-data").data(equipments);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedPlasmids) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "EQUIPMENT" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val());
-	});	
-		
-	
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> Equipment </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-		
-		
-				
- 		
-	<div id="filter-button"	style="padding-left:200px; padding-top: 600px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Code</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 		
-	 </table> 		
-    </div>	
-             
-		
-	
-    
-		<div id="vis">
-		<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="equipment-table" style="float: left">
-			  <tr class="equipment-table-header" style="position: relative; top: expression(this.offsetParent.scrollTop-2);"><th>Code</th><th>Computer</th><th>Contact Person</th><th>Identifier</th><th>Location</th><th>Name</th><th>Phone</th><th>Type</th><th>Vendor</th><th>Product #</th><th>Price</th><th>Currency</th></tr>
-			  <tbody><tr style="overflow:scroll"></tr></tbody>
-			</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/images/openBIS_Logo.png b/plasmid/source-lsi/html/images/openBIS_Logo.png
deleted file mode 100644
index 87ae5e81899908f3968ea230205322dc19ff4ee5..0000000000000000000000000000000000000000
Binary files a/plasmid/source-lsi/html/images/openBIS_Logo.png and /dev/null differ
diff --git a/plasmid/source-lsi/html/images/openBIS_Logo.svg b/plasmid/source-lsi/html/images/openBIS_Logo.svg
deleted file mode 100644
index 70ac6c77f2774a5a5e8f6875e3c8ae1acb8e952a..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/images/openBIS_Logo.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="400.023px" height="174.566px" viewBox="0 0 400.023 174.566" enable-background="new 0 0 400.023 174.566"
-	 xml:space="preserve">
-<g id="Layer_1">
-	<g>
-		<text transform="matrix(1 0 0 1 46.4854 154.2764)"><tspan x="0" y="0" fill="#010101" font-family="'HelveticaNeue-Bold'" font-size="93.505" letter-spacing="-4">open</tspan><tspan x="204.679" y="0" fill="#231F20" font-family="'HelveticaNeue'" font-size="93.505">BIS</tspan></text>
-		<rect x="204.234" y="158.748" fill="none" width="192.64" height="14.936"/>
-		<text transform="matrix(1 0 0 1 204.2329 169.876)" fill="#010101" font-family="'HelveticaNeue'" font-size="15.5842">Biology Information System</text>
-		<g>
-			<g>
-				<g>
-					<g>
-						<polygon fill="#068172" points="125.213,81.967 141.416,98.167 147.252,92.333 131.053,76.132 125.213,76.132 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#068172" points="120.206,81.967 104.005,98.167 98.168,92.333 114.368,76.132 120.206,76.132 							"/>
-						</g>
-						<g>
-							<polygon fill="#068172" points="120.206,65.286 104.005,49.084 98.168,54.92 114.368,71.12 120.206,71.12 							"/>
-						</g>
-					</g>
-				</g>
-				<g>
-					<polygon fill="#068172" points="125.213,65.286 141.416,49.084 147.252,54.92 131.053,71.12 125.213,71.12 					"/>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#A4A4A4" points="76.131,16.201 92.331,0 98.168,5.836 81.969,22.036 76.13,22.036 					"/>
-				</g>
-				<g>
-					<g>
-						<polygon fill="#ADACAF" points="76.131,32.882 92.331,49.084 98.168,43.247 81.969,27.048 76.13,27.048 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,32.882 54.921,49.084 49.084,43.247 65.283,27.048 71.123,27.048 							"/>
-						</g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,16.201 54.921,0 49.084,5.836 65.283,22.036 71.123,22.036 							"/>
-						</g>
-					</g>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,65.286 43.247,49.084 49.083,54.92 32.884,71.12 27.045,71.12 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,81.967 43.247,98.167 49.083,92.333 32.884,76.132 27.045,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,81.967 5.837,98.167 0,92.333 16.199,76.132 22.038,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,65.286 5.837,49.084 0,54.92 16.199,71.12 22.038,71.12 					"/>
-				</g>
-			</g>
-		</g>
-	</g>
-</g>
-<g id="Layer_2">
-</g>
-</svg>
diff --git a/plasmid/source-lsi/html/infra.js b/plasmid/source-lsi/html/infra.js
deleted file mode 100644
index 179cd3b409375d50144557e93f7763eebe393b32..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/infra.js
+++ /dev/null
@@ -1,45 +0,0 @@
-if (!Array.prototype.filter)
-{
-  Array.prototype.filter = function(fun /*, thisp*/)
-  {
-    var len = this.length;
-    if (typeof fun != "function")
-      throw new TypeError();
-
-    var res = new Array();
-    var thisp = arguments[1];
-    for (var i = 0; i < len; i++)
-    {
-      if (i in this)
-      {
-        var val = this[i]; // in case fun mutates this
-        if (fun.call(thisp, val, i, this))
-          res.push(val);
-      }
-    }
-
-    return res;
-  };
-}
-
-if (!Function.prototype.curry) 
-{ 
-	(function () 
-	{
-		var slice = Array.prototype.slice;
-		Function.prototype.curry = function () 
-		{
-			var target = this; 
-			var args = slice.call(arguments);
-			return function () 
-			{
-				var allArgs = args;
-				if (arguments.length > 0) 
-				{ 
-					allArgs = args.concat(slice.call(arguments));
-				}
-				return target.apply(this, allArgs); 
-			};
-		}; 
-	}())
-};
\ No newline at end of file
diff --git a/plasmid/source-lsi/html/oligo-body-style.css b/plasmid/source-lsi/html/oligo-body-style.css
deleted file mode 100644
index 43f9f27858a8c90e033ad275b056bebf9683e57e..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/oligo-body-style.css
+++ /dev/null
@@ -1,125 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
- padding-top:10px;
- width:100%;
- 
-}
-
-
-.properties td:nth-child(odd) {
-  background-color:#94B8B8;
-  width: 30%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#ECEFEF;
-  width: 70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.oligo-table-data-cell {
-	overflow: hidden;
-}
-
-
-#oligo-table tr:nth-child(odd) {
-  background-color:#C2A366;
-}
-
-#oligo-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-}
-
-
-
-
-
-#oligo-table td{
-
-padding:5px;
-}
-
-#oligo-table tr.oligo-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#A37519;	
-}
-
-
diff --git a/plasmid/source-lsi/html/oligo-browser.html b/plasmid/source-lsi/html/oligo-browser.html
deleted file mode 100644
index 4f5ccb0697ee5b152b25959adb2fd28e540e39c2..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/oligo-browser.html
+++ /dev/null
@@ -1,579 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Oligo Browser</title>
-	<link type="text/css" rel="stylesheet" href="oligo-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-// Some global variables we refer to
-
-/// All oligos
-var oligos = null;
-
-/// The oligos that are currently being inspected
-var inspectedOligos = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-		
-	order1 = ["TARGET", "DIRECTION", "RESTRICTION_ENZYME", "MODIFICATIONS", "SEQUENCE",  "PROJECT"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-	
-	order2 = [ "BOX_NUMBER",  "ROW",  "COLUMN","REGISTRATION_DATE"]
-	new_list2 = []
-	for (var a in order2) {
-		for (var b in pairs) {
-			if (pairs[b][0] == order2[a]) {
-				new_list2.push(pairs[b]);
-				break;
-			}
-		}
-	}
-	
-	return new_list2;
-}
-
-
-
-/** Initialize the oligos variable */
-function initializeOligos(result)
-{
-	// Split the oligos into two groups, the ones that start with FRO in their sample name and the other ones.
-	var froOligos = [], otherOligos = [];
-	var froRegex = /^FRO[0-9]+/;
-	froRegex.compile(froRegex);
-	result.forEach(function(sample) { 
-		if (froRegex.test(sample.code)) {
-			froOligos.push(sample);
-		} else {
-			otherOligos.push(sample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherOligos.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	froOligos.sort(function(a, b) {
-		// Sort based on the FRO number
-		var froNumberA = parseInt(a.code.substring(3));
-		var froNumberB = parseInt(b.code.substring(3));
-		return (froNumberA < froNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of oligos
-	oligos = froOligos.concat(otherOligos);
-}
-
-/** Set the size of the oligo-table based on whether or not inspectors are visible */
-function resizeOligoTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	if (inspectedOligos.length > 0) {
-		cellWidth = ((getAppWidth() - inspectorsWidth) /6 ) - padding + "px";
-		areInspectorsVisible = true;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var oligoTableTransition = d3.selectAll('div.oligo-table-data-cell');
-	oligoTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectOligo(oligo)
-{
-	if (inspectedOligos.indexOf(oligo) < 0) {
-		inspectedOligos.push(oligo);
-		openbisServer.listDataSetsForSample(oligo, true, dataset.curry(oligo));
-	}
-	resizeOligoTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(oligo)
-{
-	var index = inspectedOligos.indexOf(oligo);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedOligos.splice(index, 1);
-	resizeOligoTable();
-	updateInspectors(1000);
-}
-
-function dataset(oligo, data) {
-	for (var i in data.result) {
-		openbisServer.listFilesForDataSet(data.result[i].code, "/", true, filelist.curry(oligo, data.result[i]));
-	}
-}
-
-function filelist(oligo, dataset, files) {
-	for (var i in files.result) {
-		if (!files.result[i].isDirectory) {
-			var inspector = inspectors.select("#"+oligo.code+"_INSPECTOR");
-			var fileTable = inspector.select("table");
-			var pathInDataSet = files.result[i].pathInDataSet;
-			var downloadUrl = 'https://openbis-lsi.ethz.ch:8444/datastore_server/'+dataset.code+"/"+pathInDataSet+"?sessionID=" + openbisServer.sessionToken;
-			fileTable.append("tr").append("td").attr("colspan", "2").append("a").attr("href", downloadUrl).text(pathInDataSet);
-			if (/\.svg$/.test(pathInDataSet)) {
-					// Retrieve the svg file and inject it into the DOM
-					d3.xml(downloadUrl, "image/svg+xml", function(xml) {
-						var importedNode = document.importNode(xml.documentElement, true);
-						d3.select(importedNode)
-							.attr("width", inspectorsWidth - 20)
-							.attr("height", inspectorsWidth - 20)
-							.attr("viewBox", "200 200 650 650");
-						inspector.node().appendChild(importedNode);
-					});
-			}
-		}
-	}
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedOligos, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-		
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-				
-
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-			
-
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeOligos(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (oligos.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#oligo-table").selectAll("tr.oligo-table-data").data(oligos);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "oligo-table-data")
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.BASES, sample.properties.PRINT_DATE,sample.properties.SEQUENCE, sample.properties.SEQUENCE_NAME, sample.properties.TM]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "oligo-table-data-cell")
-			.text(String)
-
-}
-
-function oligoFilter(filter, property, element, index, array) {
-
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText, sequenceNameFilterText)
-{
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-
-	if (sequenceNameFilterText == undefined) 
-	{
-		sequenceNameFilterText = "";
-	}
-
-	
-		
-	var displayedOligos = oligos.filter(oligoFilter.curry(codeFilterText, "CODE"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(sequenceNameFilterText, "SEQUENCE_NAME"));
-	
-
-	var selection2 = d3.select("#vis").select("#oligo-table").selectAll("tr.oligo-table-data").data(oligos);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedOligos) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-		
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "OLIGOS" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamples(sampleCriteria, displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#sequenceName_filter').val());
-	});	
-		
-	$('#sequenceName_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#sequenceName_filter').val());
-	});
-	
-
-
-
-
-
-
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-		<div id="main">
-		<div id = "title" style="padding-top:20px"> Oligos </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px; top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-		
-<div id="filter-button"	style="padding-left:200px; padding-top: 600px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Code</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 		
-		  </table> 		
-    </div>	
-		
-		    
-		<div id="vis">
-  		<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-			<table id="oligo-table" style="float: left">
-			  <tr class="oligo-table-header"><th>Oligo Code</th><th>Bases</th><th>Print Date</th><th>Sequence</th><th>Sequence Name</th><th>Melting Temp C</th></tr>
-			</table>
-			</div>
-			
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/plasmid-body-style.css b/plasmid/source-lsi/html/plasmid-body-style.css
deleted file mode 100644
index 8ed9edc5aa6004abc9ab2f3a18fdb6a07e8e3450..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/plasmid-body-style.css
+++ /dev/null
@@ -1,129 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#DC7E9E;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#ECEFEF;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.plasmid-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#plasmid-table tr:nth-child(odd) td{
-  background-color:#C28566;
-}
-
-
-#plasmid-table tr:nth-child(even) td{
-  background-color:#ECEFEF;
-}
-
-#plasmid-table tr.plasmid-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#plasmid-table td{
-
-padding:5px;
-}
-
-#plasmid-table tr.plasmid-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#A34719;	
-  
-}
-
-
-
-
diff --git a/plasmid/source-lsi/html/plasmid-browser.html b/plasmid/source-lsi/html/plasmid-browser.html
deleted file mode 100644
index 177682cfa7f226bb2aa41be5c7fee245d0d44028..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/plasmid-browser.html
+++ /dev/null
@@ -1,736 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Plasmid Browser</title>
-	<link type="text/css" rel="stylesheet" href="plasmid-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	
-<meta http-equiv="content-script-type" content="text/javascript">
-	
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All plasmids
-var plasmids = null;
-
-/// The plasmids that are currently being inspected
-var inspectedPlasmids = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "100px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-
-	order1 = ["OWNER" ]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	//pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order2 = ["BOX_NUMBER", "ROW", "COLUMN"]
-	new_list2 = []
-	for (var a in order2) {
-		for (var b in pairs) {
-			if (pairs[b][0] == order2[a]) {
-				new_list2.push(pairs[b]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    plasmid = objectOrId;
-  } else {
-  	plasmid = plasmidsById[objectOrId];
-  }
-  
-  return plasmid;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the plasmids variable */
-function initializePlasmids(result)
-{
-      // Construct a map of all plasmids by id
-  plasmidsById = {};
-
-	// Split the plasmids into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        plasmidsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the plasmidsById map
-	    theSample = plasmidsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of plasmids
-	plasmids = frpPlasmids.concat(otherPlasmids);
-}
-
-/** Set the size of the plasmid-table based on whether or not inspectors are visible */
-function resizePlasmidTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	if (inspectedPlasmids.length > 0) {
-		cellWidth = ((getAppWidth() - inspectorsWidth) / 9) - padding + "px";
-		areInspectorsVisible = true;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var plasmidTableTransition = d3.selectAll('div.plasmid-table-data-cell');
-	plasmidTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectPlasmid(plasmid)
-{
-	if (inspectedPlasmids.indexOf(plasmid) < 0) {
-		inspectedPlasmids.push(plasmid);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var plasmidToSend = $.extend({}, plasmid);
-		delete plasmidToSend.parents;
-		delete plasmidToSend.children;
-		openbisServer.listDataSetsForSample(plasmidToSend, true, dataset.curry(plasmid));
-	}
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(plasmid)
-{
-	var index = inspectedPlasmids.indexOf(plasmid);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedPlasmids.splice(index, 1);
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function dataset(plasmid, data) {
-	for (var i in data.result) {
-	  console.log(data.result)
-		openbisServer.listFilesForDataSet(data.result[i].code, "/", true, filelist.curry(plasmid, data.result[i]));
-	}
-}
-
-function filelist(plasmid, dataset, files) {
-	for (var i in files.result) {
-		if (!files.result[i].isDirectory) {
-			var inspector = inspectors.select("#"+plasmid.code+"_INSPECTOR");
-			var pathInDataSet = files.result[i].pathInDataSet;
-			var downloadUrl = 'https://openbis-lsi.ethz.ch:8444/datastore_server/'+dataset.code+"/"+pathInDataSet+"?sessionID=" + openbisServer.sessionToken;
-			inspector.select("td.data_sets").append("a").attr("href", downloadUrl).text(pathInDataSet)
-			inspector.select("td.data_sets").append("br");
-
-
-			if (/\.jpg$/.test(pathInDataSet)) {
-				var jpgFile = downloadUrl;
-				inspector.append("img")
-					.attr("src", jpgFile)
-					.attr("width", inspectorsWidth - 20)
-				  .attr("height", "auto");
-    	}  
-			
-			
-  	 
-			
-			if (/\.svg$/.test(pathInDataSet)) {
-					// Retrieve the svg file and inject it into the DOM
-					d3.xml(downloadUrl, "image/svg+xml", function(xml) {
-						var importedNode = document.importNode(xml.documentElement, true);
-						d3.select(importedNode)
-							.attr("width", inspectorsWidth - 20)
-							.attr("height", inspectorsWidth - 20)
-							.attr("viewBox", "200 200 650 650");
-						inspector.node().appendChild(importedNode);
-					});
-			}
-		}
-	}
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedPlasmids, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-				
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-	
-
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializePlasmids(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (plasmids.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#plasmid-table").selectAll("tr.plasmid-table-data").data(plasmids);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "plasmid-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectPlasmid)
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.PLASMID, sample.properties.ANTIBIOTIC, sample.properties.FORMAT]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "plasmid-table-data-cell")
-			.text(String)
-
-}
-
-function plasmidFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText, plasmidFilterText)
-{
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-
-	if (plasmidFilterText == undefined) 
-	{
-		plasmidFilterText = "";
-	}
-	
-
-	
-	var displayedPlasmids = plasmids.filter(plasmidFilter.curry(codeFilterText, "CODE"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(plasmidFilterText, "PLASMID"));
-	
-	
-
-
-	var selection2 = d3.select("#vis").select("#plasmid-table").selectAll("tr.plasmid-table-data").data(plasmids);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedPlasmids) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "PLASMIDS" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#plasmid_filter').val());
-	});	
-		
-	$('#plasmid_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#plasmid_filter').val());
-	});
-
- 
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-	
-	
-
-		<div id="main">
-		<div id = "title" style="padding-top:20px"> Plasmids </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-				
-<!--
-	<div id="filter-button"	style="padding-left:200px; padding-top: 600px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 100px">Plasmid Code</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 100px">Plasmid</td><td><input style="width: 200px" id="plasmid_filter" type="text"></td></tr>
-		</table> 		
-    </div>	
--->	
-		
-
-    
-		<div id="vis">
-		<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="plasmid-table" style="float: left">
-			  <tr class="plasmid-table-header" style="position: relative; top: expression(this.offsetParent.scrollTop-2);"><th>Plasmid Code</th><th>Plasmid</th><th>Antibiotic Resistance</th><th>Format</th></tr>
-			  <tbody><tr style="overflow:scroll"></tr></tbody>
-			</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/prAntibody-body-style.css b/plasmid/source-lsi/html/prAntibody-body-style.css
deleted file mode 100644
index 834787455e8f359a0d4f1b60db52b4d8d5816fcd..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/prAntibody-body-style.css
+++ /dev/null
@@ -1,49 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-
-
-/* Table */
-
-
-.prAntibody-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#prAntibody-table tr:nth-child(odd) td{
-  background-color:#C4D2A7;
-}
-
-
-#prAntibody-table tr:nth-child(even) td{
-  background-color:#ECEFEF;
-}
-
-
-
-#prAntibody-table td{
-
-padding:5px;
-}
-
-#prAntibody-table tr.prAntibody-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#97B065;	
-  
-}
-
-
-
-
diff --git a/plasmid/source-lsi/html/prAntibody-browser.html b/plasmid/source-lsi/html/prAntibody-browser.html
deleted file mode 100644
index 1a256e3b86de4f126e957dfd4ee4dc12fe170f55..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/prAntibody-browser.html
+++ /dev/null
@@ -1,519 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Plasmid Browser</title>
-	<link type="text/css" rel="stylesheet" href="prAntibody-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-//openbisServer = new openbis('https://localhost:8443/openbis/openbis', 'https://bs-mbp156.ethz.ch:8443/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All prAntibodys
-var prAntibodys = null;
-
-/// The prAntibodys that are currently being inspected
-var inspectedprAntibodies = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "PLASMID_NAME", "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order2 = ["BOX_NUMBER", "ROW", "COLUMN","REGISTRATION_DATE"]
-	new_list2 = []
-	for (var a in order2) {
-		for (var b in pairs) {
-			if (pairs[b][0] == order2[a]) {
-				new_list2.push(pairs[b]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    prAntibody = objectOrId;
-  } else {
-  	prAntibody = prAntibodysById[objectOrId];
-  }
-  
-  return prAntibody;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the prAntibodys variable */
-function initializeprAntibodies(result)
-{
-      // Construct a map of all prAntibodys by id
-  prAntibodysById = {};
-
-	// Split the prAntibodys into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpprAntibodies = [], otherprAntibodies = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        prAntibodysById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the prAntibodysById map
-	    theSample = prAntibodysById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpprAntibodies.push(theSample);
-		} else {
-			otherprAntibodies.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherprAntibodies.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpprAntibodies.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of prAntibodys
-	prAntibodys = frpprAntibodies.concat(otherprAntibodies);
-}
-
-
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeprAntibodies(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (prAntibodys.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#prAntibody-table").selectAll("tr.prAntibody-table-data").data(prAntibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "prAntibody-table-data")
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.ANTIGEN, sample.properties.REACTIVITY, sample.properties.APPLICATION, sample.properties.DILUTION, sample.properties.HOST, sample.properties.ISOTYPE, sample.properties.LABEL, sample.properties.STOCK_CONCENTRATION, sample.properties.VENDOR, sample.properties.PRODUCT_NUMBER, sample.properties.PRICE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "prAntibody-table-data-cell")
-			.text(String)
-
-}
-
-function prAntibodyFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText, antigenNumFilterText )
-{
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-
-	if (antigenNumFilterText == undefined) 
-	{
-		antigenFilterText = "";
-	}
-	
-	
-	var displayedprAntibodies = prAntibodys.filter(prAntibodyFilter.curry(codeFilterText, "CODE"));
-	displayedprAntibodies = displayedprAntibodies.filter(prAntibodyFilter.curry(antigenNumFilterText, "ANTIGEN"));
-	
-	
-
-
-	var selection2 = d3.select("#vis").select("#prAntibody-table").selectAll("tr.prAntibody-table-data").data(prAntibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedprAntibodies) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "PRIMARY_ANTIBODIES" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#antigen_filter').val());
-	});	
-		
-	$('#antigen_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#antigen_filter').val());
-	});
-
- 
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> Primary Antibodies </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-				
- 		
-	<div id="filter-button"	style="padding-left:200px; padding-top: 600px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Code</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Antigen</td><td><input style="width: 200px" id="antigen_filter" type="text"></td></tr> 			  		
-	 </table> 		
-    </div>	
-              
-		
-	
-    
-		<div id="vis">
-		<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="prAntibody-table" style="float: left">
-			  <tr class="prAntibody-table-header" style="position: relative; top: expression(this.offsetParent.scrollTop-2);"><th>Code</th><th>Antigen</th><th>Reactivity</th><th>Application</th><th>Dilution</th><th>Host</th><th>Isotype</th><th>Label</th><th>Stock Concentration</th><th>Vendor</th><th>Product Number</th><th>Price</th></tr>
-			  <tbody><tr style="overflow:scroll"></tr></tbody>
-			</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/secAntibody-body-style.css b/plasmid/source-lsi/html/secAntibody-body-style.css
deleted file mode 100644
index 8e21cf6809e87ca632aeb491b8424d475d457ac5..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/secAntibody-body-style.css
+++ /dev/null
@@ -1,48 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-
-/* Table */
-
-
-.secAntibody-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#secAntibody-table tr:nth-child(odd) td{
-  background-color:#9AC39A;
-}
-
-
-#secAntibody-table tr:nth-child(even) td{
-  background-color:#ECEFEF;
-}
-
-
-
-#secAntibody-table td{
-
-padding:5px;
-}
-
-#secAntibody-table tr.secAntibody-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#729672;	
-  
-}
-
-
-
-
diff --git a/plasmid/source-lsi/html/secAntibody-browser.html b/plasmid/source-lsi/html/secAntibody-browser.html
deleted file mode 100644
index 3b95113dc53cac7fee4c3f6b9e3f438691ac6bb0..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/secAntibody-browser.html
+++ /dev/null
@@ -1,755 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Plasmid Browser</title>
-	<link type="text/css" rel="stylesheet" href="secAntibody-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis('https://openbis-lsi.ethz.ch:8443/openbis/openbis', 'https://openbis-lsi.ethz.ch:8444/datastore_server');
-
-//openbisServer = new openbis('https://localhost:8443/openbis/openbis', 'https://bs-mbp156.ethz.ch:8443/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All secAntibodys
-var secAntibodys = null;
-
-/// The secAntibodys that are currently being inspected
-var inspectedPlasmids = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "PLASMID_NAME", "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order2 = ["BOX_NUMBER", "ROW", "COLUMN","REGISTRATION_DATE"]
-	new_list2 = []
-	for (var a in order2) {
-		for (var b in pairs) {
-			if (pairs[b][0] == order2[a]) {
-				new_list2.push(pairs[b]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    secAntibody = objectOrId;
-  } else {
-  	secAntibody = secAntibodysById[objectOrId];
-  }
-  
-  return secAntibody;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the secAntibodys variable */
-function initializePlasmids(result)
-{
-      // Construct a map of all secAntibodys by id
-  secAntibodysById = {};
-
-	// Split the secAntibodys into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        secAntibodysById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the secAntibodysById map
-	    theSample = secAntibodysById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of secAntibodys
-	secAntibodys = frpPlasmids.concat(otherPlasmids);
-}
-
-/** Set the size of the secAntibody-table based on whether or not inspectors are visible */
-function resizePlasmidTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	if (inspectedPlasmids.length > 0) {
-		cellWidth = ((getAppWidth() - inspectorsWidth) / 9) - padding + "px";
-		areInspectorsVisible = true;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var secAntibodyTableTransition = d3.selectAll('div.secAntibody-table-data-cell');
-	secAntibodyTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectPlasmid(secAntibody)
-{
-	if (inspectedPlasmids.indexOf(secAntibody) < 0) {
-		inspectedPlasmids.push(secAntibody);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var secAntibodyToSend = $.extend({}, secAntibody);
-		delete secAntibodyToSend.parents;
-		delete secAntibodyToSend.children;
-		openbisServer.listDataSetsForSample(secAntibodyToSend, true, dataset.curry(secAntibody));
-	}
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(secAntibody)
-{
-	var index = inspectedPlasmids.indexOf(secAntibody);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedPlasmids.splice(index, 1);
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function dataset(secAntibody, data) {
-	for (var i in data.result) {
-	  console.log(data.result)
-		openbisServer.listFilesForDataSet(data.result[i].code, "/", true, filelist.curry(secAntibody, data.result[i]));
-	}
-}
-
-function filelist(secAntibody, dataset, files) {
-	for (var i in files.result) {
-		if (!files.result[i].isDirectory) {
-			var inspector = inspectors.select("#"+secAntibody.code+"_INSPECTOR");
-			var pathInDataSet = files.result[i].pathInDataSet;
-			var downloadUrl = 'https://openbis-lsi.ethz.ch:8444/datastore_server/'+dataset.code+"/"+pathInDataSet+"?sessionID=" + openbisServer.sessionToken;
-			
-			inspector.select("td.data_sets").append("a").attr("href", downloadUrl).text(pathInDataSet)
-			inspector.select("td.data_sets").append("br");
-			
-			if (/\.svg$/.test(pathInDataSet)) {
-					// Retrieve the svg file and inject it into the DOM
-					d3.xml(downloadUrl, "image/svg+xml", function(xml) {
-						var importedNode = document.importNode(xml.documentElement, true);
-						d3.select(importedNode)
-							.attr("width", inspectorsWidth - 20)
-							.attr("height", inspectorsWidth - 20)
-							.attr("viewBox", "200 200 650 650");
-						inspector.node().appendChild(importedNode);
-					});
-			}
-		}
-	}
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedPlasmids, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier;
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-				
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-	
-
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializePlasmids(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (secAntibodys.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#secAntibody-table").selectAll("tr.secAntibody-table-data").data(secAntibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "secAntibody-table-data")
-		.selectAll("td").data(function(sample) { return [sample.identifier, sample.properties.APPLICATION, sample.properties.DILUTION, sample.properties.HOST , sample.properties.ISOTYPE , sample.properties.LABEL , sample.properties.STOCK_CONCENTRATION , sample.properties.VENDOR, sample.properties.PRODUCT_NUMBER , sample.properties.PRICE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "secAntibody-table-data-cell")
-			.text(String)
-
-}
-
-function secAntibodyFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, secAntibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (secAntibodyNameFilterText == undefined) 
-	{
-		secAntibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedPlasmids = secAntibodys.filter(secAntibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedPlasmids = displayedPlasmids.filter(secAntibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedPlasmids = displayedPlasmids.filter(secAntibodyFilter.curry(secAntibodyNameFilterText, "PLASMID_NAME"));
-	displayedPlasmids = displayedPlasmids.filter(secAntibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedPlasmids = displayedPlasmids.filter(secAntibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedPlasmids = displayedPlasmids.filter(secAntibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#secAntibody-table").selectAll("tr.secAntibody-table-data").data(secAntibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedPlasmids) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "SECONDARY_ANTIBODIES" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis()
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#secAntibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#secAntibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#secAntibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#secAntibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#secAntibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#secAntibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#secAntibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS LSI</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> Secondary Antibodies </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;top:10px;">Logout</button>
-		</div>
-	  <div id="chembio_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/chembio-browser.html">ChemBio</a>  
-		</div>
-		<div id="prAntibody_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/prAntibody-browser.html">Primary Antibodies</a>  
-		</div>
-		<div id="secAntibody_browser"	style="position: absolute; left:10px; top:210px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/secAntibody-browser.html">Secondary Antibodies</a>  
-		</div>	
-		<div id="enzyme_browser" style="position: absolute; left:10px; top:270px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/enzyme-browser.html">Enzymes</a>  
-		</div>
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:320px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/oligo-browser.html">Oligos</a>  
-		</div>	
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:370px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/plasmid-browser.html">Plasmids</a>  
-		</div>		
-	  <div id="bacteria_browser"	style="position: absolute; left:10px; top:420px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/bacteria-browser.html">Bacteria</a>  
-		</div>	
-		<div id="equipment_browser"	style="position: absolute; left:10px; top:470px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source-lsi/html/equipment-browser.html">Equipment</a>  
-		</div>	
-		
-		
-				
-<!-- 		
-	<div id="filter-button"	style="padding-left:500px; padding-top: 650px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 100px">Owner</td><td><input style="width: 200px" id="code_filter" type="text"></td></tr> 		
-	 </table> 		
-    </div>	
-              -->
-		
-	
-    
-		<div id="vis">
-		<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="secAntibody-table" style="float: left">
-			  <tr class="secAntibody-table-header" style="position: relative; top: expression(this.offsetParent.scrollTop-2);"><th>Code</th><th>Application</th><th>Dilution</th><th>Host</th><th>Isotype</th><th>Label</th><th>Stock Concentration</th><th>Vendor</th><th>Product Number</th><th>Price</th></tr>
-			  <tbody><tr style="overflow:scroll"></tr></tbody>
-			</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source-lsi/html/webapp.js b/plasmid/source-lsi/html/webapp.js
deleted file mode 100644
index 1fe2e0bad4ea699d52ebeec6aac084b6538eeecf..0000000000000000000000000000000000000000
--- a/plasmid/source-lsi/html/webapp.js
+++ /dev/null
@@ -1,59 +0,0 @@
-
-function showSamplesRecursively(top, samples, depth)
-{
-	if (depth > 2) return;
-	
-	var sampEnter = 
-		top.selectAll("div.samp")
-			.data(samples)
-		.enter()
-			.append("div")
-				.attr("class", "samp")
-				.style("left", depth > 0 ? "40px" : 0)
-				.text(function(d) { return d.identifier});
-	
-	showSamplesRecursively(sampEnter, function(d) {return d.parents ? d.parents : [] }, depth + 1);
-}
-
-function showSamplesWithParents(samples) {
-	var top = d3.select("#main");
-	samples = samples.filter(function(d) {return d.parents != null});
-	showSamplesRecursively(top, samples, 0);
-}
-
-function retrieveAndShowSamplesWithParents() {
-	
-	var samplesWithParentsSc = 
-	{
-		operator : "MATCH_ALL_CLAUSES",
-		subCriterias: [
-			{
-				targetEntityKind: "SAMPLE_PARENT",
-				criteria: {
-					matchClauses : [ 
-						{"@type":"AttributeMatchClause",
-							attribute : "CODE",
-							fieldType : "ATTRIBUTE",
-							desiredValue : "FR*" 
-						}]}
-			}
-		]
-	};
-	
-	openbisServer.searchForSamplesWithFetchOptions(
-		samplesWithParentsSc,
-		["PROPERTIES", "ANCESTORS"],
-		function(data) { showSamplesWithParents(data.result) });
-	
-}
-
-
-function enterApp()
-{
-	$("#login-form-div").hide();
-	$("#main").show();
-	$('#openbis-logo').height(50);
-	
-	retrieveAndShowSamplesWithParents();
-}
-
diff --git a/plasmid/source/core-plugins/christenmigration/1/as/definitions.py b/plasmid/source/core-plugins/christenmigration/1/as/definitions.py
deleted file mode 100644
index d968b20a1f86762deb0dbb134984f298de1388b6..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/as/definitions.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Documentation
-##
-## Properties starting by "+" will be created in openBIS, but will not be read from FileMaker but if set programmatically will be put back in openBIS.
-## Properties starting by "-" will not be created in openBIS but will be read from FileMaker.
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-#
-# Scripts
-#
-commentsScriptName = "COMMENTS";
-annotationsScriptName="ANNOTATIONS"
-boxLocationScriptName="BOX_LOCATION";
-maxPlasmidMapIDScriptName="MAX_PLASMID_MAP_ID"
-maxPlasmidIDScriptName="MAX_PLASMID_ID"
-slotScriptName="SLOT"
-PlasmidMapIDScriptName="PLASMID_MAP_ID"
-
-
-seqFileDefinition = [
-    ["NAME", "General", "Name", DataType.VARCHAR, None,    "Name", None, None, False],
-    ["NOTES", "General information", "Notes", DataType.MULTILINE_VARCHAR, None, "Notes regarding the dataset", None, None,False],
-    ["XMLCOMMENTS",    "Comments","Comments List",    DataType.XML,    None,    "Several comments can be added by different users", "COMMENTS_DATA_SET", None,False]
-];
-
-
-#
-#Sample Types
-#
-
-
-strainDefinition = [
-    ["NAME",                             "General",                  "plasmid name",                     DataType.VARCHAR,                  None,  "", None, None, False],      
-    ["BOX_LOCATION",                     "General",                  "box location",                     DataType.INTEGER,                  None,  "", boxLocationScriptName, None, False],    
-    ["CONSTRUCTION_METHOD",              "General",                  "constructionMethod",               DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["CREATION_DATE",                    "General",                  "CreationDate",                     DataType.TIMESTAMP,                None,  "", None, None, False],       
-    ["INVESTIGATOR",                     "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,     "LAB_MEMBERS",  "", None, None, False],
-    ["MODIFICATION_DATE",                "General",                  "ModificationDate",                 DataType.TIMESTAMP,                None,  "", None, None, False],    
-    ["PLASMID_ID",                       "General",                  "plasmid_ID",                       DataType.INTEGER,                  None,  "", None, None, False],    
-    ["BC_STRAIN_RESISTANCE",             "General",                  "resistance",                       DataType.CONTROLLEDVOCABULARY,     "BC_STRAIN_RESISTANCE",  "", None, None, False],
-    ["SEQUENCE",                         "General",                  "sequence",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["SLOT",                             "General",                  "slot",                             DataType.INTEGER,                  None,  "", slotScriptName, None, False],
-    ["STRAIN_VECTOR",                    "General",                  "vector",                           DataType.VARCHAR,                  None,  "", None, None, False],
-    ["KEYWORDS",                         "General",                  "keywords",                         DataType.CONTROLLEDVOCABULARY,     "KEYWORDS",  "", None, None, False],
-    ["BC_STRAIN_SOURCE",                 "General",                  "source",                           DataType.CONTROLLEDVOCABULARY,     "BC_STRAIN_SOURCE",  "", None, None, False],
-    ["BC_STRAIN_ORGANISM",               "General",                  "organism",                         DataType.CONTROLLEDVOCABULARY,     "BC_STRAIN_ORGANISM",  "", None, None, False],
-    ["PUBLICATION",                      "References",               "reference",                        DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],    
-    ["COMMENTS",                         "Comments",                 "comments",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["+ANNOTATIONS_STATE",               "Comments",                 "Annotations State",                DataType.XML,                      None,"Annotations State", annotationsScriptName, None, False]
-];
-
-oligoDefinition = [
-    ["NAME",                             "General",                  "Primer_name",                      DataType.VARCHAR,                  None,  "", None, None, False],      
-    ["SEQUENCE",                         "General",                  "Primer_Sequence",                  DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],    
-    ["OLIGO_TARGET",                     "General",                  "Target",                           DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],       
-    ["-PRIMER_NUMBER",                   "General",                  "Primer_number",                    DataType.INTEGER,                None,  "", None, None, False],    
-    ["+ANNOTATIONS_STATE",               "Comments",                 "Annotations State",                DataType.XML,                      None,"Annotations State", annotationsScriptName, None, False]
-];
-
-DNADefinition = [
-    ["NAME",                             "General",                  "plasmid name",                     DataType.VARCHAR,                  None,  "", None, None, False],      
-    ["BOX_LOCATION",                     "General",                  "box location",                     DataType.INTEGER,                  None,  "", boxLocationScriptName, None, False],    
-    ["CONSTRUCTION_METHOD",              "General",                  "constructionMethod",               DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["CREATION_DATE",                    "General",                  "CreationDate",                     DataType.TIMESTAMP,                None,  "", None, None, False],       
-    ["INVESTIGATOR",                     "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,     "LAB_MEMBERS",  "", None, None, False],
-    ["MODIFICATION_DATE",                "General",                  "ModificationDate",                 DataType.TIMESTAMP,                None,  "", None, None, False],    
-    ["PLASMID_ID",                       "General",                  "plasmid_ID",                       DataType.INTEGER,                  None,  "", None, None, False],    
-    ["DNA_SIZE",                         "General",                  "size",                             DataType.REAL,                  None,  "", None, None, False],    
-    ["RESTRICTION_ENZYME",               "General",                  "Restriction enzymes",              DataType.VARCHAR,                  None,  "", None, None, False],    
-    ["DNA_PURITY",                       "General",                  "purity",                           DataType.CONTROLLEDVOCABULARY,     "DNA_PURITY",  "", None, None, False],    
-    ["PCR_POLYMERASE",                   "General",                  "PCR polymerase",                   DataType.CONTROLLEDVOCABULARY,     "PCR_POLYMERASE",  "", None, None, False],    
-    ["DNA_TYP",                          "General",                  "DNA typ",                          DataType.CONTROLLEDVOCABULARY,     "DNA_TYP",  "", None, None, False],    
-    ["DNA_MODIFICATIONS",                "General",                  "DNA modifications",                DataType.CONTROLLEDVOCABULARY,     "DNA_MODIFICATIONS",  "", None, None, False],    
-    ["DNA_RESISTANCE",                   "General",                  "resistance",                       DataType.CONTROLLEDVOCABULARY,     "DNA_RESISTANCE",  "", None, None, False],
-    ["SEQUENCE",                         "General",                  "Sequence",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["SLOT",                             "General",                  "slot",                             DataType.INTEGER,                  None,  "", slotScriptName, None, False],
-    ["DNA_VECTOR",                        "General",                  "vector",                           DataType.VARCHAR,                  None,  "", None, None, False],
-    ["PUBLICATION",                      "References",               "reference",                        DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],    
-    ["COMMENTS",                         "Comments",                 "comments",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["+ANNOTATIONS_STATE",               "Comments",                 "Annotations State",                DataType.XML,                      None,"Annotations State", annotationsScriptName, None, False]
-];
-
-
diff --git a/plasmid/source/core-plugins/christenmigration/1/as/definitionsVoc.py b/plasmid/source/core-plugins/christenmigration/1/as/definitionsVoc.py
deleted file mode 100644
index 05a2c750e1ea30cd90d36ee6749d6e338384fe6e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/as/definitionsVoc.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                          "LAB_MEMBERS": [
-                                            ["Beat_Christen", "Beat Christen"],
-                                            ["Matthias_Christen", "Matthias Christen"],
-                                            ["Luca_Del_Medico", "Luca Del Medico"],
-                                            ["Dario_Cerletti", "Dario Cerletti"],
-                                            ["Flavia_Tschan", "Flavia Tschan"],
-                                            ["Carlos_Flores_Tinoco", "Carlos Flores Tinoco"],
-                                            ["Bo_Zhou", "Bo Zhou"],
-                                            ["Aaron_Abraham", "Aaron Abraham"],
-                                            ["Martha_Gerber", "Martha Gerber"],
-                                            ["Flora_Mauch", "Flora Mauch"],
-                                            ["Mike_Fero", "Mike Fero"]
-                                        ],
-
-                         "BC_STRAIN_RESISTANCE":   [
-                                                ["km", "km"],
-                                                ["tet", "tet"],
-                                                ["amp", "amp"],                                                
-                                                ["chlor", "chlor"],                                                
-                                                ["hyg", "hyg"],                                                
-                                                ["strep", "strep"],                                                
-                                                ["spec", "spec"],                                                
-                                                ["carb", "carb"],                                                
-                                                ["gent", "gent"],                                                
-                                                ["nal", "nal"],
-                                                ["rif", "rif"],                                                
-                                                ["apr", "apr"]                                                                                                
-                                            ],
-                 
-                        "KEYWORDS": [
-                                                ["Tn5", "Tn5"],
-                                                ["Tn10", "Tn10"],
-                                                ["T-POP", "T-POP"],
-                                                ["mudK", "mudK"],
-                                                ["mudJ", "mudJ"],
-                                                ["mariner", "mariner"],
-                                                ["promotor_fusion", "promotor fusion"],
-                                                ["protein_fusion", "protein fusion"],
-                                                ["gfp_fusion", "gfp fusion"],
-                                                ["lacZ", "lacZ"],
-                                                ["phoA", "phoA"],
-                                                ["gus", "gus"],
-                                                ["neo", "neo"],
-                                                ["sacB", "sacB"],
-                                                ["His_tag", "His tag"]
-                                         ],
-                                                  
-                         "BC_STRAIN_SOURCE":   [
-                                                ["SGSC", "SGSC"],
-                                                ["Kelly_Hughes", "Kelly Hughes"],
-                                                ["Patrick_Viollier", "Patrick Viollier"],
-                                                ["Matthias", "Matthias"],
-                                                ["Andreas_Gassmann", "Andreas Gassmann"]
-                                            ],
-                         
-                         "BC_STRAIN_ORGANISM":   [
-                                                ["DH10B", "DH10B"],
-                                                ["SM10", "SM10"],
-                                                ["D5a", "D5a"],
-                                                ["BL21", "BL21"],
-                                                ["S17", "S17"],
-                                                ["LT2", "LT2"],
-                                                ["ccr", "ccr"],
-                                                ["Top10", "Top10"],
-                                                ["Top10F", "Top10F'"],
-                                                ["other_Eco", "other Eco"],
-                                                ["Sme", "Sme"],
-                                                ["phage", "phage"],
-                                                ["other", "other"]
-                                            ],
-                         
-                         "DNA_PURITY": [
-                                                ["columne", "columne"],
-                                                ["gel", "gel"],
-                                                ["EtOH", "EtOH"],
- 
-                                            ],
-                         
-                         "PCR_POLYMERASE": [
-                                                ["Taq", "Taq"],
-                                                ["Pfu", "Pfu"],
-                                                ["Pwo", "Pwo"],
-                                                ["high_fidelity", "high fidelity"]
-
-                                            ],
-                         
-                         
-                         "DNA_RESISTANCE": [
-                                                ["km", "km"],
-                                                ["tet", "tet"],
-                                                ["amp", "amp"],                                                
-                                                ["cm", "cm"],                                                
-                                                ["hyg", "hyg"],                                                
-                                                ["strep", "strep"],                                                
-                                                ["spec", "spec"],                                                
-                                                ["gent", "gent"]                                                
-
-                                            ],
-                         
-
-                         "DNA_TYP": [
-                                                ["gen_DNA", "gen DNA"],
-                                                ["PCR", "PCR"],
-                                                ["plasmid", "plasmid"],
-                                                ["insert", "insert"],
-                                                ["cosmid", "cosmid"]
-
-                                            ],
-
-                       
-                         "DNA_MODIFICATIONS": [
-                                                ["Methylated", "Methylated"],
-                                                ["digested", "digested"],
-                                                ["SAPed", "SAPed"]
- 
-                                            ]
-
-                         
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/christenmigration/1/as/initialize-master-data.py b/plasmid/source/core-plugins/christenmigration/1/as/initialize-master-data.py
deleted file mode 100644
index 4dd22faed4de64755b95463d6acea4c9e6180144..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/as/initialize-master-data.py
+++ /dev/null
@@ -1,223 +0,0 @@
-#
-# Copyright 2014 ETH Zuerich, Scientific IT Services
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##
-## Configuration
-##
-#PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/juanf/Documents/workspace/openbis/source/core-plugins/petermigration/1/compatibility/";
-#PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/home/openbis/openbis/servers/core-plugins/christenmigration/1/compatibility/";
-
-PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/barillac/openbis-christen/servers/core-plugins/christenmigration/1/compatibility/";
-
-# MasterDataRegistrationTransaction Class
-import definitions
-import definitionsVoc
-import os
-import copy
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Globals
-##
-vocabulariesCache = {};
-propertiesCache = {};
-samplesCache = {};
-tr = service.transaction()
-
-##
-## API Facade
-##
-def createVocabularyWithTerms(vocabularyCode, terms):
-    vocabulary = tr.createNewVocabulary(vocabularyCode);
-    vocabulary.setChosenFromList(True);
-    addTerms(vocabulary, terms);
-    vocabulariesCache[vocabularyCode] = vocabulary;
-    
-def addTerms(vocabulary, terms):
-    for term in terms:
-        addTermWithLabel(vocabulary, term[0], term[1])
-    
-def addTermWithLabel(vocabulary, termCode, termLabel):
-    newTerm = tr.createNewVocabularyTerm(termCode);
-    newTerm.setLabel(termLabel);
-    vocabulary.addTerm(newTerm);
-    
-def createSampleTypeWithProperties(sampleTypeCode, description, properties):
-    newSampleType = tr.getOrCreateNewSampleType(sampleTypeCode);
-    newSampleType.setDescription(description);
-    newSampleType.setShowParents(True);
-    newSampleType.setAutoGeneratedCode(True);
-    newSampleType.setGeneratedCodePrefix(sampleTypeCode[:3]);
-    addProperties(newSampleType, properties);
-    samplesCache[sampleTypeCode] = newSampleType;
-    
-def createDataSetTypeWithProperties(dataSetCode, description, properties):
-    newDataSet = tr.getOrCreateNewDataSetType(dataSetCode);
-    newDataSet.setDescription(description);
-    addProperties(newDataSet, properties);
-    
-def createExperimentTypeWithProperties(experimentTypeCode, description, properties):
-    newExperiment = tr.getOrCreateNewExperimentType(experimentTypeCode);
-    newExperiment.setDescription(description);
-    addProperties(newExperiment, properties);
-
-def addPropertiesToSamples(sampleTypeCodes, properties):
-    for sampleTypeCode in sampleTypeCodes:
-        sampleType = samplesCache[sampleTypeCode];
-        addProperties(sampleType, properties);
-    
-def addProperties(entity, properties):
-    for property in properties:
-        propertyCode = property[0];
-        if propertyCode.startswith("-"):
-            continue
-        elif propertyCode.startswith("+"):
-            propertyCode = propertyCode[1:];
-        
-        addProperty(entity, propertyCode, property[1], property[2], property[3], property[4], property[5], property[6], property[7], property[8]);
-    
-def addProperty(entity, propertyCode, section, propertyLabel, dataType, vocabularyCode, propertyDescription, managedScript, dynamicScript, isMandatory):
-    property = None;
-    
-    if propertyCode in propertiesCache:
-        property = propertiesCache[propertyCode];
-    else:
-        property = createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode);
-    
-    propertyAssignment = tr.assignPropertyType(entity, property);
-    propertyAssignment.setSection(section);
-    propertyAssignment.setMandatory(isMandatory);
-    propertyAssignment.setShownEdit(True);
-    
-    if managedScript != None:
-        propertyAssignment.setManaged(True);
-        propertyAssignment.setScriptName(managedScript);
-    if dynamicScript != None:
-        propertyAssignment.setDynamic(True);
-        propertyAssignment.setShownEdit(False);
-        propertyAssignment.setScriptName(dynamicScript);
-
-def createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode):
-    property = tr.getOrCreateNewPropertyType(propertyCode, dataType);
-    property.setDescription(propertyDescription);
-    property.setLabel(propertyLabel);
-    propertiesCache[propertyCode] = property;
-    if dataType == DataType.CONTROLLEDVOCABULARY:
-        property.setVocabulary(vocabulariesCache[vocabularyCode]);
-    return property;
-
-#Valid Script Types: DYNAMIC_PROPERTY, MANAGED_PROPERTY, ENTITY_VALIDATION 
-def createScript(path, name, description, scriptType, entityType):
-    scriptAsString = open(path, 'r').read();
-    script = tr.getOrCreateNewScript(name);
-    script.setName(name);
-    script.setDescription(description);
-    script.setScript(scriptAsString);
-    script.setScriptType(scriptType);
-    script.setEntityForScript(entityType);
-    return script;
-
-
-def createAnnotationsScriptForType(sampleTypeCode):
-    annotationsScriptName = None;
-    if PATH_TO_MANAGE_PROPERTIES_SCRIPTS != None:
-        annotationsScriptName = "ANNOTATIONS_" + sampleTypeCode;
-        annotationsScriptAsString = open(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "managed.py", 'r').read();
-        annotationsScriptAsString = annotationsScriptAsString.replace("<REPLACE_WITH_ANNOTABLE_TYPE>", sampleTypeCode);
-        annotationsScript = tr.getOrCreateNewScript(annotationsScriptName);
-        annotationsScript.setName(annotationsScriptName);
-        annotationsScript.setDescription("Annotations Handler for " + sampleTypeCode);
-        annotationsScript.setScript(annotationsScriptAsString);
-        annotationsScript.setScriptType("MANAGED_PROPERTY");
-        annotationsScript.setEntityForScript("SAMPLE");
-    return annotationsScriptName;    
-##
-## Managed properties scripts
-##
-commentsScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "comments.py",
-                                  definitions.commentsScriptName,
-                                  "Comments Handler",
-                                  "MANAGED_PROPERTY",
-                                  "SAMPLE");
-
-##
-## Dynamic properties scripts
-##
-
-
-boxLocationScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "box_location.py",
-                                  definitions.boxLocationScriptName,
-                                  "box location",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-
-maxPlasmidMapIDScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "max_plasmid_map_id.py",
-                                  definitions.maxPlasmidMapIDScriptName,
-                                  "max plasmid map id",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");    
-
-maxPlasmidIDScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "max_plasmid_id.py",
-                                  definitions.maxPlasmidIDScriptName,
-                                  "max plasmid id",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");    
-                                  
-PlasmidMapIDScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "plasmid_map_id.py",
-                                  definitions.PlasmidMapIDScriptName,
-                                  "plasmid map id",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");                                     
-
-
-slotScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "slot.py",
-                                  definitions.slotScriptName,
-                                  "slot",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");            
-
-##
-## Vocabulary Types
-##
-for vocabularyCode, vocabularyValues in definitionsVoc.vocabularyDefinitions.iteritems():
-    createVocabularyWithTerms(vocabularyCode, vocabularyValues)
-
-##
-## Experiment Types
-##
-#createExperimentTypeWithProperties("DEFAULT_EXPERIMENT", "Default Experiment", definitions.experimentDefinition);
-#createExperimentTypeWithProperties("MATERIAL", "FOLDER FOR ORGANIZING MATERIALS SAMPLES", []);
-#createExperimentTypeWithProperties("METHOD", "FOLDER FOR ORGANIZING METHODS SAMPLES", []);
-
-#createDatasetTypeWithProperties("SEQ_FILE", "Sequence fasta files", []);
-createDataSetTypeWithProperties("SEQ_FILE", "Sequence fasta files", definitions.seqFileDefinition);
-##
-## Sample Types
-##
-annotationsScriptName = createAnnotationsScriptForType("STRAIN");
-createSampleTypeWithProperties("STRAIN", "", definitions.strainDefinition);
-#===================================================================================================
-annotationsScriptName = createAnnotationsScriptForType("DNA");
-createSampleTypeWithProperties("DNA", "", definitions.DNADefinition);
-annotationsScriptName = createAnnotationsScriptForType("OLIGO");
-createSampleTypeWithProperties("OLIGO", "", definitions.oligoDefinition);
-
-#===================================================================================================
-
-
-    
-    
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/christenmigration/1/compatibility/box_location.py b/plasmid/source/core-plugins/christenmigration/1/compatibility/box_location.py
deleted file mode 100644
index 5fa427e1008e88a753ef2701318d8e55800300e3..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/compatibility/box_location.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import re
-
-def calculate_location(): 
-	
-	plasmid_ID= float(entity.propertyValue('PLASMID_ID'))
-	location=(plasmid_ID/81)+0.499999
-	round_location=int (round(location))
-
-	return round_location
-     
-def calculate():
-	return calculate_location()
diff --git a/plasmid/source/core-plugins/christenmigration/1/compatibility/comments.py b/plasmid/source/core-plugins/christenmigration/1/compatibility/comments.py
deleted file mode 100644
index 02c50d2364afd8bf0dce2d50297c6bff2ccb35bf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/compatibility/comments.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from java.util import Date
-
-"""
-Example XML property value handled by this script:
-<root>
-  <commentEntry date="2011-02-20 14:15:28 GMT+01:00" person="buczekp">Here is the 1st  entry text.<commentEntry>
-  <commentEntry date="2011-02-20 14:16:28 GMT+01:00" person="kohleman">Here is the 2nd  entry text - a warning!<commentEntry>
-  <commentEntry date="2011-02-20 14:17:28 GMT+01:00" person="tpylak">Here is the 3rd  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:18:28 GMT+01:00" person="brinn">Here is the 4th  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:19:28 GMT+01:00" person="felmer">Here is the 5th  entry text - a warning!<commentEntry>
-</root>
-"""
-  
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-
-""" labels of table columns and corresponding input fields """
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-  
-""" names of attributes of XML elements for comment entries """
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-  
-""" action labels (shown as button labels in UI) """
-ADD_ACTION_LABEL = 'Add Comment Entry'
-EDIT_ACTION_LABEL = 'Edit'
-DELETE_ACTION_LABEL = 'Delete'
-  
-  
-def configureUI():
-    """Create table builder and add headers of columns."""
-    builder = createTableBuilder()
-    builder.addHeader(DATE_LABEL, 250) # date and comment text values are long, override default width (150)
-    builder.addHeader(PERSON_LABEL)
-    builder.addHeader(COMMENT_TEXT_LABEL, 400)
-      
-    """
-       Extract XML elements from property value to a Python list.
-       For each element (comment entry) add add a row to the table.  
-    """
-    elements = list(propertyConverter().convertToElements(property))
-    for commentEntry in elements:
-        row = builder.addRow()
-        row.setCell(DATE_LABEL, Date(long(commentEntry.getAttribute(DATE_ATTRIBUTE))))
-        row.setCell(PERSON_LABEL, commentEntry.getAttribute(PERSON_ATTRIBUTE))
-        row.setCell(COMMENT_TEXT_LABEL, commentEntry.getData())
-  
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(builder.getTableModel())
-  
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new comment entry,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add a new comment entry:')
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL)\
-                            .setMandatory(True)
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected comment entry,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected comment entry:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL).setMandatory(True)
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(COMMENT_TEXT_LABEL, COMMENT_TEXT_LABEL)
-  
-    """
-       3. delete selected comment entries.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected comment entry?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-  
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new comment entry element with values from input fields
-           and add it to existing elements.
-        """
-        element = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-        """Fill element attributes with appropriate values."""
-        element.addAttribute(DATE_ATTRIBUTE, str(Date().getTime()))            # current date
-        element.addAttribute(PERSON_ATTRIBUTE, action.getPerson().getUserId()) # invoker the action
-        """Retrieve values from input fields filled by user on the client side."""
-
-        """Set comment text as a text element, not an attribute."""
-        element.setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        """Add the new entry to the end of the element list."""
-        elements.append(element)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the comment entry element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        
-        selectedRowId = action.getSelectedRows()[0]
-        xmlUser = elements[selectedRowId].getAttribute(PERSON_ATTRIBUTE)
-        if action.getPerson().getUserId() == xmlUser:
-          elements[selectedRowId].setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        else:
-          raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the entries that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-              xmlUser = elements[rowId].getAttribute(PERSON_ATTRIBUTE)
-              if action.getPerson().getUserId() == xmlUser:
-                elements.pop(rowId)
-              else:
-                raise ValidationException('Comment creator and current user differ:\n' +  str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def _createCommentEntry(comment_text_list):
-    #if comment_text_list is not None:
-    commentEntry = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-                     
-    commentEntry.addAttribute(PERSON_ATTRIBUTE, person.getUserId())
-    commentEntry.addAttribute(DATE_ATTRIBUTE,str(Date().getTime()))
-    commentEntry.setData(comment_text_list)
-    return commentEntry   
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [COMMENT_ENTRY_ELEMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        comment_text_list = item.get('COMMENTENTRY')
-        sampleLink = _createCommentEntry(comment_text_list)
-        elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        commentEntry = _createCommentEntry(input)
-        elements.append(commentEntry)
-        property.value = propertyConverter().convertToString(elements)
diff --git a/plasmid/source/core-plugins/christenmigration/1/compatibility/managed.py b/plasmid/source/core-plugins/christenmigration/1/compatibility/managed.py
deleted file mode 100644
index 6d6312c0f92b6c8bcc7e59032b5bbad4d7005858..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/compatibility/managed.py
+++ /dev/null
@@ -1,331 +0,0 @@
-from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider
-
-##
-## Configuration
-##
-
-# This needs to be edited for each sample type to match the Profile.js ANNOTATION_PROPERTIES map.
-configuration = {}
-configuration["MEDIA"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["SOLUTION_BUFFER"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["GENERAL_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "GENERAL_PROTOCOL" : {"COMMENTS" : False }
-                         };
-
-configuration["PCR_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["WESTERN_BLOTTING_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["PLASMID"] = {
-                          "PLASMID" : {"COMMENTS" : False }
-                         };
-
-configuration["BACTERIA"] = {
-                          "BACTERIA" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False }
-                         };
-
-configuration["YEAST"] = {
-                          "YEAST" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False, "CONTAINED" : False }
-                         };
-
-configuration["CELL_LINE"] = {
-                          "CELL_LINE" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False },
-                          "FLY" : {"COMMENTS" : False }
-                         };
-
-configuration["FLY"] = {
-                          "FLY" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False }
-                         };
-
-configuration["EXPERIMENTAL_STEP"] = {
-                          "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "BACTERIA" : {"COMMENTS" : False },
-                          "CELL_LINE" : {"COMMENTS" : False },
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "FLY" : {"COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "OLIGO" : {"COMMENTS" : False },
-                          "PLASMID" : {"COMMENTS" : False },
-                          "RNA" : {"COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "YEAST" : {"COMMENTS" : False },
-                          "GENERAL_PROTOCOL" : {"COMMENTS" : False },
-                          "PCR_PROTOCOL" : {"COMMENTS" : False },
-                          "WESTERN_BLOTTING_PROTOCOL" : {"COMMENTS" : False }
-                         };
-
-configurationCopyParents = {}
-configurationCopyParents["YEAST"] = { "YEAST" : "PLASMID" };
-
-#Global Variables
-annotableType = "<REPLACE_WITH_ANNOTABLE_TYPE>"
-propertyTypes = None
-def getPropertyTypes():
-    global propertyTypes
-    if propertyTypes is None:
-        server = CommonServiceProvider.getCommonServer()
-        contextOrNull = server.tryToAuthenticateAsSystem()
-        propertyTypes = server.listPropertyTypes(contextOrNull.getSessionToken(), False)
-    return propertyTypes;
-
-##
-## Help Methods
-##
-def getAllAnnotableSampleTypesForType(fromAnnotableType):
-    allTypes = {};
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    allTypes[sampleTypeWithAnnotationsForType] = True;
-    return allTypes;
-
-def getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCodeToFind, fromAnnotableType):
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    if sampleTypeWithAnnotationsForType == sampleTypeCodeToFind:
-                            return configuration[sampleTypeWithAnnotations][sampleTypeWithAnnotationsForType];
-    return None;
-    
-def getPropertyType(propertyTypeCode):
-    for propertyType in getPropertyTypes():
-        if propertyType.code == propertyTypeCode:
-            return propertyType
-    return None;
-
-def createAnnotationsFor(identifier, annotations, sampleType):
-    permId = entityInformationProvider().getSamplePermId(identifier);
-    newAnnotation = elementFactory().createSampleLink(permId)
-    
-    newAnnotation.addAttribute("identifier", identifier)
-    newAnnotation.addAttribute("sampleType", sampleType)
-    for annotation in annotations:
-        newAnnotation.addAttribute(annotation, annotations[annotation])
-    return newAnnotation
-
-def getWidgetForAdd(sampleTypeCode, annotableType):
-    #print "sampleTypeCode:" + sampleTypeCode + " - " + annotableType #Deleting this comment causes the thing to break
-    widgets = []
-    widgetIdentifier = inputWidgetFactory().createTextInputField("identifier")\
-                            .setMandatory(True)\
-                            .setValue("")\
-                            .setDescription("")
-    widgets.append(widgetIdentifier)
-    for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-        propertyType = getPropertyType(propertyTypeCode)
-        widget = inputWidgetFactory().createTextInputField(propertyType.label)\
-                        .setMandatory(getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType)[propertyTypeCode])\
-                        .setValue("")\
-                        .setDescription(propertyType.description)
-        widgets.append(widget)
-    return widgets;
-
-def isValid(dataType, value):
-    return True
-
-##
-## Registration form (EXPERIMENTAL)
-##
-
-# def inputWidgets():
-#     print "EXECUTING inputWidgets START"
-#     widgetsToCopyFrom = []
-#     if annotableType in configurationCopyParents:
-#         toCopyFrom = configurationCopyParents[annotableType]
-#         if(toCopyFrom is not None):
-#             for key in toCopyFrom:
-#                 widgetLabel = key + " to copy " + toCopyFrom[key]
-#                 print "EXECUTING inputWidgets key: " + widgetLabel
-#                 widgetToCopyFrom = inputWidgetFactory().createTextInputField(widgetLabel).setMandatory(False)
-#                 widgetsToCopyFrom.append(widgetToCopyFrom)
-#     print "EXECUTING inputWidgets " + str(len(widgetsToCopyFrom))
-#     return widgetsToCopyFrom
-# 
-# def updateFromRegistrationForm(bindings):
-#     print "EXECUTING updateFromaRegistrationForm"
-#     for key in bindings:
-#         print "MANAGED WITH KEY: " + str(key)
-
-##
-## Main Methods
-##
-def configureUI():
-    # Add Headers
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader("identifier")
-    tableBuilder.addHeader("sampleType")
-    tableBuilder.addHeader("name")
-    
-    usedTableHeaders = {"identifier" : True, "sampleType" : True, "name" : True }
-    
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            if propertyTypeCode not in usedTableHeaders:
-                tableBuilder.addHeader(propertyTypeCode)
-                usedTableHeaders[propertyTypeCode] = True
-
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    # Add Rows
-    samples = list(propertyConverter().convertToElements(property))
-    for sample in samples:
-        row = tableBuilder.addRow()
-        permId = sample.getAttribute("permId")
-        
-        nameValue = entityInformationProvider().getSamplePropertyValue(permId, "NAME")
-        if nameValue is not None:
-            row.setCell("name", nameValue)
-        
-        for annotation in sample.getAttributes():
-            if annotation != "permId":
-                if annotation == "identifier":
-                    row.setCell(annotation, sample, sample.getAttribute(annotation))
-                else:
-                    row.setCell(annotation, sample.getAttribute(annotation))
-            
-    # Add Create buttons
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        title = "Add " + sampleTypeCode;
-        addAction = uiDescription.addTableAction(title).setDescription(title)
-        widgets = getWidgetForAdd(sampleTypeCode, annotableType)
-        addAction.addInputWidgets(widgets)
-
-    # TO-DO Edit button for each type with different hooks to the columns depending on the type
-    # Add Edit Button (EXPERIMENTAL)
-#     editAction = uiDescription.addTableAction('Edit').setDescription('Edit selected table row')
-#     editAction.setRowSelectionRequiredSingle()
-#     editWidgets = []
-#     for headerKey in usedTableHeaders:
-#         editWidgets.append(inputWidgetFactory().createTextInputField(headerKey))
-#         editAction.addBinding(headerKey, headerKey)
-#     editAction.addInputWidgets(editWidgets)
-
-    # Add Delete button
-    deleteAction = uiDescription.addTableAction("Delete")\
-                                .setDescription('Are you sure you want to delete selected annotation?')
-    deleteAction.setRowSelectionRequired() # Delete is enabled when at least 1 row is selected.
-    
-def updateFromUI(action):
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-    
-    if action.name.startswith("Add"):
-        sampleTypeCode = action.name[4:]
-        identifier = action.getInputValue("identifier")
-        annotations = { }
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            propertyType = getPropertyType(propertyTypeCode)
-            propertyTypeValue = action.getInputValue(propertyType.label)
-            if not isValid(propertyType.dataType, propertyTypeValue):
-                raise ValidationException("Property " + str(propertyType.label) + " with invalid value " + str(propertyTypeValue))
-            if propertyTypeValue is None:
-                propertyTypeValue = ""
-            annotations[propertyTypeCode] = propertyTypeValue
-        newAnnotation = createAnnotationsFor(identifier, annotations, sampleTypeCode)
-        elements.append(newAnnotation)
-    
-    if action.name.startswith("Delete"):
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()
-        for rowId in rowIds:
-            elements.pop(rowId) 
-    
-    property.value = converter.convertToString(elements)
-
-##
-## Batch Import Methods
-##
-def batchColumnNames():
-    allTypes = []
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        allTypes.append(sampleTypeCode)
-    return allTypes
-
-def updateFromBatchInput(bindings):
-    #print "--------> UPDATE FROM BATCH INPUT: "
-    elements = []
-    
-    #Links Configuration
-    typesToCopyFrom = []
-    if annotableType in configurationCopyParents:
-        typesToCopyFrom = configurationCopyParents[annotableType]
-                
-    for annotableSampleType in getAllAnnotableSampleTypesForType(annotableType):
-        annotatedSamples = bindings.get(annotableSampleType)
-        #print "-----> TYPE: " + str(annotableSampleType) + " BINDINGS: " + str(annotatedSamples)
-        if (annotatedSamples != None and annotatedSamples != ""):
-            #Annotations
-            #print "-----> Annotations"
-            if annotableSampleType not in typesToCopyFrom:
-                for sampleLine in annotatedSamples.split("\\"):
-                    propertyTypes = getPropertyTypesForSampleTypeFromAnnotableType(annotableSampleType, annotableType)
-                    identifier = None
-                    permId = None
-                    sampleLink = None
-                    for sampleProperty in sampleLine.split(";"):
-                        propertyName = sampleProperty.split(":")[0]
-                        propertyValue = sampleProperty.split(":")[1]
-                        if propertyName == "identifier":
-                            identifier = propertyValue
-                            permId = entityInformationProvider().getSamplePermId(propertyValue)
-                            sampleLink = elementFactory().createSampleLink(permId)
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                            sampleLink.addAttribute('sampleType', annotableSampleType)
-                        elif propertyName in propertyTypes:
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                        else:
-                            raise NameError('Found invalid property: ' + propertyName + " on type " + annotableSampleType)
-                    if identifier is not None:
-                        elements.append(sampleLink)
-    #Links
-    #print "-----> links"
-    for typeToCopyFrom in typesToCopyFrom:
-        typeToCopy = typesToCopyFrom[typeToCopyFrom]
-        #print "-----> TYPE TO COPY FROM: " + str(typeToCopyFrom)
-        #print "-----> TYPE TO COPY: " + str(typeToCopy)
-        identifiersToCopyFrom = bindings.get(typeToCopyFrom)
-        if identifiersToCopyFrom is not None:
-            #print "-----> IDENTIFIERS TO COPY FROM: " + str(identifiersToCopyFrom)
-            identifiersForCopy = identifiersToCopyFrom.split(',')
-            for identifierToCopyFrom in identifiersForCopy:
-                #print "-----> IDENTIFIER TO COPY FROM: " + str(identifierToCopyFrom)
-                permIdFromIdentifier = entityInformationProvider().getSamplePermId(identifierToCopyFrom)
-                #print "-----> PERMID TO COPY FROM: " + str(permIdFromIdentifier)
-                parentsToCopyFromPermId = entityInformationProvider().getSamplePropertyValue(permIdFromIdentifier, "ANNOTATIONS_STATE")
-                #print "-----> ELEMENTS TO COPY: " + str(parentsToCopyFromPermId)
-                parentElements = list(propertyConverter().convertStringToElements(parentsToCopyFromPermId))
-                for parentAnnotation in parentElements:
-                    if parentAnnotation.getAttribute("sampleType") == typeToCopy:
-                        parentAnnotation.addAttribute("CONTAINED", identifierToCopyFrom)
-                        #print "-----> COPYING: " + str(parentAnnotation.getAttribute('identifier'))
-                        elements.append(parentAnnotation)
-    property.value = propertyConverter().convertToString(elements)
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/christenmigration/1/compatibility/max_plasmid_id.py b/plasmid/source/core-plugins/christenmigration/1/compatibility/max_plasmid_id.py
deleted file mode 100644
index fff8297cf08b4a8c7fc9c49d2ec5643ff30fca3d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/compatibility/max_plasmid_id.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import re
-
-def calculate_maxID(): 
-
-	max_plasmid_id=max(entity.propertyValue('PLASMID_ID'))
-
-	return max_plasmid_id
-     
-def calculate():
-	return calculate_maxID()
diff --git a/plasmid/source/core-plugins/christenmigration/1/compatibility/max_plasmid_map_id.py b/plasmid/source/core-plugins/christenmigration/1/compatibility/max_plasmid_map_id.py
deleted file mode 100644
index 96580860f4f32f96063ec96aaf01ecbea5e2dbb9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/compatibility/max_plasmid_map_id.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import re
-
-def calculate_maxID(): 
-
-	max_plasmid_map_id=max(entity.propertyValue('PLASMID_MAP_ID'))
-
-	return max_plasmid_map_id
-     
-def calculate():
-	return calculate_maxID()
diff --git a/plasmid/source/core-plugins/christenmigration/1/compatibility/plasmid_map_id.py b/plasmid/source/core-plugins/christenmigration/1/compatibility/plasmid_map_id.py
deleted file mode 100644
index 57bb38670f1ed606b2fd26fa42fe76f1bb72f1c3..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/compatibility/plasmid_map_id.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import re
-
-def calculate_mapID(): 
-
-	plasmid_map_id=max(entity.propertyValue('MAX_PLASMID_MAP_ID'))+1
-
-	return plasmid_map_id
-     
-def calculate():
-	return calculate_mapID()
diff --git a/plasmid/source/core-plugins/christenmigration/1/compatibility/slot.py b/plasmid/source/core-plugins/christenmigration/1/compatibility/slot.py
deleted file mode 100644
index 37943d553a7636a73fe89ac082c4470f3c71fdb8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/compatibility/slot.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import re
-
-def calculate_slot(): 
-
-	plasmid_ID= float(entity.propertyValue('PLASMID_ID'))
-	location=(plasmid_ID/81)+0.499999
-	round_location=int (round(location))
-	
-
-	
-	if (location > 1.1):
-		new_location=(round_location-1)*81
-		slot = int(plasmid_ID-new_location)
-	else:
-		slot = int(plasmid_ID)
-
-	return slot
-     
-def calculate():
-	return calculate_slot()
-
-
diff --git a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/defs/definitions.py b/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/defs/definitions.py
deleted file mode 100644
index d968b20a1f86762deb0dbb134984f298de1388b6..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/defs/definitions.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Documentation
-##
-## Properties starting by "+" will be created in openBIS, but will not be read from FileMaker but if set programmatically will be put back in openBIS.
-## Properties starting by "-" will not be created in openBIS but will be read from FileMaker.
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-#
-# Scripts
-#
-commentsScriptName = "COMMENTS";
-annotationsScriptName="ANNOTATIONS"
-boxLocationScriptName="BOX_LOCATION";
-maxPlasmidMapIDScriptName="MAX_PLASMID_MAP_ID"
-maxPlasmidIDScriptName="MAX_PLASMID_ID"
-slotScriptName="SLOT"
-PlasmidMapIDScriptName="PLASMID_MAP_ID"
-
-
-seqFileDefinition = [
-    ["NAME", "General", "Name", DataType.VARCHAR, None,    "Name", None, None, False],
-    ["NOTES", "General information", "Notes", DataType.MULTILINE_VARCHAR, None, "Notes regarding the dataset", None, None,False],
-    ["XMLCOMMENTS",    "Comments","Comments List",    DataType.XML,    None,    "Several comments can be added by different users", "COMMENTS_DATA_SET", None,False]
-];
-
-
-#
-#Sample Types
-#
-
-
-strainDefinition = [
-    ["NAME",                             "General",                  "plasmid name",                     DataType.VARCHAR,                  None,  "", None, None, False],      
-    ["BOX_LOCATION",                     "General",                  "box location",                     DataType.INTEGER,                  None,  "", boxLocationScriptName, None, False],    
-    ["CONSTRUCTION_METHOD",              "General",                  "constructionMethod",               DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["CREATION_DATE",                    "General",                  "CreationDate",                     DataType.TIMESTAMP,                None,  "", None, None, False],       
-    ["INVESTIGATOR",                     "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,     "LAB_MEMBERS",  "", None, None, False],
-    ["MODIFICATION_DATE",                "General",                  "ModificationDate",                 DataType.TIMESTAMP,                None,  "", None, None, False],    
-    ["PLASMID_ID",                       "General",                  "plasmid_ID",                       DataType.INTEGER,                  None,  "", None, None, False],    
-    ["BC_STRAIN_RESISTANCE",             "General",                  "resistance",                       DataType.CONTROLLEDVOCABULARY,     "BC_STRAIN_RESISTANCE",  "", None, None, False],
-    ["SEQUENCE",                         "General",                  "sequence",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["SLOT",                             "General",                  "slot",                             DataType.INTEGER,                  None,  "", slotScriptName, None, False],
-    ["STRAIN_VECTOR",                    "General",                  "vector",                           DataType.VARCHAR,                  None,  "", None, None, False],
-    ["KEYWORDS",                         "General",                  "keywords",                         DataType.CONTROLLEDVOCABULARY,     "KEYWORDS",  "", None, None, False],
-    ["BC_STRAIN_SOURCE",                 "General",                  "source",                           DataType.CONTROLLEDVOCABULARY,     "BC_STRAIN_SOURCE",  "", None, None, False],
-    ["BC_STRAIN_ORGANISM",               "General",                  "organism",                         DataType.CONTROLLEDVOCABULARY,     "BC_STRAIN_ORGANISM",  "", None, None, False],
-    ["PUBLICATION",                      "References",               "reference",                        DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],    
-    ["COMMENTS",                         "Comments",                 "comments",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["+ANNOTATIONS_STATE",               "Comments",                 "Annotations State",                DataType.XML,                      None,"Annotations State", annotationsScriptName, None, False]
-];
-
-oligoDefinition = [
-    ["NAME",                             "General",                  "Primer_name",                      DataType.VARCHAR,                  None,  "", None, None, False],      
-    ["SEQUENCE",                         "General",                  "Primer_Sequence",                  DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],    
-    ["OLIGO_TARGET",                     "General",                  "Target",                           DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],       
-    ["-PRIMER_NUMBER",                   "General",                  "Primer_number",                    DataType.INTEGER,                None,  "", None, None, False],    
-    ["+ANNOTATIONS_STATE",               "Comments",                 "Annotations State",                DataType.XML,                      None,"Annotations State", annotationsScriptName, None, False]
-];
-
-DNADefinition = [
-    ["NAME",                             "General",                  "plasmid name",                     DataType.VARCHAR,                  None,  "", None, None, False],      
-    ["BOX_LOCATION",                     "General",                  "box location",                     DataType.INTEGER,                  None,  "", boxLocationScriptName, None, False],    
-    ["CONSTRUCTION_METHOD",              "General",                  "constructionMethod",               DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["CREATION_DATE",                    "General",                  "CreationDate",                     DataType.TIMESTAMP,                None,  "", None, None, False],       
-    ["INVESTIGATOR",                     "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,     "LAB_MEMBERS",  "", None, None, False],
-    ["MODIFICATION_DATE",                "General",                  "ModificationDate",                 DataType.TIMESTAMP,                None,  "", None, None, False],    
-    ["PLASMID_ID",                       "General",                  "plasmid_ID",                       DataType.INTEGER,                  None,  "", None, None, False],    
-    ["DNA_SIZE",                         "General",                  "size",                             DataType.REAL,                  None,  "", None, None, False],    
-    ["RESTRICTION_ENZYME",               "General",                  "Restriction enzymes",              DataType.VARCHAR,                  None,  "", None, None, False],    
-    ["DNA_PURITY",                       "General",                  "purity",                           DataType.CONTROLLEDVOCABULARY,     "DNA_PURITY",  "", None, None, False],    
-    ["PCR_POLYMERASE",                   "General",                  "PCR polymerase",                   DataType.CONTROLLEDVOCABULARY,     "PCR_POLYMERASE",  "", None, None, False],    
-    ["DNA_TYP",                          "General",                  "DNA typ",                          DataType.CONTROLLEDVOCABULARY,     "DNA_TYP",  "", None, None, False],    
-    ["DNA_MODIFICATIONS",                "General",                  "DNA modifications",                DataType.CONTROLLEDVOCABULARY,     "DNA_MODIFICATIONS",  "", None, None, False],    
-    ["DNA_RESISTANCE",                   "General",                  "resistance",                       DataType.CONTROLLEDVOCABULARY,     "DNA_RESISTANCE",  "", None, None, False],
-    ["SEQUENCE",                         "General",                  "Sequence",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["SLOT",                             "General",                  "slot",                             DataType.INTEGER,                  None,  "", slotScriptName, None, False],
-    ["DNA_VECTOR",                        "General",                  "vector",                           DataType.VARCHAR,                  None,  "", None, None, False],
-    ["PUBLICATION",                      "References",               "reference",                        DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],    
-    ["COMMENTS",                         "Comments",                 "comments",                         DataType.MULTILINE_VARCHAR,        None,  "", None, None, False],
-    ["+ANNOTATIONS_STATE",               "Comments",                 "Annotations State",                DataType.XML,                      None,"Annotations State", annotationsScriptName, None, False]
-];
-
-
diff --git a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/defs/definitionsVoc.py b/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/defs/definitionsVoc.py
deleted file mode 100644
index 05a2c750e1ea30cd90d36ee6749d6e338384fe6e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/defs/definitionsVoc.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                          "LAB_MEMBERS": [
-                                            ["Beat_Christen", "Beat Christen"],
-                                            ["Matthias_Christen", "Matthias Christen"],
-                                            ["Luca_Del_Medico", "Luca Del Medico"],
-                                            ["Dario_Cerletti", "Dario Cerletti"],
-                                            ["Flavia_Tschan", "Flavia Tschan"],
-                                            ["Carlos_Flores_Tinoco", "Carlos Flores Tinoco"],
-                                            ["Bo_Zhou", "Bo Zhou"],
-                                            ["Aaron_Abraham", "Aaron Abraham"],
-                                            ["Martha_Gerber", "Martha Gerber"],
-                                            ["Flora_Mauch", "Flora Mauch"],
-                                            ["Mike_Fero", "Mike Fero"]
-                                        ],
-
-                         "BC_STRAIN_RESISTANCE":   [
-                                                ["km", "km"],
-                                                ["tet", "tet"],
-                                                ["amp", "amp"],                                                
-                                                ["chlor", "chlor"],                                                
-                                                ["hyg", "hyg"],                                                
-                                                ["strep", "strep"],                                                
-                                                ["spec", "spec"],                                                
-                                                ["carb", "carb"],                                                
-                                                ["gent", "gent"],                                                
-                                                ["nal", "nal"],
-                                                ["rif", "rif"],                                                
-                                                ["apr", "apr"]                                                                                                
-                                            ],
-                 
-                        "KEYWORDS": [
-                                                ["Tn5", "Tn5"],
-                                                ["Tn10", "Tn10"],
-                                                ["T-POP", "T-POP"],
-                                                ["mudK", "mudK"],
-                                                ["mudJ", "mudJ"],
-                                                ["mariner", "mariner"],
-                                                ["promotor_fusion", "promotor fusion"],
-                                                ["protein_fusion", "protein fusion"],
-                                                ["gfp_fusion", "gfp fusion"],
-                                                ["lacZ", "lacZ"],
-                                                ["phoA", "phoA"],
-                                                ["gus", "gus"],
-                                                ["neo", "neo"],
-                                                ["sacB", "sacB"],
-                                                ["His_tag", "His tag"]
-                                         ],
-                                                  
-                         "BC_STRAIN_SOURCE":   [
-                                                ["SGSC", "SGSC"],
-                                                ["Kelly_Hughes", "Kelly Hughes"],
-                                                ["Patrick_Viollier", "Patrick Viollier"],
-                                                ["Matthias", "Matthias"],
-                                                ["Andreas_Gassmann", "Andreas Gassmann"]
-                                            ],
-                         
-                         "BC_STRAIN_ORGANISM":   [
-                                                ["DH10B", "DH10B"],
-                                                ["SM10", "SM10"],
-                                                ["D5a", "D5a"],
-                                                ["BL21", "BL21"],
-                                                ["S17", "S17"],
-                                                ["LT2", "LT2"],
-                                                ["ccr", "ccr"],
-                                                ["Top10", "Top10"],
-                                                ["Top10F", "Top10F'"],
-                                                ["other_Eco", "other Eco"],
-                                                ["Sme", "Sme"],
-                                                ["phage", "phage"],
-                                                ["other", "other"]
-                                            ],
-                         
-                         "DNA_PURITY": [
-                                                ["columne", "columne"],
-                                                ["gel", "gel"],
-                                                ["EtOH", "EtOH"],
- 
-                                            ],
-                         
-                         "PCR_POLYMERASE": [
-                                                ["Taq", "Taq"],
-                                                ["Pfu", "Pfu"],
-                                                ["Pwo", "Pwo"],
-                                                ["high_fidelity", "high fidelity"]
-
-                                            ],
-                         
-                         
-                         "DNA_RESISTANCE": [
-                                                ["km", "km"],
-                                                ["tet", "tet"],
-                                                ["amp", "amp"],                                                
-                                                ["cm", "cm"],                                                
-                                                ["hyg", "hyg"],                                                
-                                                ["strep", "strep"],                                                
-                                                ["spec", "spec"],                                                
-                                                ["gent", "gent"]                                                
-
-                                            ],
-                         
-
-                         "DNA_TYP": [
-                                                ["gen_DNA", "gen DNA"],
-                                                ["PCR", "PCR"],
-                                                ["plasmid", "plasmid"],
-                                                ["insert", "insert"],
-                                                ["cosmid", "cosmid"]
-
-                                            ],
-
-                       
-                         "DNA_MODIFICATIONS": [
-                                                ["Methylated", "Methylated"],
-                                                ["digested", "digested"],
-                                                ["SAPed", "SAPed"]
- 
-                                            ]
-
-                         
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/doc/fm11_odbc_jdbc_guide_en.pdf b/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/doc/fm11_odbc_jdbc_guide_en.pdf
deleted file mode 100644
index 36aaa0f12220dbde26b7ece4e3b78914087893b0..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/doc/fm11_odbc_jdbc_guide_en.pdf and /dev/null differ
diff --git a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/lib/FileMakerMain.java b/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/lib/FileMakerMain.java
deleted file mode 100644
index a2206338c1ccb79267396fbe2751fbb529304ab8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/lib/FileMakerMain.java
+++ /dev/null
@@ -1,77 +0,0 @@
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-//  STEP By Step:
-//  1. Open the file maker file with file maker pro
-//  2. Go to "File -> Sharing -> ODBC/JDBC" and turn sharing on
-//  3. You can go to see the names of the tables and field to "File -> Manage -> Database"
-//  Without closing file maker pro you can run this script, modify it as needed
-//  More info at http://www.filemaker.com/support/product/docs/fmp/fm11_odbc_jdbc_guide_en.pdf
-
-public class FileMakerMain
-{
-    // NOTE: FileMaker is so dump that you can't get the fileName and the fileData on the same query, the file data will return null, so we make a second call for this
-    public static final String GET_DOCUMENTS = "SELECT CAST(file AS VARCHAR(1000)) AS fileName, info, serial FROM documents";
-    public static final String GET_DOCUMENT_DATA = "SELECT GetAs(file, 'FILE') AS fileData FROM documents WHERE serial = ?";
-    
-    static class Document {
-        String fileName;
-        String info;
-        String serial;
-        
-        public String toString()
-        {
-            return fileName + " " + info;
-        }
-    }
-    
-    public static List<Document> getDocuments(Connection connection) throws SQLException {
-        List<Document> documents = new ArrayList<Document>();
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENTS);
-        ResultSet result = preparedStatement.executeQuery();
-        
-        while(result.next()) {
-            Document document = new Document();
-            document.fileName = result.getString("fileName");
-            document.info = result.getString("info");
-            document.serial = result.getString("serial");
-            documents.add(document);
-        }
-        result.close();
-        preparedStatement.close();
-        return documents;
-    }
-    
-    public static byte[] getFile(Connection connection, Document document) throws SQLException {
-        byte[] bytes = {};
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENT_DATA);
-        preparedStatement.setString(1, document.serial);
-        ResultSet result = preparedStatement.executeQuery();
-        if(result.next()) {
-            byte[] value = result.getBytes("fileData");
-            if(value != null) {
-                bytes = value;
-            }
-        }
-        result.close();
-        preparedStatement.close();
-        return bytes;
-    }
-    
-    public static void main(String[] args) throws Exception {
-        Class.forName("com.filemaker.jdbc.Driver").newInstance();
-        Connection connection = DriverManager.getConnection("jdbc:filemaker://127.0.0.1/BOXIT_documents_Peter.fmp12","designer", "seattle");
-        
-        for(Document document: getDocuments(connection)) {
-            byte[] bytes = getFile(connection, document);
-            System.out.println(document + " " + bytes.length);
-        }
-        connection.close();
-    }
-}
diff --git a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/lib/fmjdbc.jar b/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/lib/fmjdbc.jar
deleted file mode 100644
index 34cae1d60b916205b9039fe765c971229cef1a32..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/lib/fmjdbc.jar and /dev/null differ
diff --git a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/migration.py b/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/migration.py
deleted file mode 100644
index 5906aabd80d4fcc08eb5a533fb0421db7c1fb9aa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/migration.py
+++ /dev/null
@@ -1,488 +0,0 @@
-# some_file.py
-import sys
-import traceback
-import definitions
-import definitionsVoc
-import re
-import random
-from datetime import datetime
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria, SearchSubCriteria
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-import java.lang.Class as Class
-import java.sql.DriverManager as DriverManager
-
-
-##
-## Generic Process Method
-##
-notMigratedEntities = {
-                       "ENTITY_TYPE" : {"ENTITY ID" : {"ERROR" : "TIMES" }}
-                      }
-
-def getStringValueOrNone(map, key):
-    if (key in map) and (map[key] is not None) and (map[key] is not ""):
-        return map[key];
-    else:
-        return None;
-
-def addNotMigratedEntity(type, entityID, error):
-    if type not in notMigratedEntities:
-        notMigratedEntities[type] = {}
-    if entityID not in notMigratedEntities[type]:
-        notMigratedEntities[type][entityID] = {}
-    if error not in notMigratedEntities[type][entityID]:
-        notMigratedEntities[type][entityID][error] = 1
-    else:
-        notMigratedEntities[type][entityID][error] += 1
-
-def printNotMigratedEntities():
-    print "--- Not Migrated Entities Report"
-    for type in notMigratedEntities:
-        print "Type: [" + str(type) + "]"
-        for id in notMigratedEntities[type]:
-            for error in notMigratedEntities[type][id]:
-                print "Id: [" + str(id) + "] Error: " + str(error) + " Times: " + str(notMigratedEntities[type][id][error])
-    print "---"
-
-def process(tr):
-    print "START!"
-    #createDataHierarchy(tr)
-    #tr.createNewProject("/MATERIALS/STRAINS")
-    #tr.createNewProject("/MATERIALS/DNA")
-    for adaptor in adaptors:
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] START"
-        
-        if adaptor.__class__.__name__ == "PlasmidParentAdaptor":
-            print "check hack, dont do please"
-            adaptor.init();
-
-        while adaptor.next():
-            entity = adaptor.getEntity()
-            print "* ENTITY [" + str(entity.getIdentifier(tr)) + "]"
-            try:
-                if not entity.isInOpenBIS(tr):
-                    entity.write(tr)
-                else:
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), "Already in openBIS")
-            except Exception, error:
-                    print traceback.format_exc()
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), str(error.args))
-                    #print entity.getIdentifier(tr) + " - Already up to date"
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] FINISH"
-    print "REPORT START"
-    printNotMigratedEntities()
-    definitionsVoc.printCreatedTerms()
-    print "REPORT FINISH"
-    print "FINISH!"
-##
-## Help Methods
-##
-def setEntityProperties(tr, definition, entity, properties):
-    for origPropertyCode, propertyValue in properties.iteritems():
-            #print repr("setEntityProperties " + origPropertyCode + " : " + unicode(propertyValue))
-            propertyCode = origPropertyCode;
-            if propertyCode.startswith("+"):
-                propertyCode = propertyCode[1:];
-            elif propertyCode.startswith("-"):
-                continue
-            
-            propertyDefinition = definitions.getPropertyDefinitionByCode(definition, origPropertyCode)
-            #print "Prop definition ", propertyDefinition
-            #print "PROP VALUE ", propertyValue
-            if propertyDefinition is not None and propertyValue is not None:
-                propertyValue =  unicode(propertyValue) 
- 
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.REAL and propertyValue is not None:
-                if propertyValue =="?":
-                    propertyValue=""
-
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.CONTROLLEDVOCABULARY and propertyValue is not None:
-                possiblePropertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel(propertyDefinition[4], propertyValue)
-                if possiblePropertyValue is not None:
-                    propertyValue = possiblePropertyValue
-                else:  #We rely on the Add Hock Terms if is None, since there is no API we create a new one
-                    #Create new vocabulary term
-                    codeToUse = re.sub(r'\W+','_',propertyValue)
-                    labelToUse = propertyValue
-                    if len(codeToUse) is 0:
-                        codeToUse = "None" + str(random.random())
-                    if len(codeToUse) > 50:
-                        codeToUse = codeToUse[:50]
-                    #Uses new vocabulary term
-                    newTerm = definitionsVoc.createVocabularyTerm(tr, propertyDefinition[4], codeToUse, labelToUse)
-                    propertyValue = newTerm.getCode()
-                    #print "NEW CODE", propertyValue
-                    print "* WARNING ENTITY [" + entity.getCode() + "]: for Vocabulary [" + propertyDefinition[4] + "], found value not in list: [" + repr(labelToUse) + "]. Created new term with code [" + codeToUse + "]"
-
-
-            if propertyDefinition is not None: #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-
-
-            if propertyDefinition is not None: #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-
-
-##
-## Generic Pattern
-##
-class EntityAdaptor:
-    entities = None
-    entitiesIdx = None
-    definition = None
-    definitionRepeats = None
-    
-    def init(self):
-        self.entities = []
-        self.entitiesIdx = -1
-        pass
-    
-    def next(self):
-        if self.entities is None and self.entitiesIdx is None:
-            self.init()
-        self.entitiesIdx += 1
-        if len(self.entities) > self.entitiesIdx:
-            return True
-        else:
-            return False
-    
-    def addEntity(self, values):
-        self.entities.append(OpenBISDTO(values, self.definition))
-    
-    def getEntity(self):
-        return self.entities[self.entitiesIdx]
-    
-class OpenBISDTO:
-    values = {}
-    definition = None
-    
-    def __init__(self, values, definition):
-        self.values = values
-        self.definition = definition
-    
-    def getIdentifier(self, tr):
-        pass
-    
-    def isInOpenBIS(self, tr):
-        pass
-    
-    def write(self, tr):
-        pass
-
-##
-## Costumer specific logic: generic part
-##
-experimentCache = {}
-sampleCache = {}
-sampleID2Sample = {}
-globalSequences = {};
-
-def getNextGlobalSequence(id, startingAt):
-    currentSequence = None;
-    
-    if id in globalSequences:
-        currentSequence = globalSequences[id]; #Get existing sequence
-    else:
-        if startingAt is not None:
-            currentSequence = startingAt;
-        else:
-            currentSequence = 0; # Create a new one
-
-    #Advance and store new step on the sequence
-    currentSequence = currentSequence+1;
-    globalSequences[id] = currentSequence;
-    
-    #Return the new sequence number
-    return str(currentSequence);
-
-def getExperimentForUpdate(experimentIdentifier, experimentType, tr):
-    experimentType ="MATERIALS"
-    if experimentIdentifier not in experimentCache:
-        print "Cache failed " + experimentIdentifier + ":" + str(experimentType)
-        experiment = tr.getExperimentForUpdate(experimentIdentifier)
-        if experiment is None and experimentType is not None:
-            print "Cache Create " + experimentIdentifier + ":" + str(experimentType)
-            experiment = tr.createNewExperiment(experimentIdentifier, experimentType)
-        if experiment is not None:
-             experimentCache[experimentIdentifier] = experiment
-    else:
-        pass
-        #print "Cache hit " + experimentIdentifier + ":" + str(experimentType)
-    if experimentIdentifier not in experimentCache:
-         return None
-    else:
-         return experimentCache[experimentIdentifier]
-     
-def getSampleForUpdate(sampleIdentifier, sampleType, tr):
-    if sampleIdentifier not in sampleCache:
-         #print "Cache failed " + sampleIdentifier + ":" + str(sampleType)
-         sample = tr.getSampleForUpdate(sampleIdentifier)
-         if sample is None and sampleType is not None:
-             #print "Cache Create " + sampleIdentifier + ":" + str(sampleType)
-             if sampleType == "STRAIN":
-                  experiment = getExperimentForUpdate("/MATERIALS/STRAINS/STRAIN_COLLECTION_1", sampleType, tr)              
-             elif sampleType == "DNA":
-                  experiment = getExperimentForUpdate("/MATERIALS/DNA/DNA_COLLECTION_1", sampleType, tr)                         
-             elif sampleType == "OLIGO":
-                  experiment = getExperimentForUpdate("/MATERIALS/POLYNUCLEOTIDES/OLIGO_COLLECTION_1", sampleType, tr)                  
-             sample = tr.createNewSample(sampleIdentifier, sampleType)
-             sample.setExperiment(experiment)
-         if sample is not None:
-             sampleCache[sampleIdentifier] = sample
-    else:
-        pass
-        #print "Cache hit " + sampleIdentifier + ":" + str(sampleType)
-        
-    if sampleIdentifier not in sampleCache:
-         raise None
-    else:
-         return sampleCache[sampleIdentifier]
-
-class FileMakerEntityAdaptor(EntityAdaptor):
-    connection = None
-    selectQuery = None
-    selectQueryRepetitions = None;
-    selectQueryRepetitionsId = None;
-        
-    def __init__(self, fileMakerConnString, fileMakerUser, fileMakerPass, db):
-        Class.forName("com.filemaker.jdbc.Driver").newInstance()
-        self.connection = DriverManager.getConnection(fileMakerConnString+db,fileMakerUser, fileMakerPass)
-    
-    def init(self):
-        EntityAdaptor.init(self)
-        
-        # Default Query (All adaptors should have it)
-        preparedStatement = self.connection.prepareStatement(self.selectQuery)
-        #print "EXECUTED QUERY: " + self.selectQuery
-        result = preparedStatement.executeQuery()
-        
-        while result.next():
-            values = {}
-            for property in self.definition:
-                if property[0].startswith("+"):
-                    pass #Do Nothing
-                elif property[0]=="ANNOTATIONS_STATE":
-                    values[property[0]] = "";
-                else:
-                    propertyCode = property[0];
-                    #print "propertyCode IS: ", propertyCode
-                    propertyValue = result.getString(property[2]);
-                    if property[0].startswith("+"):
-                        propertyCode = property[0][1:];
-                    if property[0].startswith("-"):
-                        propertyCode = property[0][1:];
-                    values[propertyCode] = result.getString(property[2])
-            self.addEntity(values)
-        result.close()
-        preparedStatement.close()
-        # Repetitions Query (Optional)
-        
-        #Extra Repeats Logic
-        if self.definitionRepeats is not None:
-            fields = "";
-            fieldsNames = [];
-            isFirst = True;
-            for field in self.definitionRepeats:
-                propertyCode = field[0];
-                if propertyCode.startswith("+"):
-                    continue
-                
-                if not isFirst:
-                    fields = fields + ", ";
-                
-                fields = fields + field[2];
-                fieldsNames.append(propertyCode);
-                isFirst = False;
-            
-            for entity in self.entities:
-                entityId = entity.values[self.selectQueryRepetitionsId];
-                if entityId is not None:
-                    perEntityQuery = "SELECT " + fields + " FROM " + self.selectQueryRepetitions + "= '" + entityId + "'";
-                    #print "EXECUTED QUERY: " + perEntityQuery
-                    preparedStatement = self.connection.prepareStatement(perEntityQuery)
-                    result = preparedStatement.executeQuery()
-                    
-                    columnCount = result.getMetaData().getColumnCount();
-                    while result.next():    
-                        for cIdx in range(columnCount):
-                            if cIdx is not 0:
-                                columName = result.getMetaData().getColumnName(cIdx);
-                                fieldName = fieldsNames[cIdx];
-                                entity.values[fieldName] = result.getString(cIdx);
-                    result.close()
-                    preparedStatement.close()
-        #
-
-##
-## Customer specific logic: different sample types
-##
-class FMOpenBISDTO(OpenBISDTO):
-        def isSampleCacheable(self):
-            return True
-        
-        def isInOpenBIS(self, tr):
-            return False
-            # code = self.getIdentifier(tr)
-            # if (code is not None) and (' ' not in code):
-            #     if self.isSampleCacheable():
-            #         sample = getSampleForUpdate("/MATERIALS/"+code, None, tr)
-            #         if (self.values["NAME"] is not None and len(self.values["NAME"]) > 0 and self.values["NAME"] not in sampleID2Sample):
-            #             print "Cached Sample with name: '" + self.values["NAME"] + "' for '" + "/MATERIALS/" + code + "' in dict with size: " + str(len(sampleID2Sample))
-            #             parentName = unicode(self.values["NAME"], "utf-8");
-            #             sampleID2Sample[parentName] = sample
-            #     return False
-            # else:
-            #     print "* ERROR [" + str(code) + "] - Invalid Code found for '" + self.__class__.__name__ + "'"
-            #     raise Exception('Invalid Code found ' + str(code))
-
-
-##
-## Strains
-##
-
-globalStrainsCodeCheck = {};
-
-class StrainAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"BCstrains_ETH\""
-        
-        self.definition = definitions.strainDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(StrainOpenBISDTO(values, self.definition))
- 
-class StrainOpenBISDTO(FMOpenBISDTO):
-    code = None;
-
-    def isSampleCacheable(self):
-            return False    
-
-    def write(self, tr):
-        code = self.getIdentifier(tr);
-
-        sample = getSampleForUpdate("/MATERIALS/"+code,"STRAIN", tr)
-        setEntityProperties(tr, self.definition, sample, self.values)
-        
-
-    def getIdentifier(self, tr):
-        if self.code is not None:
-            return self.code;
-        elif (self.values["PLASMID_ID"] is not None and self.values["PLASMID_ID"] not in globalStrainsCodeCheck):
-            self.code = "BC" + self.values["PLASMID_ID"]
-            globalStrainsCodeCheck[self.values["PLASMID_ID"]] = True
-        else:
-            nextNum = getNextGlobalSequence("BC", 0)
-            self.code = "BC_missing_" + nextNum;
-            globalStrainsCodeCheck[nextNum] = True
-        return self.code
-
-
-
-##
-## DNA
-##
-
-
-
-globalDNACodeCheck = {};
-
-class DNAAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Plasmids\""
-        
-        self.definition = definitions.DNADefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(DNAOpenBISDTO(values, self.definition))
- 
-class DNAOpenBISDTO(FMOpenBISDTO):
-    code = None;
-
-    def isSampleCacheable(self):
-            return False    
-
-    def write(self, tr):
-        code = self.getIdentifier(tr);
-
-        sample = getSampleForUpdate("/MATERIALS/"+code,"DNA", tr)
-        setEntityProperties(tr, self.definition, sample, self.values)
-        
-
-    def getIdentifier(self, tr):
-        if self.code is not None:
-            return self.code;
-        elif (self.values["PLASMID_ID"] is not None and self.values["PLASMID_ID"] not in globalDNACodeCheck):
-            self.code = "DNA" + self.values["PLASMID_ID"]
-            globalDNACodeCheck[self.values["PLASMID_ID"]] = True
-        else:
-            nextNum = getNextGlobalSequence("DNA", 0)
-            self.code = "DNA_missing_" + nextNum;
-            globalDNACodeCheck[nextNum] = True
-        return self.code
-
-
-
-##
-## Oligos
-##
-class OligoAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Oligo_Beat\""
-        self.definition = definitions.oligoDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(OligoOpenBISDTO(values, self.definition))
-        
-class OligoOpenBISDTO(FMOpenBISDTO):
-    def write(self, tr):
-        code = "OLI" + self.values["PRIMER_NUMBER"];
-        print "CODE IS:", code
-        if code is not None:
-            print "/MATERIALS/"+code
-            sample = getSampleForUpdate("/MATERIALS/"+code,"OLIGO", tr)
-            setEntityProperties(tr, self.definition, sample, self.values)
-        else:
-            print "OLIGO CODE NOT FOUND! "
-    
-    def getIdentifier(self, tr):
-        code=""
-        if (self.values["PRIMER_NUMBER"] is not None):
-            code = "OLI" + self.values["PRIMER_NUMBER"]
-        else:
-            code = "OLI" + getNextGlobalSequence("OLI", None);
-        return code
-
-
-#filemaker on DBIOL servers
-fmConnString = "jdbc:filemaker://fmsrv.ethz.ch/"
-
-#localhost
-#fmConnString = "jdbc:filemaker://127.0.0.1/"
-fmUser= "admin"
-fmPass = "filegod64+"
-
-
-
-adaptors = [
-             #OligoAdaptor(fmConnString, fmUser, fmPass, "Christen_Oligo_Collection"),
-             #DNAAdaptor(fmConnString, fmUser, fmPass, "Christen_DNA_collection"),
-             StrainAdaptor(fmConnString, fmUser, fmPass, "Christen_BCstrains_ETH_2014_1")
-             ]
-
-
-
-
-
-# def createDataHierarchy(tr):
-#     DNAProject = tr.getProject("/MATERIALS/DNA")
-#     if DNAProject == None:
-#         tr.createNewProject("/MATERIALS/STRAINS")
-#         tr.createNewProject("/MATERIALS/DNA")
-#     else:
-#         pass
diff --git a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/plugin.properties b/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/plugin.properties
deleted file mode 100644
index d39e7e7ab4183de0275c56da466a7032aa8d126a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/christenmigration/1/dss/drop-boxes/christenmigration/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path = migration.py
-dropbox-name = christenmigration
-incoming-dir = ${root-dir}/christenmigration
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BSAProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BSAProfile.js
deleted file mode 100644
index 8e1961a78478e504927db02b1d5930dbd26f28ed..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BSAProfile.js
+++ /dev/null
@@ -1,110 +0,0 @@
-
-function BSAProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(BSAProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"DEFAULT_STORAGE" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	
-					                             	{
-														"LABEL" : "Cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMISTRY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cloning insert",
-														"TYPE": "CLONING_INSERT",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cloning vector",
-														"TYPE": "CLONING_VECTOR",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Linearised vector",
-														"TYPE": "LINEARIZED_VECTOR",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-													{
-														"LABEL" : "Vector",
-														"TYPE": "VECTOR",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Molecular biology",
-														"TYPE": "MOLECULAR_BIOLOGY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Primer",
-														"TYPE": "PRIMER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Protocol",
-														"TYPE": "PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-	
-					                             																														
-												]
-				}
-		
-		} 
-		
-		
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BioATProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BioATProfile.js
deleted file mode 100644
index bb14f0f04998284fa29981a525b6cff3a3a7c646..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BioATProfile.js
+++ /dev/null
@@ -1,23 +0,0 @@
-function BioATProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(BioATProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		//Put on this list all experiment types, ELN experiments need to have both an experiment type and a sample type with the same CODE.
-		this.ELNExperiments = ["SYSTEM_EXPERIMENT"];
-		
-		//Black list, put on this list all types that you don�t want to appear on the menu and the ELN experiments.
-		this.notShowTypes = ["SYSTEM_EXPERIMENT", "COMPOUND", "CONTROL_WELL", "LIBRARY", "ORF", "ORF_WELL", "SHRNA", "SHRNA_WELL", "SIRNA", "SIRNA_WELL", "UNKNOWN"];
-		
-		//The properties you want to appear on the tables, if you don�t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {};
-		
-		//The configuration for the visual storages.
-		this.storagesConfiguration = {
-			"isEnabled" : false
-		};
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BodenmillerLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BodenmillerLabProfile.js
deleted file mode 100644
index 006122037f335e6e61a3a83630a5b433500589ea..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/BodenmillerLabProfile.js
+++ /dev/null
@@ -1,71 +0,0 @@
-function BodenmillerLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(BodenmillerLabProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.ELNExperiments = ["SYSTEM_EXPERIMENT"];
-		this.notShowTypes = ["ANTIBODY_PANEL", "SYSTEM_EXPERIMENT"];
-		this.isShowUnavailablePreviewOnSampleTable = false;
-		this.inventorySpaces = ["BODENMILLER_LAB"];
-	
-		/*
-		 * Used by Sample Form
-		 */
-		this.getSpaceForSampleType = function(type) {
-			if(type === "PROTEIN") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CLONE") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CONJUGATED_CLONE") {
-				return "BODENMILLER_LAB";
-			} else if(type === "LOT") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CHEMICALS") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CELL_LINES") {
-				return "BODENMILLER_LAB";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "PROTEIN") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "CLONE") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "CONJUGATED_CLONE") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "LOT") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "CHEMICALS") {
-				return "/BODENMILLER_LAB/CHEMICALS/CHEMICALS";
-			} else if(type === "CELL_LINES") {
-				return "/BODENMILLER_LAB/CELL_LINES/CELL_LINES";
-			} else {
-				return null;
-			}
-		}
-
-		/*
-		 * Used by Main Menu
-		 */
-		this.mainMenuContentExtra = function() {
-			return "<center><h5><i class='icon-info-sign'></i> Please log in into your google account on the brower to see your laboratory calendar.</h5></center><br /><iframe src='https://www.google.com/calendar/embed?src=kcm620topcrg5677ikbn5epg0s%40group.calendar.google.com&ctz=Europe/Zurich' margin-left = '20' style='border: 50' width='800' height='600' frameborder='0' scrolling='no'></iframe>";
-		}
-		
-		/*
-		 * Used by Sample Form
-		 */
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "ANTIBODY_PANEL") {
-				var isEnabled = mainController.currentView.mode !== SampleFormMode.VIEW;
-				var dilutionWidget = new DilutionWidget(containerId, this.serverFacade, isEnabled);
-				dilutionWidget.init();
-			}
-		}
-	}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/CaterinaTestProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/CaterinaTestProfile.js
deleted file mode 100644
index b3d4d37eff5f6b33fc1e921a38e50c140e0199b2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/CaterinaTestProfile.js
+++ /dev/null
@@ -1,115 +0,0 @@
-
-function CaterinaTestProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(CaterinaTestProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.inventorySpaces = ["INVENTORY"];
-		
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 1", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY" //Should be text.
-				},
-				{
-					"STORAGE_PROPERTY_GROUP" : "Storage 2", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 2", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME_2", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW_2", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN_2", //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER_2", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY_2" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"MINUS80_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"MINUS80_2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},	
-					"MINUS820_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},																
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"PLASMID_EXPRESSION" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Protocol",
-														"TYPE": "PROTOCOLS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMIDS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Inhibitor",
-														"TYPE": "INHIBITORS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Cell Line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-												],
-				}
-		}
-
-		
-		//The properties you want to appear on the tables, if you don«t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {};
-
-
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "FACS") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-//			if(sampleTypeCode === "SYSTEM_EXPERIMENT") {
-//				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-//				var dilutionWidgetController = new DilutionTableController(sample, isEnabled);
-//				dilutionWidgetController.init($("#" + containerId));
-//			}
-		}
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/CiaudoLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/CiaudoLabProfile.js
deleted file mode 100644
index 79d8f20929e712635946202a93981a1050e1815e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/CiaudoLabProfile.js
+++ /dev/null
@@ -1,113 +0,0 @@
-
-function CiaudoLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(CiaudoLabProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-	
-		//Use this with all known types to create groups, if a type is not specified by default will be added to the OTHERS group.
-		this.inventorySpaces = ["ANTIBODIES", "CELLS", "ENZYMES", "EQUIPMENT", "LAB_MEETINGS", "PLASMIDS", "PRIMERS", "PROTOCOLS", "RESTRICTION_ENZYMES"];
-		this.isShowUnavailablePreviewOnSampleTable = true;
-		
-		this.getSpaceForSampleType = function(type) {
-			if(type === "ANTIBODIES") {
-				return "ANTIBODIES";
-			} else if(type === "PLASMIDS") {
-				return "PLASMIDS";
-			} else if(type === "STRAINS") {
-				return "PLASMIDS";
-			} else if(type === "PRIMERS") {
-				return "PRIMERS";
-			} else if(type === "CELLS") {
-				return "CELLS";
-			} else if(type === "ENZYMES") {
-				return "ENZYMES";
-			} else if(type === "PROTOCOLS") {
-				return "PROTOCOLS";
-			} else if(type === "LAB_MEETINGS") {
-				return "LAB_MEETINGS";
-			} else if(type === "EQUIPMENT") {
-				return "EQUIPMENT";
-			} else {
-				return null;
-			}
-		}	
-	
-
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "LAB_MEETINGS") {
-				return "/LAB_MEETINGS/LAB_MEETINGS/LAB_MEETINGS";
-			} else if(type === "PROTOCOLS") {
-				return "/PROTOCOLS/PROTOCOLS/PROTOCOLS";
-			} else if(type === "ANTIBODIES") {
-				return "/ANTIBODIES/ANTIBODIES/ANTIBODIES";
-			} else if(type === "CELLS") {
-				return "/CELLS/CELLS/CELLS";
-			} else if(type === "ENZYMES") {
-				return "/ENZYMES/ENZYMES/ENZYMES";
-			} else if(type === "EQUIPMENT") {
-				return "/EQUIPMENT/EQUIPMENT/EQUIPMENT";
-			} else if(type === "PLASMIDS") {
-				return "/PLASMIDS/PLASMIDS/PLASMIDS";
-			} else if(type === "STRAINS") {
-				return "/PLASMIDS/PLASMIDS/STRAINS";
-			} else if(type === "PRIMERS") {
-				return "/PRIMERS/PRIMERS/PRIMERS";
-			} else if(type === "RESTRICTION_ENZYMES") {
-				return "/RESTRICTION_ENZYMES/RESTRICTION_ENZYMES/RESTRICTION_ENZYMES";
-			} else {
-				return null;
-			}
-		}
-
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 1", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"MINUS80" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"MINUS20" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"FRIDGE" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"RT" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}
-				}
-			};
-	
-
-
-		
-		//The properties you want to appear on the tables, if you don�t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {};
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/DeBockLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/DeBockLabProfile.js
deleted file mode 100644
index bad722f6dfaad0d3ee3fa4d2534f0495180cd8c2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/DeBockLabProfile.js
+++ /dev/null
@@ -1,340 +0,0 @@
-
-function DeBockLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(DeBockLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-	
-		this.inventorySpaces = ["MATERIALS", "METHODS", "EQUIPMENT"];
-		
-				/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"MEDIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"SOLUTION_BUFFER" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																												
-												],
-				},
-
-				"PCR_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"WESTERN_BLOTTING_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-				"BACTERIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Bacteria parents",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																				
-												],
-				},
-
-				"YEAST" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Yeast parents",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										]
-				},
-
-				"CELL_LINE" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Parental cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},		
-					                             	{
-														"LABEL" : "Parental fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																									
-												],
-				},
-
-				"FLY" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Fly parents",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-				},
-			"MOUSE_CROSSING" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Mouse line",
-														"TYPE": "MOUSE_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																			
-												],
-				},
-				
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Bacteria",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "RNA",
-														"TYPE": "RNA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Yeast",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "PCR protocol",
-														"TYPE": "PCR_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Western blotting protocol",
-														"TYPE": "WESTERN_BLOTTING_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																			
-												],
-				}
-		
-		} 
-		
-		
-		
-		
-		
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/DittrichLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/DittrichLabProfile.js
deleted file mode 100644
index 46a7e0322ccecd9566127e6408ed8448d1dd4562..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/DittrichLabProfile.js
+++ /dev/null
@@ -1,317 +0,0 @@
-
-function DittrichLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(DittrichLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-		
-		
-	
-			/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"MEDIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"SOLUTION_BUFFER" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																												
-												],
-				},
-
-				"PCR_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"WESTERN_BLOTTING_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-				"BACTERIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Bacteria parents",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																				
-												],
-				},
-
-				"YEAST" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Yeast parents",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										]
-				},
-
-				"CELL_LINE" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Parental cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},		
-					                             	{
-														"LABEL" : "Parental fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																									
-												],
-				},
-
-				"FLY" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Fly parents",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-				},
-
-			"CHIP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Mask",
-														"TYPE": "MASK",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Bacteria",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Yeast",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chip",
-														"TYPE": "CHIP",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Fluorophore",
-														"TYPE": "FLUOROPHORE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																										
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																
-												],
-				}
-		
-		} 
-}
-})		
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/ELNPaperProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/ELNPaperProfile.js
deleted file mode 100644
index 56205659ca9b997e4512132a6efc426710f0d4d6..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/ELNPaperProfile.js
+++ /dev/null
@@ -1,410 +0,0 @@
-
-function ELNPaperProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(ELNPaperProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.hideCodes = true;
-		
-		
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS80_A1" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 3, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS80_A2" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 3, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS20_A1" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"FRIDGE1_A1" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 6, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"FRIDGE2_A1" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 6, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"RT_A3" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 6, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"MEDIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"SOLUTION_BUFFER" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																												
-												],
-				},
-
-				"PCR_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"WESTERN_BLOTTING_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-				"BACTERIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Bacteria parents",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																				
-												],
-				},
-
-				"YEAST" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Yeast parents",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										],
-					"SAMPLE_PARENTS_ANNOTATIONS_COPY" : { "YEAST" : ["PLASMID"] }
-				},
-
-				"CELL_LINE" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Parental cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},		
-					                             	{
-														"LABEL" : "Parental fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																									
-												],
-				},
-
-				"FLY" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Fly parents",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-				},
-
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Bacteria",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "RNA",
-														"TYPE": "RNA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Yeast",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "PCR protocol",
-														"TYPE": "PCR_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Western blotting protocol",
-														"TYPE": "WESTERN_BLOTTING_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																			
-												],
-				}
-		
-		} 
-		
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "EXPERIMENTAL_STEP") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-		}
-		
-		
-		this.getDataSetTypeForFileName = function(allDatasetFiles, fileName) {
-			if(fileName.endsWith("gb") || fileName.endsWith("fasta") || fileName.endsWith("xdna") || fileName.endsWith("fa")) {
-				return "SEQ_FILE";
-			} else if(fileName.endsWith("ab1")) {
-				return "RAW_DATA";
-			} else {
-				return null;
-			}
-		}		
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/EveProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/EveProfile.js
deleted file mode 100644
index 9d2fd0d07e73693abfe81015028e567f86de3132..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/EveProfile.js
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-function EveProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(EveProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-
-		this.inventorySpaces = ["TB", "EB"];
-
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				"storageSpaceLowWarning" : 0.8, //Storage goes over 80%
-				"boxSpaceLowWarning" : 0.8, //Box goes over 80%
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				 */
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				},
-				{	
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage 2", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage 2", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES_2", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW_2", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN_2",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME_2", //Should be text.
-					"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE_2", //Should be Vocabulary.
-					"USER_PROPERTY" : 		"STORAGE_USER_2", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION_2" //Should be text.
-				}				
-				
-				],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				 */
-				"STORAGE_CONFIGS": {
-					"KAE93" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 4, //Number of columns
-						"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"KAE69" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 5, //Number of rows
-						"COLUMN_NUM" : 4, //Number of columns
-						"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}
-														
-				}
-			};	
-		
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/ExampleProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/ExampleProfile.js
deleted file mode 100644
index 66931204daac74529e7b962d984e12a723ee4588..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/ExampleProfile.js
+++ /dev/null
@@ -1,24 +0,0 @@
-//Example profile with basic configuration that don�t requires any programming
-function ExampleProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(ExampleProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		//Put on this list all experiment types, ELN experiments need to have both an experiment type and a sample type with the same CODE.
-		this.ELNExperiments = ["SYSTEM_EXPERIMENT"];
-
-		//Black list, put on this list all types that you don�t want to appear on the menu and the ELN experiments.
-		this.notShowTypes = ["SYSTEM_EXPERIMENT"];
-		
-		//The properties you want to appear on the tables, if you don�t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {};
-		
-		//The configuration for the visual storages.
-		this.storagesConfiguration = {
-			"isEnabled" : false
-		};
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/KrekLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/KrekLabProfile.js
deleted file mode 100644
index 753e689ce49221c0b5963ad6d73ef64277b5efd1..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/KrekLabProfile.js
+++ /dev/null
@@ -1,119 +0,0 @@
-
-function KrekLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(KrekLabProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-	
-		//Use this with all known types to create groups, if a type is not specified by default will be added to the OTHERS group.
-		this.inventorySpaces = ["INVENTORY"];
-		this.isShowUnavailablePreviewOnSampleTable = true;
-
-		this.getSpaceForSampleType = function(type) {
-			if(type === "ANTIBODY") {
-				return "INVENTORY";
-			} else if(type === "PLASMID") {
-				return "INVENTORY";
-			} else if(type === "INHIBITOR") {
-				return "INVENTORY";
-			} else if(type === "CELL_LINE") {
-				return "INVENTORY";
-			} else {
-				return null;
-			}
-		}	
-	
-
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "ANTIBODY") {
-				return "/INVENTORY/SAMPLES/ANTIBODIES";
-			} else if(type === "PLASMID") {
-				return "/INVENTORY/SAMPLES/PLASMIDS";
-			} else if(type === "INHIBITOR") {
-				return "/INVENTORY/SAMPLES/INHIBITORS";
-			} else if(type === "CELL_LINE") {
-				return "/INVENTORY/SAMPLES/CELL_LINES";
-			} else {
-				return null;
-			}
-		}
-	
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 1", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"H20.1_KREK-1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"H20.2_KREK-2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},	
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"PLASMID_EXPRESSION" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Protocol",
-														"TYPE": "PROTOCOLS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMIDS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Inhibitor",
-														"TYPE": "INHIBITORS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Cell Line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-												],
-				}
-		}
-
-		
-		//The properties you want to appear on the tables, if you don�t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {};
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/LSILabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/LSILabProfile.js
deleted file mode 100644
index 70da5bd74fd5c738c2a614bbb3acdbc2c73948de..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/LSILabProfile.js
+++ /dev/null
@@ -1,228 +0,0 @@
-function LSILabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(LSILabProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.ELNExperiments = ["SYSTEM_EXPERIMENT"];
-
-		this.notShowTypes = ["SYSTEM_EXPERIMENT", "ILLUMINA_FLOW_CELL", "ILLUMINA_FLOW_LANE", "LIBRARY", "LIBRARY_POOL", "MASTER_SAMPLE","MS_INJECTION","RAW_SAMPLE","TEMPLATE_SAMPLE", "SEARCH"];
-	
-		this.typePropertiesForTable = {
-			"SYSTEM_EXPERIMENT" : ["NAME", "GOALS", "RESULT_INTERPRETATION"],
-			"GENERAL_PROTOCOL" : ["NAME", "FOR_WHAT", "PROTOCOL_TYPE"],
-			"PCR" : ["NAME", "FOR_WHAT", "TEMPLATE", "PUBLICATION"],
-			"WESTERN_BLOTTING" : ["NAME", "FOR_WHAT", "STORAGE"],
-			"CHEMICAL" : ["NAME", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID", "STORAGE"],
-			"ANTIBODY" : ["NAME", "STORAGE", "HOST", "FOR_WHAT"],
-			"MEDIA" : ["NAME", "STORAGE", "FOR_WHAT", "ORGANISM"],
-			"SOLUTIONS_BUFFERS" : ["NAME", "STORAGE", "FOR_WHAT"],
-			"ENZYME" : ["NAME", "SUPPLIER", "ARTICLE_NUMBER", "KIT"],
-			"OLIGO" : ["TARGET", "DIRECTION", "RESTRICTION_ENZYME", "PROJECT"],
-			"PLASMID" : ["OWNER", "OWNER_NUMBER", "PLASMID_NAME", "BACTERIAL_ANTIBIOTIC_RESISTANCE", "YEAST_MARKER"],
-			"YEAST" : ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "PROJECT", "GENETIC_BACKGROUND", "MATING_TYPE", "FREEZER_NAME", "ROW", "COLUMN", "BOX_NUMBER"],
-			"BACTERIA" : ["BACTERIA_STRAIN_NAME", "BACTERIA_GENOTYPE", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "COMMENTS"]
-		}
-	
-		/*
-		 * Used by Sample Form
-		 */
-		this.getSpaceForSampleType = function(type) {
-			if(type === "SEQUENCING") {
-				return "LSI";
-			} else if(type === "PRIMARY_ANTIBODIES") {
-				return "LSI";
-			} else if(type === "BACTERIA") {
-				return "LSI";
-			} else if(type === "ENZYME") {
-				return "LSI";
-			} else if(type === "CHEMICAL") {
-				return "LSI";
-			} else if(type === "ANTIBODY") {
-				return "LSI";
-			} else if(type === "OLIGO") {
-				return "LSI";
-			} else if(type === "PLASMID") {
-				return "LSI";
-			} else if(type === "WESTERN_BLOTTING") {
-				return "LSI";
-			} else if(type === "READOUT") {
-				return "LSI";
-			} else if(type === "PCR") {
-				return "LSI";
-			} else if(type === "GENERAL_PROTOCOL") {
-				return "LSI";
-			} else if(type === "YEAST") {
-				return "LSI";
-			} else if(type === "POMBE") {
-				return "LSI";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "BACTERIA") {
-				return "/LSI/BACTERIA/LAB_BENCH_BACTERIA";
-			} else if(type === "SOLUTIONS_BUFFERS") {
-				return "/LSI/CHEMICALS/SOLUTIONS_BUFFERS";
-			} else if(type === "MEDIA") {
-				return "/LSI/CHEMICALS/MEDIA";
-			} else if(type === "ENZYME") {
-				return "/LSI/CHEMICALS/ENZYMES";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getHTMLTableFromXML = function(xmlDocument) {
-			var table_head = null;
-			var table_body = "";
-			var dom;
-	
-			if (window.DOMParser) {
-			  parser = new DOMParser();
-			  dom = parser.parseFromString(xmlDocument,"text/xml");
-			} else {// Internet Explorer
-			  dom = new ActiveXObject("Microsoft.XMLDOM");
-			  dom.async = false;
-			  dom.loadXML(xmlDocument); 
-			} 
-	
-			var html = null;
-			var root = dom.childNodes[0];
-			var children = root.childNodes;
-			for(var i = 0; i < children.length; i++) {
-				var child = children[i];
-				if (child.localName != null) {
-					var keys = child.attributes;
-					if (table_head == null) {
-						table_head = "<tr>";
-						var key = null;
-						for (var j = 0; j < keys.length; j++) {
-							key = keys[j];
-							if(key.localName != "permId") {
-								table_head += "<th style='text-align:left; width:" + (100/(keys.length-1)) + "%;'>"+ key.localName + "</th>";
-							}
-						}
-						table_head += "</tr>";
-					}
-					table_body += "<tr>";
-					for (var j = 0; j < keys.length; j++) {
-						key = keys[j];
-						if(key.localName != "permId") {
-							if(key.localName == "date") {
-								table_body += "<td style='text-align:left; width:" + (100/(keys.length-1)) + "%;'>" + key.value + "</td>";
-							} else {
-								table_body += "<td style='text-align:left; width:" + (100/(keys.length-1)) + "%;'>" + key.value + "</td>";
-							}
-						}
-					}
-					table_body += "</tr>";
-				}
-			}
-			html = "<table style='font-family:helvetica; font-size:90%; width: 100%;'><thead>" + table_head + "</thead><tbody>"+ table_body + "</tbody></table>";
-			return html;
-		}
-	
-		this.inspectorContentTransformer = function(sample, propertyCode, propertyContent) {
-		
-			if(propertyContent.indexOf("<root>") != -1) {
-				return {
-					"isSingleColumn" : true,
-					"content" : this.getHTMLTableFromXML(propertyContent)
-				};
-			} else {
-				if(propertyContent === "<root/>\n") { //To clean empty XMLs and don't show them.
-					propertyContent = "";
-				}
-				return {
-					"isSingleColumn" : false,
-					"content" : propertyContent
-				};
-			}
-		}
-	
-		this.searchSorter = function(searchResults) {
-		
-			var getChars = function(code) {
-				var theChars = code.replace(/[0-9]/g, '')
-				return theChars;
-			}
-		
-			var getNums = function(code) {
-				var thenum = code.replace( /^\D+/g, '');
-				if(thenum.length > 0) {
-					return parseInt(thenum);
-				} else {
-					return 0;
-				}
-			}
-		
-			var customSort = function(sampleA, sampleB){
-				var aCode = getChars(sampleA.code);
-				var bCode = getChars(sampleB.code);
-			
-				var returnValue = null;
-				if(aCode < bCode) {
-					returnValue = -1;
-				} else if(aCode > bCode) {
-					returnValue = 1;
-				} else {
-					var aNum = getNums(sampleA.code);
-					var bNum = getNums(sampleB.code);
-					returnValue = aNum - bNum;
-				}
-				return -1 * returnValue;
-			}
-		
-			var sortedResults = searchResults.sort(customSort);
-		
-			return sortedResults;
-		}
-	
-		this.inspectorContentExtra = function(extraContainerId, sample) {
-			// When requesting information about the sample, we don't need parents and children, so send a copy of the saple without that information.
-			var sampleToSend = $.extend({}, sample);
-			delete sampleToSend.parents;
-			delete sampleToSend.children; 
-		
-			var localReference = this;
-			this.serverFacade.listDataSetsForSample(sampleToSend, true, function(datasets) {
-				for(var i = 0; i < datasets.result.length; i++) {
-					var dataset = datasets.result[i];
-					if(dataset.dataSetTypeCode === "SEQ_FILE") {
-						var listFilesForDataSetWithDataset = function(dataset) {
-							localReference.serverFacade.listFilesForDataSet(dataset.code, "/", true, function(files) {
-								for(var i = 0; i < files.result.length; i++) {
-										var isDirectory = files.result[i].isDirectory;
-										var pathInDataSet = files.result[i].pathInDataSet;
-										if (/\.svg$/.test(pathInDataSet) && !isDirectory) {
-											var downloadUrl = localReference.allDataStores[0].downloadUrl + '/' + dataset.code + "/" + pathInDataSet + "?sessionID=" + localReference.serverFacade.getSession();
-											d3.xml(downloadUrl, "image/svg+xml", 
-												function(xml) {
-													var importedNode = document.importNode(xml.documentElement, true);
-													d3.select(importedNode)
-														.attr("width", 400 - 20)
-														.attr("height", 400 - 20)
-														.attr("viewBox", "200 200 650 650");
-													var inspectorNode = d3.select("#"+extraContainerId).node();
-													if(inspectorNode) { //Sometimes the user hides the sticker very clicky and the node doesn't exist anymore
-														inspectorNode.appendChild(importedNode);
-													}
-												});
-										}
-								}
-							});
-						}
-						listFilesForDataSetWithDataset(dataset);
-					}
-				}
-			}
-			);
-			return "";
-		}
-	}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/LimsProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/LimsProfile.js
deleted file mode 100644
index 2c9a509e1b224bb0f9619dac0f502fc992057f5e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/LimsProfile.js
+++ /dev/null
@@ -1,357 +0,0 @@
-
-function LimsProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(LimsProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		//this.notShowTypes = ["SYSTEM_EXPERIMENT", "ILLUMINA_FLOW_CELL", "ILLUMINA_FLOW_LANE", "LIBRARY", "LIBRARY_POOL", "MASTER_SAMPLE","MS_INJECTION","RAW_SAMPLE","TEMPLATE_SAMPLE", "SEARCH"];
-		this.inventorySpaces = ["YEAST_LAB"];
-		this.isShowUnavailablePreviewOnSampleTable = false;
-		
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Storage 1", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 1", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME_1", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW_1", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN_1",  //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER_1", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY_1" //Should be text.
-				},
-				{
-					"STORAGE_PROPERTY_GROUP" : "Storage 2", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 2", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME_2", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW_2", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN_2", //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER_2", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY_2" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"MINUS80_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"MINUS80_2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},	
-					"MINUS20_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},																
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}
-				}
-			};
-	
-		
-		this.sampleTypeDefinitionsExtension = {
-				"PLASMID_EXPRESSION" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Protocol",
-														"TYPE": "PROTOCOLS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-													,
-													{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMIDS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Inhibitor",
-														"TYPE": "INHIBITORS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "CONCENTRATION", "MANDATORY" : false }]
-													}
-													,
-													{
-														"LABEL" : "Cell Line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-												],
-				}
-		}
-		
-		this.typePropertiesForTable = {
-			"SYSTEM_EXPERIMENT" : ["NAME", "GOALS", "RESULT_INTERPRETATION"],
-			"GENERAL_PROTOCOL" : ["NAME", "FOR_WHAT", "PROTOCOL_TYPE"],
-			"PCR" : ["NAME", "FOR_WHAT", "TEMPLATE", "PUBLICATION"],
-			"WESTERN_BLOTTING" : ["NAME", "FOR_WHAT", "STORAGE"],
-			"CHEMICAL" : ["NAME", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID", "STORAGE"],
-			"ANTIBODY" : ["NAME", "STORAGE", "HOST", "FOR_WHAT"],
-			"MEDIA" : ["NAME", "STORAGE", "FOR_WHAT", "ORGANISM"],
-			"SOLUTIONS_BUFFERS" : ["NAME", "STORAGE", "FOR_WHAT"],
-			"ENZYME" : ["NAME", "SUPPLIER", "ARTICLE_NUMBER", "KIT"],
-			"OLIGO" : ["TARGET", "DIRECTION", "RESTRICTION_ENZYME", "PROJECT"],
-			"PLASMID" : ["OWNER", "OWNER_NUMBER", "PLASMID_NAME", "BACTERIAL_ANTIBIOTIC_RESISTANCE", "YEAST_MARKER"],
-			"YEAST" : ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "PROJECT", "GENETIC_BACKGROUND", "MATING_TYPE", "FREEZER_NAME", "ROW", "COLUMN", "BOX_NUMBER"],
-			"BACTERIA" : ["BACTERIA_STRAIN_NAME", "BACTERIA_GENOTYPE", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "COMMENTS"]
-		}
-
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "FACS") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-//			if(sampleTypeCode === "SYSTEM_EXPERIMENT") {
-//				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-//				var dilutionWidgetController = new DilutionTableController(sample, isEnabled);
-//				dilutionWidgetController.init($("#" + containerId));
-//			}
-		}
-	
-		/*
-		 * Used by Sample Form
-		 */
-		this.getSpaceForSampleType = function(type) {
-			if(type === "BACTERIA") {
-				return "YEAST_LAB";
-			} else if(type === "SOLUTIONS_BUFFERS") {
-				return "YEAST_LAB";
-			} else if(type === "MEDIA") {
-				return "YEAST_LAB";
-			} else if(type === "ENZYME") {
-				return "YEAST_LAB";
-			} else if(type === "CHEMICAL") {
-				return "YEAST_LAB";
-			} else if(type === "ANTIBODY") {
-				return "YEAST_LAB";
-			} else if(type === "OLIGO") {
-				return "YEAST_LAB";
-			} else if(type === "PLASMID") {
-				return "YEAST_LAB";
-			} else if(type === "WESTERN_BLOTTING") {
-				return "YEAST_LAB";
-			} else if(type === "READOUT") {
-				return "YEAST_LAB";
-			} else if(type === "PCR") {
-				return "YEAST_LAB";
-			} else if(type === "GENERAL_PROTOCOL") {
-				return "YEAST_LAB";
-			} else if(type === "YEAST") {
-				return "YEAST_LAB";
-			} else if(type === "POMBE") {
-				return "YEAST_LAB";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "BACTERIA") {
-				return "/YEAST_LAB/BACTERIA/LAB_BENCH_BACTERIA";
-			} else if(type === "SOLUTIONS_BUFFERS") {
-				return "/YEAST_LAB/CHEMICALS/SOLUTIONS_BUFFERS";
-			} else if(type === "MEDIA") {
-				return "/YEAST_LAB/CHEMICALS/MEDIA";
-			} else if(type === "ENZYME") {
-				return "/YEAST_LAB/CHEMICALS/ENZYMES";
-			} else if(type === "CHEMICAL") {
-				return "/YEAST_LAB/CHEMICALS/CHEMICALS";
-			} else if(type === "ANTIBODY") {
-				return "/YEAST_LAB/CHEMICALS/ANTIBODIES";
-			} else if(type === "OLIGO") {
-				return "/YEAST_LAB/OLIGO/81_BOXES";
-			} else if(type === "PLASMID") {
-				return "/YEAST_LAB/PLASMIDS/LAB_BENCH_PLASMIDS";
-			} else if(type === "WESTERN_BLOTTING") {
-				return "/YEAST_LAB/PROTOCOLS/WESTERN_BLOTTING";
-			} else if(type === "READOUT") {
-				return "/YEAST_LAB/PROTOCOLS/READOUTS";
-			} else if(type === "PCR") {
-				return "/YEAST_LAB/PROTOCOLS/PCR";
-			} else if(type === "GENERAL_PROTOCOL") {
-				return "/YEAST_LAB/PROTOCOLS/GENERAL_PROTOCOLS";
-			} else if(type === "YEAST") {
-				return "/YEAST_LAB/YEAST/LAB_BENCH_YEASTS";
-			} else if(type === "POMBE") {
-				return "/YEAST_LAB/YEAST/LAB_BENCH_POMBE";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getDataSetTypeForFileName = function(allDatasetFiles, fileName) {
-			if(fileName.endsWith("gb") || fileName.endsWith("fasta") || fileName.endsWith("xdna") || fileName.endsWith("fa")) {
-				return "SEQ_FILE";
-			} else if(fileName.endsWith("ab1")) {
-				return "RAW_DATA";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getHTMLTableFromXML = function(xmlDocument) {
-			var table_head = null;
-			var table_body = "";
-			var dom;
-	
-			if (window.DOMParser) {
-			  parser = new DOMParser();
-			  dom = parser.parseFromString(xmlDocument,"text/xml");
-			} else {// Internet Explorer
-			  dom = new ActiveXObject("Microsoft.XMLDOM");
-			  dom.async = false;
-			  dom.loadXML(xmlDocument); 
-			} 
-	
-			var html = null;
-			var root = dom.childNodes[0];
-			var children = root.childNodes;
-			for(var i = 0; i < children.length; i++) {
-				var child = children[i];
-				if (child.localName != null) {
-					var keys = child.attributes;
-					if (table_head == null) {
-						table_head = "<tr>";
-						var key = null;
-						for (var j = 0; j < keys.length; j++) {
-							key = keys[j];
-							if(key.localName != "permId") {
-								table_head += "<th style='text-align:left; width:" + (100/(keys.length-1)) + "%;'>"+ key.localName + "</th>";
-							}
-						}
-						table_head += "</tr>";
-					}
-					table_body += "<tr>";
-					for (var j = 0; j < keys.length; j++) {
-						key = keys[j];
-						if(key.localName != "permId") {
-							if(key.localName == "date") {
-								table_body += "<td style='text-align:left; width:" + (100/(keys.length-1)) + "%;'>" + key.value + "</td>";
-							} else {
-								table_body += "<td style='text-align:left; width:" + (100/(keys.length-1)) + "%;'>" + key.value + "</td>";
-							}
-						}
-					}
-					table_body += "</tr>";
-				}
-			}
-			html = "<table style='font-family:helvetica; font-size:90%; width: 100%;'><thead>" + table_head + "</thead><tbody>"+ table_body + "</tbody></table>";
-			return html;
-		}
-	
-		this.inspectorContentTransformer = function(sample, propertyCode, propertyContent) {
-		
-			if(propertyContent.indexOf("<root>") != -1) {
-				return {
-					"isSingleColumn" : true,
-					"content" : this.getHTMLTableFromXML(propertyContent)
-				};
-			} else {
-				if(propertyContent === "<root/>\n") { //To clean empty XMLs and don't show them.
-					propertyContent = "";
-				}
-				return {
-					"isSingleColumn" : false,
-					"content" : propertyContent
-				};
-			}
-		}
-	
-		this.searchSorter = function(searchResults) {
-		
-			var getChars = function(code) {
-				var theChars = code.replace(/[0-9]/g, '')
-				return theChars;
-			}
-		
-			var getNums = function(code) {
-				var thenum = code.replace( /^\D+/g, '');
-				if(thenum.length > 0) {
-					return parseInt(thenum);
-				} else {
-					return 0;
-				}
-			}
-		
-			var customSort = function(sampleA, sampleB){
-				var aCode = getChars(sampleA.code);
-				var bCode = getChars(sampleB.code);
-			
-				var returnValue = null;
-				if(aCode < bCode) {
-					returnValue = -1;
-				} else if(aCode > bCode) {
-					returnValue = 1;
-				} else {
-					var aNum = getNums(sampleA.code);
-					var bNum = getNums(sampleB.code);
-					returnValue = aNum - bNum;
-				}
-				return -1 * returnValue;
-			}
-		
-			var sortedResults = searchResults.sort(customSort);
-		
-			return sortedResults;
-		}
-	
-		this.inspectorContentExtra = function(extraContainerId, sample) {
-			// When requesting information about the sample, we don't need parents and children, so send a copy of the saple without that information.
-			var sampleToSend = $.extend({}, sample);
-			delete sampleToSend.parents;
-			delete sampleToSend.children; 
-		
-			var localReference = this;
-			this.serverFacade.listDataSetsForSample(sampleToSend, true, function(datasets) {
-				for(var i = 0; i < datasets.result.length; i++) {
-					var dataset = datasets.result[i];
-					if(dataset.dataSetTypeCode === "SEQ_FILE") {
-						var listFilesForDataSetWithDataset = function(dataset) {
-							localReference.serverFacade.listFilesForDataSet(dataset.code, "/", true, function(files) {
-								for(var i = 0; i < files.result.length; i++) {
-										var isDirectory = files.result[i].isDirectory;
-										var pathInDataSet = files.result[i].pathInDataSet;
-										if (/\.svg$/.test(pathInDataSet) && !isDirectory) {
-											var downloadUrl = localReference.allDataStores[0].downloadUrl + '/' + dataset.code + "/" + pathInDataSet + "?sessionID=" + localReference.serverFacade.getSession();
-											d3.xml(downloadUrl, "image/svg+xml", 
-												function(xml) {
-													var importedNode = document.importNode(xml.documentElement, true);
-													d3.select(importedNode)
-														.attr("width", 400 - 20)
-														.attr("height", 400 - 20)
-														.attr("viewBox", "200 200 650 650");
-													var inspectorNode = d3.select("#"+extraContainerId).node();
-													if(inspectorNode) { //Sometimes the user hides the sticker very clicky and the node doesn't exist anymore
-														inspectorNode.appendChild(importedNode);
-													}
-												});
-										}
-								}
-							});
-						}
-						listFilesForDataSetWithDataset(dataset);
-					}
-				}
-			}
-			);
-			return "";
-		}
-	}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/MateescuLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/MateescuLabProfile.js
deleted file mode 100644
index 46b97792a56c810a2f86adff540617ec9c0ff702..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/MateescuLabProfile.js
+++ /dev/null
@@ -1,149 +0,0 @@
-
-function MateescuLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(MateescuLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-	
-this.storagesConfiguration = {
-				"isEnabled" : true,
-				"storageSpaceLowWarning" : 0.8, //Storage goes over 80%
-				"boxSpaceLowWarning" : 0.8, //Box goes over 80%
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-				"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-				"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-				"NAME_PROPERTY" : "STORAGE_NAMES", //Should be a Vocabulary.
-				"ROW_PROPERTY" : "STORAGE_ROW", //Should be an integer.
-				"COLUMN_PROPERTY" : "STORAGE_COLUMN", //Should be an integer.
-				"BOX_PROPERTY" : "STORAGE_BOX_NAME", //Should be text.
-				"BOX_SIZE_PROPERTY" : "STORAGE_BOX_SIZE", //Should be Vocabulary.
-				"USER_PROPERTY" : "STORAGE_USER", //Should be text.
-				"POSITION_PROPERTY" : "STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"N2_TANK_A" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 4, //Number of columns
-						"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"N2_TANK_B" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 4, //Number of columns
-						"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS80_1" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 6, //Number of rows
-						"COLUMN_NUM" : 6, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS80_2" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 5, //Number of rows
-						"COLUMN_NUM" : 5, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS20_MAIN" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 6, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 18 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS20_SMALL" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 10 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS20_CELL_CULTURE" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 3, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 10 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"FRIDGE_LAB" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"FRIDGE_CELL_CULTURE" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"COLD_ROOM" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"CABINET_LAB_RT" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"SHELF_LAB_RT" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"LAB_BENCH1 : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"LAB_BENCH2 : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"LAB_BENCH3 : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"LAB_BENCH4 : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"LAB_BENCH5 : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"CELL_CULTURE_BENCH1 : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"CELL_CULTURE_BENCH2 : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK,
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}
-					
-					
-					
-				}
-			};
-			
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/MuellerProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/MuellerProfile.js
deleted file mode 100644
index e06d8effeea4fa08a438379a5ddf20088bec39eb..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/MuellerProfile.js
+++ /dev/null
@@ -1,384 +0,0 @@
-
-function MuellerProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(MuellerProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		
-		this.hideCodes = true;
-		
-		
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"DEFAULT_STORAGE" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"LN2_TANK" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 10, //Number of rows
-						"COLUMN_NUM" : 10, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS80_FREEZER" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 20, //Number of rows
-						"COLUMN_NUM" : 5, //Number of columns
-						"BOX_NUM" : 4 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"MEDIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"SOLUTION_BUFFER" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																												
-												],
-				},
-
-				"PCR_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"WESTERN_BLOTTING_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-				"BACTERIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Bacteria parents",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																				
-												],
-				},
-
-				"YEAST" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Yeast parents",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										],
-					"SAMPLE_PARENTS_ANNOTATIONS_COPY" : { "YEAST" : ["PLASMID"] }
-				},
-
-				"CELL_LINE" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Parental cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},		
-					                             	{
-														"LABEL" : "Parental fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																									
-												],
-				},
-
-				"FLY" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Fly parents",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-				},
-
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Bacteria",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "RNA",
-														"TYPE": "RNA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Yeast",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "PCR protocol",
-														"TYPE": "PCR_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Western blotting protocol",
-														"TYPE": "WESTERN_BLOTTING_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																			
-												],
-				}
-		
-		} 
-		
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "EXPERIMENTAL_STEP") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-		}
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/NexusProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/NexusProfile.js
deleted file mode 100644
index 6ee877c6f535802f96bc53b3a75b9249cf86b1c9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/NexusProfile.js
+++ /dev/null
@@ -1,138 +0,0 @@
-
-function NexusProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(NexusProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.mainMenu = {
-				showLabNotebook : false,
-				showInventory : false,
-				showDrawingBoard : false,
-				showSampleBrowser : true,
-				showStorageManager : false,
-				showAdvancedSearch : false,
-				showTrashcan : false,
-				showVocabularyViewer : false,
-				showUserManager : false
-		}
-		
-		this.propertyReplacingCode = "CELLARIO_BC";
-		this.inventorySpaces = ["LIBRARIES"];
-		this.searchSamplesUsingV3OnDropbox = true;
-		this.searchSamplesUsingV3OnDropboxRunCustom = true;
-		
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "PLATE" && sample.spaceCode === "LIBRARIES") {
-				var clickFunc = function() {
-					//Data
-					var $plateCode = FormUtil.getFieldForLabelWithText("Plate Identifier", sample.identifier, "plate_identifier");
-					var $dateField = FormUtil._getDatePickerField("expiry_date", "Expiry Date", true);
-					
-					var $expiryDate = FormUtil.getFieldForComponentWithLabel($dateField,"Expiry Date(*)");
-					
-					//Cancel/Ok buttons
-					var $cancelButton = $("<a>", { "class" : "btn btn-default" }).append("<span class='glyphicon glyphicon-remove'></span>");
-					$cancelButton.click(function(event) { 
-						Util.unblockUI();
-					});
-					
-					var retireAction = function() {
-						var plate_identifier = sample.identifier;
-						var expiry_date = $($($dateField.children()[0]).children()[0]).val();
-						
-						if(!expiry_date) {
-							Util.showError("Expiry date missing.", function() {}, true);
-							return;
-						}
-						
-						Util.blockUI();
-						
-						require([	'openbis',
-						         	'as/dto/service/id/CustomASServiceCode',
-						         	'as/dto/service/CustomASServiceExecutionOptions'], function(openbis, CustomASServiceCode, CustomASServiceExecutionOptions) {
-							
-							var testProtocol = window.location.protocol;
-							var testHost = window.location.hostname;
-							var testPort = window.location.port;
-							var testUrl = testProtocol + "//" + testHost + ":" + testPort;
-							var testApiUrl = testUrl + "/openbis/openbis/rmi-application-server-v3.json";
-							
-							var v3Api = new openbis(testApiUrl);
-							v3Api._private.sessionToken = mainController.serverFacade.getSession();
-							
-							var serviceCode = new CustomASServiceCode("plate_version_service");
-							var serviceOptions = new CustomASServiceExecutionOptions();
-							serviceOptions.withParameter("plate_identifier", plate_identifier).withParameter("expiry_date", expiry_date).withParameter("action", "new_version");
-							
-							v3Api.executeCustomASService(serviceCode, serviceOptions)
-							.done(function(result) {
-								Util.showSuccess("Plate Retired");
-								Util.unblockUI();
-							})
-							.fail(function(result) {
-								Util.showError("Plate Not Retired");
-								Util.unblockUI();
-							});
-						});
-					};
-					var $retireButton = FormUtil.getButtonWithText("Retire Plate!", retireAction, "btn-warning");
-					
-					// Mounting the widget with the components
-					var $retirePlateWidget = $("<div>");
-					$retirePlateWidget.append($("<div>", {"style" : "text-align:right;"}).append($cancelButton));
-					$retirePlateWidget.append($("<form>", { "class" : "form-horizontal" , "style" : "margin-left:20px; margin-right:20px;"})
-												.append($("<h1>").append("Retire Plate"))
-												.append($plateCode)
-												.append($expiryDate)
-												.append($("<br>")).append($retireButton)
-											);
-					
-					// Show Widget
-					Util.blockUI($retirePlateWidget, {'text-align' : 'left', 'top' : '10%', 'width' : '80%', 'left' : '10%', 'right' : '10%', 'height' : '300px', 'overflow' : 'auto'});
-					
-				};
-				$("#" + containerId)
-						.append($("<br>"))
-						.append(FormUtil.getButtonWithText("Retire Plate", clickFunc, "btn-warning"));
-			}
-		}
-		
-		this.storagesConfiguration = {
-			"isEnabled" : true,
-			/*
-			* Should be the same across all storages, if not correct behaviour is not guaranteed.
-			*/
-			"STORAGE_PROPERTIES": [{
-				"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-				"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-				"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-				"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-				"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-				"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-				"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-				"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-				"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-			}],
-			/*
-			* Storages map, can hold configurations for several storages.
-			*/
-			"STORAGE_CONFIGS": {
-					"MY_FRIDGE-1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 4, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"MY_FRIDGE-2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}
-				}
-		};
-		
-		this.sampleTypeDefinitionsExtension = {}
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/OBISELNTestProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/OBISELNTestProfile.js
deleted file mode 100644
index 60e3f547727ea02d1f36be493cfd9a1f4c2aa287..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/OBISELNTestProfile.js
+++ /dev/null
@@ -1,114 +0,0 @@
-
-function OBISELNTestProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(OBISELNTestProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.inventorySpaces = ["INVENTORY"];
-		
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 1", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY" //Should be text.
-				},
-				{
-					"STORAGE_PROPERTY_GROUP" : "Storage 2", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 2", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME_2", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW_2", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN_2", //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER_2", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY_2" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"MINUS80_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"MINUS80_2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},	
-					"MINUS820_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},																
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"PLASMID_EXPRESSION" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Protocol",
-														"TYPE": "PROTOCOLS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMIDS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Inhibitor",
-														"TYPE": "INHIBITORS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Cell Line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-												],
-				}
-		}
-
-		
-		//The properties you want to appear on the tables, if you don«t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {};
-
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "FACS") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-//			if(sampleTypeCode === "SYSTEM_EXPERIMENT") {
-//				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-//				var dilutionWidgetController = new DilutionTableController(sample, isEnabled);
-//				dilutionWidgetController.init($("#" + containerId));
-//			}
-		}
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PankeLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PankeLabProfile.js
deleted file mode 100644
index 9ecd98e9a7a8dd7af17eae315bba09010b812638..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PankeLabProfile.js
+++ /dev/null
@@ -1,92 +0,0 @@
-
-function PankeLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(PankeLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-	
-
-
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-
-
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-			"STRAIN" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Strain",
-														"TYPE": "STRAIN",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										],
-					"SAMPLE_PARENTS_ANNOTATIONS_COPY" : { "STRAIN" : ["PLASMID"] }
-				},
-
-
-
-
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             				                             	
-
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-
-					                             	{
-														"LABEL" : "Strain",
-														"TYPE": "STRAIN",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																
-												],
-				}
-		
-		} 
-		
-	
-
-
-
-
-
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PeterLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PeterLabProfile.js
deleted file mode 100644
index 08107dc49e3235f62c2254549767bc928829c014..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PeterLabProfile.js
+++ /dev/null
@@ -1,296 +0,0 @@
-
-function PeterLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(PeterLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-		
-		this.storagesConfiguration = {
-			"isEnabled" : true,
-			"STORAGE_PROPERTIES": [],
-			/*
-			* Storages map, can hold configurations for several storages.
-			*/
-			"STORAGE_CONFIGS": {
-				"G9_FRIDGE-1" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G9_FRIDGE-2" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 5, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},	
-				"G9_FREEZER-A" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},	
-				"G9_FREEZER-B" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},	
-				"G9_FREEZER-C" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 3, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FREEZER-D" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 7, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FREEZER-E" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 14, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FREEZER-F" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 3, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FREEZER-G" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FREEZER-H" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FREEZER-I" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 9, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FRIDGE-3" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 5, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FRIDGE-4" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FRIDGE-5" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 3, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FRIDGE-6" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G10_FRIDGE-7" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G11_FRIDGE-8" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G14_FREEZER-J" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"G14_FREEZER-K" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 8, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},																
-				"G14_FREEZER-L" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},								
-				"G14_FREEZER-M" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},								
-				"G14_FRIDGE-9" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},										
-				"G14_FRIDGE-10" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},									
-				"G17_FRIDGE-11" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 6, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},										
-				"G17_FRIDGE-12" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 3, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},													
-				"G17_FREEZER-N" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 4, //Number of rows
-								"COLUMN_NUM" : 4, //Number of columns
-								"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},
-				"BENCH" : 	{ //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 1, //Number of rows
-								"COLUMN_NUM" : 1, //Number of columns
-								"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},																				
-				"USER_BENCH" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 1, //Number of rows
-								"COLUMN_NUM" : 1, //Number of columns
-								"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},												
-				"USER_BENCH-80" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 1, //Number of rows
-								"COLUMN_NUM" : 1, //Number of columns
-								"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},												
-				"USER_BENCH-20" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 1, //Number of rows
-								"COLUMN_NUM" : 1, //Number of columns
-								"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							},												
-				"USER_BENCH-RT" : { //Freezer name given by the NAME_PROPERTY
-								"ROW_NUM" : 1, //Number of rows
-								"COLUMN_NUM" : 1, //Number of columns
-								"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-							}
-				}
-		};
-		
-		var getStoragGroupFromTemplate = function(groupNumber) {
-			return {
-				"STORAGE_PROPERTY_GROUP" : "Physical Storage " + groupNumber, //Where the storage will be painted.
-				"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage " + groupNumber, //Storage Group Name
-				"NAME_PROPERTY" : 		"STORAGE_NAME_" + groupNumber, //Should be a Vocabulary.
-				"ROW_PROPERTY" : 		"STORAGE_ROW_" + groupNumber, //Should be an integer.
-				"COLUMN_PROPERTY" : 	"STORAGE_COLUMN_" + groupNumber,  //Should be an integer.
-				"BOX_PROPERTY" : 		"STORAGE_BOX_NAME_" + groupNumber, //Should be text.
-				"USER_PROPERTY" : 		"STORAGE_USER_" + groupNumber, //Should be text.
-				"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE_" + groupNumber, //Should be Vocabulary.
-				"POSITION_PROPERTY" : 	"STORAGE_BOX_POSITION_" + groupNumber //Should be text.
-			};
-		}
-		
-		var numberOfStorageGroups = 65;
-		for(var sIdx = 1; sIdx <= numberOfStorageGroups; sIdx++) {
-			this.storagesConfiguration["STORAGE_PROPERTIES"].push(getStoragGroupFromTemplate(sIdx));
-		}
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"PLASMID_EXPRESSION" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Protocol",
-														"TYPE": "PROTOCOLS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMIDS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Inhibitor",
-														"TYPE": "INHIBITORS",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Cell Line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-												],
-				},
-
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell",
-														"TYPE": "CELL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "siRNA",
-														"TYPE": "SIRNA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Yeast strain",
-														"TYPE": "STRAIN",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Yeast collection",
-														"TYPE": "YEAST_COLLECTION",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Protein complex",
-														"TYPE": "PROTEIN_COMPLEX",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Experimental step",
-														"TYPE": "EXPERIMENTAL_STEP",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-																																													
-												],
-				}
-
-		}
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PhosphoProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PhosphoProfile.js
deleted file mode 100644
index 285d03904d6e356cbdfef3dcce1ed06f2595724b..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PhosphoProfile.js
+++ /dev/null
@@ -1,34 +0,0 @@
-function PhosphoProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(PhosphoProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		//Put on this list all experiment types, ELN experiments need to have both an experiment type and a sample type with the same CODE.
-		this.ELNExperiments = ["SYSTEM_EXPERIMENT"];
-
-		//Black list, put on this list all types that you don�t want to appear on the menu and the ELN experiments.
-		this.notShowTypes = ["SYSTEM_EXPERIMENT", "FJELMER_TEST", "SEARCH"];
-		
-		//The properties you want to appear on the tables, if you don�t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {
-				"BIOLOGICAL_SAMPLE" : ["NAME", "COMMENT", "TREATMENT_TYPE1", "TREATMENT_VALUE1", "TREATMENT_TYPE2", "TREATMENT_VALUE2", "TREATMENT_TYPE3", "TREATMENT_VALUE3"],
-				"BIOL_APMS" : ["NAME", "COMMENT", "BAIT", "DIGESTION"],
-				"BIOL_BASIC" : ["NAME", "COMMENT", "BIOLOGICAL_SAMPLE_TYPE", "TAX_ID", "SAMPLE_PREPARATION", "FRACTIONATION", "DIGESTION", "LABELING"],
-				"BIOL_CLINICAL" : ["NAME", "COMMENT", "DIGESTION", "LABELING"],
-				"BIOL_DDB" : ["NAME", "EM_PATIENTS", "CK_PATIENTS", "GENOME", "STRAIN_NAME", "PRIMARY_CELL_TYPE"],
-				"BIOL_MICROORGANISMS" : ["NAME", "BIOLOGICAL_SAMPLE_TYPE", "TAX_ID", "STRAIN", "SAMPLE_PREPARATION"],
-				"BIOL_PHOSPHO" : ["NAME", "SAMPLE_PREPARATION", "TREATMENT_PH_1", "TREATMENT_MO_1_VALUE", "TREATMENT_MO_1_TIME"],
-				"BIOL_SYNTHETIC" : ["NAME", "TYPE_SYNTHETIC", "SYNTHETIC_PEPTIDE"],
-				"BIOL_XL" : ["NAME", "COMMENT","CROSS_LINKER"],
-				"MS_INJECTION" : ["INSTRUMENT_TYPE"]
-		};
-		
-		//The configuration for the visual storages.
-		this.storagesConfiguration = {
-			"isEnabled" : false
-		};
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PicottiLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PicottiLabProfile.js
deleted file mode 100644
index 6c4e8b272db98ba25414a3bd8c23958836744801..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/PicottiLabProfile.js
+++ /dev/null
@@ -1,138 +0,0 @@
-
-function PicottiLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(PicottiLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				"storageSpaceLowWarning" : 0.8, //Storage goes over 80%
-				"boxSpaceLowWarning" : 0.8, //Box goes over 80%
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				 */
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				 */
-				"STORAGE_CONFIGS": {
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.BOX_POSITION, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS80_TOPLOADER" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.BOX_POSITION, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 8, //Number of rows
-						"COLUMN_NUM" : 9, //Number of columns
-						"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"MINUS80_UPRIGHT" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 16, //Number of rows
-						"COLUMN_NUM" : 12, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"MINUS20_SMALL_1" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"MINUS20_SMALL_2" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"MINUS20_SMALL_3" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"MINUS20_SMALL_4" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"MINUS20_SMALL_5" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"MINUS20_SMALL_6" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"MINUS20_BIG_1" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 14, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"FRIDGE_1" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"FRIDGE_2" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"FRIDGE_3" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"FRIDGE_4" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"FRIDGE_5" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"CHEMICAL_STORAGE" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 3, //Number of rows
-						"COLUMN_NUM" : 4, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"FUMEHOOD" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 999999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}															
-				}
-			};	
-		
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/SanchezLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/SanchezLabProfile.js
deleted file mode 100644
index d84c7e02d27f876f5964fa322aeb7fae9400440f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/SanchezLabProfile.js
+++ /dev/null
@@ -1,60 +0,0 @@
-
-function SanchezLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(SanchezLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				"storageSpaceLowWarning" : 0.8, //Storage goes over 80%
-				"boxSpaceLowWarning" : 0.8, //Box goes over 80%
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				 */
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				 */
-				"STORAGE_CONFIGS": {
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.BOX_POSITION, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"DEFAULT_STORAGE" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.BOX_POSITION, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"TRAY60" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 3, //Number of rows
-						"COLUMN_NUM" : 5, //Number of columns
-						"BOX_NUM" : 4 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},	
-					"TRAY28" : { //Freezer name given by the NAME_PROPERTY
-						"VALIDATION_LEVEL" : ValidationLevel.RACK, //When non present it defaults to BOX_POSITION
-						"ROW_NUM" : 4, //Number of rows
-						"COLUMN_NUM" : 7, //Number of columns
-						"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}												
-				}
-			};	
-		
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/SchwankLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/SchwankLabProfile.js
deleted file mode 100644
index f3b9d4d09a7ad74d32d10a74315c2fa103a6f149..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/SchwankLabProfile.js
+++ /dev/null
@@ -1,485 +0,0 @@
-
-function SchwankLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(SchwankLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-		
-		
-		this.storagesConfiguration = {
-			"isEnabled" : true,
-			/*
-			* Should be the same across all storages, if not correct behaviour is not guaranteed.
-			*/
-			"STORAGE_PROPERTIES": [{
-				"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-				"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-				"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-				"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-				"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-				"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-				"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-				"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-				"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-			}],
-			/*
-			* Storages map, can hold configurations for several storages.
-			*/
-			"STORAGE_CONFIGS": {
-					"FRIDGE_MAIN_SMALL_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"FRIDGE_MAIN_SMALL_2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"FRIDGE_MAIN_SMALL_3" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FRIDGE_MAIN_SMALL_4" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FRIDGE_MAIN_SMALL_5" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MAIN_SMALL_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 4, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MAIN_SMALL_2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 4, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MAIN_SMALL_3" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 4, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MAIN_SMALL_4" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 4, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MAIN_SMALL_5" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 4, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MAIN_SMALL_6" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 4, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MAIN_LARGE_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 7, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_CELL_LAB_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 7, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 20 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FRIDGE_CELL_LAB_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MINUS80_UPSTAIRS_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 16 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"FREEZER_MINUS80_D-FLOOR_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 16 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},								
-					"LIQUID_NITROGEN_1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 6, //Number of rows
-									"COLUMN_NUM" : 10, //Number of columns
-									"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},				
-					"CHEMICAL_CABINET" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 6, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 10 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},												
-					"CUPBOARD" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},												
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},												
-			
-				}
-		};
-		
-		
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"MEDIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"SOLUTION_BUFFER" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																												
-												],
-				},
-
-				"PCR_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-				"WESTERN_BLOTTING_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},																								
-												],
-				},
-
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-				"BACTERIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Bacteria parents",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																				
-												],
-				},
-
-				"YEAST" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Yeast parents",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										]
-				},
-
-				"FLY" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Fly parents",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-				},
-
-
-
-				"CELL_LINE" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Parental cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																						
-												],
-				},
-				"CELLCULTURE_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Parental cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																							
-												],
-				},
-				"HISTOCHEMISTRY_PROTOCOLS" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																							
-												],
-				},
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Bacteria",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "PCR protocol",
-														"TYPE": "PCR_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Western blotting protocol",
-														"TYPE": "WESTERN_BLOTTING_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell culture protocol",
-														"TYPE": "CELLCULTURE_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Histochemistry protocol",
-														"TYPE": "HISTOCHEMISTRY_PROTOCOLS",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																																													
-												],
-				}
-		
-
-		}
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/StoffelLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/StoffelLabProfile.js
deleted file mode 100644
index c05fcc4ff42dbf18b7e36edc86196eecceed100f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/StoffelLabProfile.js
+++ /dev/null
@@ -1,129 +0,0 @@
-
-function StoffelLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(StoffelLabProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-	
-		//Use this with all known types to create groups, if a type is not specified by default will be added to the OTHERS group.
-		this.inventorySpaces = ["INVENTORY"];
-		this.isShowUnavailablePreviewOnSampleTable = true;
-
-		this.getSpaceForSampleType = function(type) {
-			if(type === "ANTIBODY") {
-				return "INVENTORY";
-			} else if(type === "PLASMID") {
-				return "INVENTORY";
-			} else if(type === "INHIBITOR") {
-				return "INVENTORY";
-			} else if(type === "CELL_LINE") {
-				return "INVENTORY";
-			} else {
-				return null;
-			}
-		}	
-	
-
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "ANTIBODY") {
-				return "/INVENTORY/SAMPLES/ANTIBODIES";
-			} else if(type === "PLASMID") {
-				return "/INVENTORY/SAMPLES/PLASMIDS";
-			} else if(type === "INHIBITOR") {
-				return "/INVENTORY/SAMPLES/INHIBITORS";
-			} else if(type === "CELL_LINE") {
-				return "/INVENTORY/SAMPLES/CELL_LINES";
-			} else {
-				return null;
-			}
-		}
-
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 1", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"H20.1_STOFFEL-1" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"H20.1_STOFFEL-2" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 5, //Number of rows
-									"COLUMN_NUM" : 4, //Number of columns
-									"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},	
-					"USER_BENCH-80" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"USER_BENCH-20" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"USER_BENCH-RT" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}												
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"PLASMID_EXPRESSION" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Protocol",
-														"TYPE": "PROTOCOL",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Inhibitor",
-														"TYPE": "INHIBITOR",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-													,
-													{
-														"LABEL" : "Cell Line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 1,
-														"ANNOTATION_PROPERTIES" : []
-													}
-												],
-				}
-		}
-
-		
-		//The properties you want to appear on the tables, if you don�t specify the list, all of them will appear by default.
-		this.typePropertiesForTable = {};
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/TestProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/TestProfile.js
deleted file mode 100644
index 1411edce9911e85871145e461c12415b716ce9cf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/TestProfile.js
+++ /dev/null
@@ -1,149 +0,0 @@
-function TestProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(TestProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.ELNExperiments = ["SYSTEM_EXPERIMENT"];
-		this.notShowTypes = ["ANTIBODY_PANEL"];
-		this.isShowUnavailablePreviewOnSampleTable = false;
-		this.inventorySpaces = ["BODENMILLER_LAB", "INVENTORY"];
-		
-		//For testing	
-//		this.sampleTypeDefinitionsExtension = {
-//				"SYSTEM_EXPERIMENT" : {
-//					"SAMPLE_PARENTS_HINT" : [
-//					                             	{
-//														"LABEL" : "Protein",
-//														"TYPE": "PROTEIN",
-//														"MIN_COUNT" : 1,
-//														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "PHOSPHO", "MANDATORY" : true }
-//														                           ,{"TYPE" : "ISOTYPE", "MANDATORY" : false }]
-//													}
-//												],
-//					"SAMPLE_CHILDREN_HINT" : [
-//											                             	{
-//																				"LABEL" : "Protein",
-//																				"TYPE": "PROTEIN",
-//																				"MIN_COUNT" : 1,
-//																				"ANNOTATION_PROPERTIES" : [ {"TYPE" : "PHOSPHO", "MANDATORY" : true }
-//																				                           ,{"TYPE" : "ISOTYPE", "MANDATORY" : false }]
-//																			}
-//																		]
-//				}
-//		}
-//		
-//		this.typePropertiesForSmallTable = {
-//				"SYSTEM_EXPERIMENT" : ["NAME"],
-//				"PROTEIN" : ["PROTEIN_NAME"]
-//		}
-	
-		//this.typePropertiesForTable = {
-		//	"SYSTEM_EXPERIMENT" : ["NAME", "GOALS", "RESULT_INTERPRETATION"],
-		//}
-	
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Storage information", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 1", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY" //Should be text.
-				},
-				{
-					"STORAGE_PROPERTY_GROUP" : "Storage information 2", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Storage Group 2", //Storage Group Name
-					"NAME_PROPERTY" : "FREEZER_NAME_2", //Should be a Vocabulary.
-					"ROW_PROPERTY" : "ROW_2", //Should be an integer.
-					"COLUMN_PROPERTY" : "COLUMN_2", //Should be an integer.
-					"BOX_PROPERTY" : "BOX_NUMBER_2", //Should be text.
-					"USER_PROPERTY" : "USER_PROPERTY_2" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"TESTFREEZER" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 9, //Number of rows
-									"COLUMN_NUM" : 9, //Number of columns
-									"BOX_NUM" : 3 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								},
-					"USER_BENCH" : { //Freezer name given by the NAME_PROPERTY
-									"ROW_NUM" : 1, //Number of rows
-									"COLUMN_NUM" : 1, //Number of columns
-									"BOX_NUM" : 99999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-								}
-				}
-			};
-	
-		/*
-		 * Used by Sample Form
-		 */
-		this.getSpaceForSampleType = function(type) {
-			if(type === "PROTEIN") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CLONE") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CONJUGATED_CLONE") {
-				return "BODENMILLER_LAB";
-			} else if(type === "LOT") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CHEMICALS") {
-				return "BODENMILLER_LAB";
-			} else if(type === "CELL_LINES") {
-				return "BODENMILLER_LAB";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "PROTEIN") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "CLONE") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "CONJUGATED_CLONE") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "LOT") {
-				return "/BODENMILLER_LAB/ANTIBODIES/ANTIBODIES";
-			} else if(type === "CHEMICALS") {
-				return "/BODENMILLER_LAB/CHEMICALS/CHEMICALS";
-			} else if(type === "CELL_LINES") {
-				return "/BODENMILLER_LAB/CELL_LINES/CELL_LINES";
-			} else {
-				return null;
-			}
-		}
-
-		/*
-		 * Used by Main Menu
-		 */
-		this.mainMenuContentExtra = function() {
-			return "<center><h5><i class='icon-info-sign'></i> Please log in into your google account on the brower to see your laboratory calendar.</h5></center><br /><iframe src='https://www.google.com/calendar/embed?src=kcm620topcrg5677ikbn5epg0s%40group.calendar.google.com&ctz=Europe/Zurich' margin-left = '20' style='border: 50' width='800' height='600' frameborder='0' scrolling='no'></iframe>";
-		}
-		
-		/*
-		 * Used by Sample Form
-		 */
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "SYSTEM_EXPERIMENT") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-//			if(sampleTypeCode === "SYSTEM_EXPERIMENT") {
-//				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-//				var dilutionWidgetController = new DilutionTableController(sample, isEnabled);
-//				dilutionWidgetController.init($("#" + containerId));
-//			}
-		}
-	}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/VoinnetLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/VoinnetLabProfile.js
deleted file mode 100644
index 3fc93657b7ea9e2794d5ff5f2a52ec3faa5d8dbd..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/VoinnetLabProfile.js
+++ /dev/null
@@ -1,12 +0,0 @@
-
-function VoinnetLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(VoinnetLabProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-	
-		
-}
-});
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/WeisLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/WeisLabProfile.js
deleted file mode 100644
index 00c9939138de85e8098e076f5c5008b75c834c97..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/WeisLabProfile.js
+++ /dev/null
@@ -1,180 +0,0 @@
-
-function WeisLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(WeisLabProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		
-		this.hideCodes = true;
-		
-		
-		this.storagesConfiguration = {
-				"isEnabled" : true,
-				"storageSpaceLowWarning" : 0.8, //Storage goes over 80%
-				"boxSpaceLowWarning" : 0.8, //Box goes over 80%
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"DEFAULT_STORAGE" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-
-
-
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Restriction enzyme",
-														"TYPE": "RESTRICTION_ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																												
-												],
-				},
-
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-			"STRAIN" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Yeast strain",
-														"TYPE": "STRAIN",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										],
-					"SAMPLE_PARENTS_ANNOTATIONS_COPY" : { "STRAIN" : ["PLASMID"] }
-				},
-
-
-
-
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Restriction enzyme",
-														"TYPE": "RESTRICTION_ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	
-
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-
-					                             	{
-														"LABEL" : "Yeast strain",
-														"TYPE": "STRAIN",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																	
-												],
-				}
-		
-		} 
-		
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "EXPERIMENTAL_STEP") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-		}
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/WeisProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/WeisProfile.js
deleted file mode 100644
index 033e302e4af9c21baec07153b89cd53c19611024..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/WeisProfile.js
+++ /dev/null
@@ -1,174 +0,0 @@
-
-function WeisProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(WeisProfile.prototype, StandardProfile.prototype, {
-	init: function(serverFacade){
-		StandardProfile.prototype.init.call(this, serverFacade);
-		
-		
-		this.hideCodes = true;
-		
-		
-		this.storagesConfiguration = {
-				"isEnabled" : false,
-				"storageSpaceLowWarning" : 0.8, //Storage goes over 80%
-				"boxSpaceLowWarning" : 0.8, //Box goes over 80%
-				/*
-				 * Should be the same across all storages, if not correct behaviour is not guaranteed.
-				*/
-				"STORAGE_PROPERTIES": [{
-					"STORAGE_PROPERTY_GROUP" : "Physical Storage", //Where the storage will be painted.
-					"STORAGE_GROUP_DISPLAY_NAME" : "Physical Storage", //Storage Group Name
-					"NAME_PROPERTY" : 		"STORAGE_NAMES", //Should be a Vocabulary.
-					"ROW_PROPERTY" : 		"STORAGE_ROW", //Should be an integer.
-					"COLUMN_PROPERTY" : 	"STORAGE_COLUMN",  //Should be an integer.
-					"BOX_PROPERTY" : 		"STORAGE_BOX_NAME", //Should be text.
-					"BOX_SIZE_PROPERTY" : 	"STORAGE_BOX_SIZE", //Should be Vocabulary.
-					"USER_PROPERTY" : 		"STORAGE_USER", //Should be text.
-					"POSITION_PROPERTY" : 	"STORAGE_POSITION" //Should be text.
-				}],
-				/*
-				 * Storages map, can hold configurations for several storages.
-				*/
-				"STORAGE_CONFIGS": {
-					"BENCH" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 1 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					},
-					"DEFAULT_STORAGE" : { //Freezer name given by the NAME_PROPERTY
-						"ROW_NUM" : 1, //Number of rows
-						"COLUMN_NUM" : 1, //Number of columns
-						"BOX_NUM" : 9999 //Boxes on each rack, used for validation, to avoid validation increase the number to 9999 for example
-					}
-				}
-			};
-	
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-
-
-
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Restriction enzyme",
-														"TYPE": "RESTRICTION_ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																												
-												],
-				},
-
-
-				"PLASMID" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																		
-												],
-				},
-
-			"STRAIN" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Yeast strain",
-														"TYPE": "STRAIN",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										],
-					"SAMPLE_PARENTS_ANNOTATIONS_COPY" : { "STRAIN" : ["PLASMID"] }
-				},
-
-
-
-
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [ {"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Restriction enzyme",
-														"TYPE": "RESTRICTION_ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	
-
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-
-					                             	{
-														"LABEL" : "Yeast strain",
-														"TYPE": "STRAIN",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}																																	
-												],
-				}
-		
-		} 
-		
-	
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/YeastLabProfile.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/YeastLabProfile.js
deleted file mode 100644
index ae23519a69a1f149f7ad6beade4d0605b04d9ade..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/YeastLabProfile.js
+++ /dev/null
@@ -1,294 +0,0 @@
-function YeastLabProfile(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(YeastLabProfile.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-		
-		this.notShowTypes = ["SYSTEM_EXPERIMENT", "ILLUMINA_FLOW_CELL", "ILLUMINA_FLOW_LANE", "LIBRARY", "LIBRARY_POOL", "MASTER_SAMPLE","MS_INJECTION","RAW_SAMPLE","TEMPLATE_SAMPLE", "SEARCH"];
-		this.inventorySpaces = ["YEAST_LAB"];
-		this.isShowUnavailablePreviewOnSampleTable = false;
-		
-	/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"RESULT" : {
-					"SAMPLE_PARENTS_HINT" : [				                             	
-													{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-													,
-													{
-														"LABEL" : "Bacteria",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-													,
-													{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-													,
-													{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-
-													,
-													{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}	
-													,
-													{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-
-													,
-													{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-
-													,
-													{
-														"LABEL" : "Pombe",
-														"TYPE": "POMBE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-
-
-													,
-													{
-														"LABEL" : "Solution buffers",
-														"TYPE": "SOLUTIONS_BUFFERS",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-
-													,
-													{
-														"LABEL" : "Transcription factor",
-														"TYPE": "TRANSCRIPTION_FACTOR",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-
-													,
-													{
-														"LABEL" : "Yeast",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS", "MANDATORY" : false }]
-													}
-
-
-												]
-				}
-		}
-		
-		
-		this.typePropertiesForTable = {
-			"SYSTEM_EXPERIMENT" : ["NAME", "GOALS", "RESULT_INTERPRETATION"],
-			"GENERAL_PROTOCOL" : ["NAME", "FOR_WHAT", "PROTOCOL_TYPE"],
-			"PCR" : ["NAME", "FOR_WHAT", "TEMPLATE", "PUBLICATION"],
-			"WESTERN_BLOTTING" : ["NAME", "FOR_WHAT", "STORAGE"],
-			"CHEMICAL" : ["NAME", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID", "STORAGE"],
-			"ANTIBODY" : ["NAME", "STORAGE", "HOST", "FOR_WHAT"],
-			"MEDIA" : ["NAME", "STORAGE", "FOR_WHAT", "ORGANISM"],
-			"SOLUTIONS_BUFFERS" : ["NAME", "STORAGE", "FOR_WHAT"],
-			"ENZYME" : ["NAME", "SUPPLIER", "ARTICLE_NUMBER", "KIT"],
-			"OLIGO" : ["TARGET", "DIRECTION", "RESTRICTION_ENZYME", "PROJECT"],
-			"PLASMID" : ["OWNER", "OWNER_NUMBER", "PLASMID_NAME", "BACTERIAL_ANTIBIOTIC_RESISTANCE", "YEAST_MARKER"],
-			"YEAST" : ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "PROJECT", "GENETIC_BACKGROUND", "MATING_TYPE", "FREEZER_NAME", "ROW", "COLUMN", "BOX_NUMBER"],
-			"BACTERIA" : ["BACTERIA_STRAIN_NAME", "BACTERIA_GENOTYPE", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "COMMENTS"]
-		}
-	
-		/*
-		 * Used by Sample Form
-		 */
-		this.getSpaceForSampleType = function(type) {
-			if(type === "BACTERIA") {
-				return "YEAST_LAB";
-			} else if(type === "SOLUTIONS_BUFFERS") {
-				return "YEAST_LAB";
-			} else if(type === "MEDIA") {
-				return "YEAST_LAB";
-			} else if(type === "ENZYME") {
-				return "YEAST_LAB";
-			} else if(type === "CHEMICAL") {
-				return "YEAST_LAB";
-			} else if(type === "ANTIBODY") {
-				return "YEAST_LAB";
-			} else if(type === "OLIGO") {
-				return "YEAST_LAB";
-			} else if(type === "PLASMID") {
-				return "YEAST_LAB";
-			} else if(type === "WESTERN_BLOTTING") {
-				return "YEAST_LAB";
-			} else if(type === "READOUT") {
-				return "YEAST_LAB";
-			} else if(type === "PCR") {
-				return "YEAST_LAB";
-			} else if(type === "GENERAL_PROTOCOL") {
-				return "YEAST_LAB";
-			} else if(type === "YEAST") {
-				return "YEAST_LAB";
-			} else if(type === "POMBE") {
-				return "YEAST_LAB";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getExperimentIdentifierForSample = function(type, code, properties) {
-			if(type === "BACTERIA") {
-				return "/YEAST_LAB/BACTERIA/LAB_BENCH_BACTERIA";
-			} else if(type === "SOLUTIONS_BUFFERS") {
-				return "/YEAST_LAB/CHEMICALS/SOLUTIONS_BUFFERS";
-			} else if(type === "MEDIA") {
-				return "/YEAST_LAB/CHEMICALS/MEDIA";
-			} else if(type === "ENZYME") {
-				return "/YEAST_LAB/CHEMICALS/ENZYMES";
-			} else if(type === "CHEMICAL") {
-				return "/YEAST_LAB/CHEMICALS/CHEMICALS";
-			} else if(type === "ANTIBODY") {
-				return "/YEAST_LAB/CHEMICALS/ANTIBODIES";
-			} else if(type === "OLIGO") {
-				return "/YEAST_LAB/OLIGO/81_BOXES";
-			} else if(type === "PLASMID") {
-				return "/YEAST_LAB/PLASMIDS/LAB_BENCH_PLASMIDS";
-			} else if(type === "WESTERN_BLOTTING") {
-				return "/YEAST_LAB/PROTOCOLS/WESTERN_BLOTTING";
-			} else if(type === "READOUT") {
-				return "/YEAST_LAB/PROTOCOLS/READOUTS";
-			} else if(type === "PCR") {
-				return "/YEAST_LAB/PROTOCOLS/PCR";
-			} else if(type === "GENERAL_PROTOCOL") {
-				return "/YEAST_LAB/PROTOCOLS/GENERAL_PROTOCOLS";
-			} else if(type === "YEAST") {
-				return "/YEAST_LAB/YEAST/LAB_BENCH_YEASTS";
-			} else if(type === "POMBE") {
-				return "/YEAST_LAB/YEAST/LAB_BENCH_POMBE";
-			} else {
-				return null;
-			}
-		}
-		
-		this.getDataSetTypeForFileName = function(allDatasetFiles, fileName) {
-			if(fileName.endsWith("gb") || fileName.endsWith("fasta") || fileName.endsWith("xdna") || fileName.endsWith("fa")) {
-				return "SEQ_FILE";
-			} else if(fileName.endsWith("ab1")) {
-				return "RAW_DATA";
-			} else {
-				return null;
-			}
-		}
-		
-		this.searchSorter = function(searchResults) {
-		
-			var getChars = function(code) {
-				var theChars = code.replace(/[0-9]/g, '')
-				return theChars;
-			}
-		
-			var getNums = function(code) {
-				var thenum = code.replace( /^\D+/g, '');
-				if(thenum.length > 0) {
-					return parseInt(thenum);
-				} else {
-					return 0;
-				}
-			}
-		
-			var customSort = function(sampleA, sampleB){
-				var aCode = getChars(sampleA.code);
-				var bCode = getChars(sampleB.code);
-			
-				var returnValue = null;
-				if(aCode < bCode) {
-					returnValue = -1;
-				} else if(aCode > bCode) {
-					returnValue = 1;
-				} else {
-					var aNum = getNums(sampleA.code);
-					var bNum = getNums(sampleB.code);
-					returnValue = aNum - bNum;
-				}
-				return -1 * returnValue;
-			}
-		
-			var sortedResults = searchResults.sort(customSort);
-		
-			return sortedResults;
-		}
-		
-		
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "RESULT") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-		}
-
-	
-		this.inspectorContentExtra = function(extraContainerId, sample) {
-			// When requesting information about the sample, we don't need parents and children, so send a copy of the saple without that information.
-			var sampleToSend = $.extend({}, sample);
-			delete sampleToSend.parents;
-			delete sampleToSend.children; 
-		
-			var localReference = this;
-			this.serverFacade.listDataSetsForSample(sampleToSend, true, function(datasets) {
-				for(var i = 0; i < datasets.result.length; i++) {
-					var dataset = datasets.result[i];
-					if(dataset.dataSetTypeCode === "SEQ_FILE") {
-						var listFilesForDataSetWithDataset = function(dataset) {
-							localReference.serverFacade.listFilesForDataSet(dataset.code, "/", true, function(files) {
-								for(var i = 0; i < files.result.length; i++) {
-										var isDirectory = files.result[i].isDirectory;
-										var pathInDataSet = files.result[i].pathInDataSet;
-										if (/\.svg$/.test(pathInDataSet) && !isDirectory) {
-											var downloadUrl = localReference.allDataStores[0].downloadUrl + '/' + dataset.code + "/" + pathInDataSet + "?sessionID=" + localReference.serverFacade.getSession();
-											d3.xml(downloadUrl, "image/svg+xml", 
-												function(xml) {
-													var importedNode = document.importNode(xml.documentElement, true);
-													d3.select(importedNode)
-														.attr("width", 400 - 20)
-														.attr("height", 400 - 20)
-														.attr("viewBox", "200 200 650 650");
-													var inspectorNode = d3.select("#"+extraContainerId).node();
-													if(inspectorNode) { //Sometimes the user hides the sticker very clicky and the node doesn't exist anymore
-														inspectorNode.appendChild(importedNode);
-													}
-												});
-										}
-								}
-							});
-						}
-						listFilesForDataSetWithDataset(dataset);
-					}
-				}
-			}
-			);
-			return "";
-		}
-	}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/YeastLabProfile2.js b/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/YeastLabProfile2.js
deleted file mode 100644
index 97931cb2670f7c4ba44db02b14a883a4a63a64bc..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/installations/YeastLabProfile2.js
+++ /dev/null
@@ -1,361 +0,0 @@
-
-function YeastLabProfile2(serverFacade) {
-	this.init(serverFacade);
-}
-
-$.extend(YeastLabProfile2.prototype, DefaultProfile.prototype, {
-	init: function(serverFacade){
-		DefaultProfile.prototype.init.call(this, serverFacade);
-	
-		this.notShowTypes = ["SYSTEM_EXPERIMENT", "ILLUMINA_FLOW_CELL", "ILLUMINA_FLOW_LANE", "LIBRARY", "LIBRARY_POOL", "MASTER_SAMPLE","MS_INJECTION","RAW_SAMPLE","TEMPLATE_SAMPLE", "SEARCH"];
-		this.inventorySpaces = ["MATERIALS", "METHODS","YEAST_LAB"];
-		this.isShowUnavailablePreviewOnSampleTable = false;
-		
-		/* New Sample definition tests*/
-		this.sampleTypeDefinitionsExtension = {
-				"MEDIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "CONCENTRATION", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "CONCENTRATION", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "CONCENTRATION", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"SOLUTION_BUFFER" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "CONCENTRATION", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "CONCENTRATION", "MANDATORY" : false }]
-													}																							
-												],
-				},
-
-				"GENERAL_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "CONCENTRATION", "MANDATORY" : false }]
-													}																								
-												],
-				},
-
-				"PCR" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "CONCENTRATION" : false }]
-													},																								
-												],
-				},
-
-				"WESTERN_BLOTTING_PROTOCOL" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }]
-													},																								
-												],
-				},
-				
-				"RESULT" : {
-					"SAMPLE_PARENTS_HINT" : [
-													{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "DETAIL", "MANDATORY" : false }]
-													}																
-												],
-				},
-				
-				"READOUT" : {
-					"SAMPLE_PARENTS_HINT" : [
-													{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }]
-													},
-														{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }]
-													}																	
-												],
-				},
-				
-				"BACTERIA" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Bacteria parents",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													}																				
-												],
-				},
-
-				"YEAST" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													}																					
-												],
-					"SAMPLE_LINKS_HINT" : [
-												{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false },{"TYPE" : "CONTAINED", "MANDATORY" : false }]
-												}
-										],
-				},
-
-				"CELL_LINE" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Parental cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},		
-					                             	{
-														"LABEL" : "Parental fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													}																									
-												],
-				},
-
-				"POMBE" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }, {"TYPE" : "CONTAINED", "MANDATORY" : false }]
-													}																					
-												],
-				},
-				
-				"FLY" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Fly parents",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													}																					
-												],
-				},
-
-				"EXPERIMENTAL_STEP" : {
-					"SAMPLE_PARENTS_HINT" : [
-					                             	{
-														"LABEL" : "Antibody",
-														"TYPE": "ANTIBODY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false }, {"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Bacteria",
-														"TYPE": "BACTERIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Cell line",
-														"TYPE": "CELL_LINE",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Chemical",
-														"TYPE": "CHEMICAL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Enzyme",
-														"TYPE": "ENZYME",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Fly",
-														"TYPE": "FLY",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Media",
-														"TYPE": "MEDIA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Oligo",
-														"TYPE": "OLIGO",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Plasmid",
-														"TYPE": "PLASMID",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "RNA",
-														"TYPE": "RNA",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Solution/Buffer",
-														"TYPE": "SOLUTION_BUFFER",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "QUANTITY", "MANDATORY" : false },{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Yeast",
-														"TYPE": "YEAST",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "General protocol",
-														"TYPE": "GENERAL_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "PCR protocol",
-														"TYPE": "PCR_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													},
-					                             	{
-														"LABEL" : "Western blotting protocol",
-														"TYPE": "WESTERN_BLOTTING_PROTOCOL",
-														"MIN_COUNT" : 0,
-														"ANNOTATION_PROPERTIES" : [{"TYPE" : "COMMENTS_MONOLINE", "MANDATORY" : false }]
-													}																																			
-												],
-				}
-		
-		} 
-		
-		this.sampleFormContentExtra = function(sampleTypeCode, sample, containerId) {
-			if(sampleTypeCode === "EXPERIMENTAL_STEP") {
-				var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW;
-				var freeFormTableController = new FreeFormTableController(sample, isEnabled);
-				freeFormTableController.init($("#" + containerId));
-			}
-		}
-		
-		this.getDataSetTypeForFileName = function(allDatasetFiles, fileName) {
-			if(fileName.endsWith("gb") || fileName.endsWith("fasta") || fileName.endsWith("xdna") || fileName.endsWith("fa")) {
-				return "SEQ_FILE";
-			} else if(fileName.endsWith("ab1")) {
-				return "RAW_DATA";
-			} else {
-				return null;
-			}
-		}
-}
-});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/Grid.html b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/Grid.html
deleted file mode 100644
index 5fa2b9e33b3a30bb36c50bf924bee13bb0e968ab..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/Grid.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<div class="repeater" data-staticheight="500px">
-	<div class="repeater-header">
-		<div class="repeater-header-left">
-			<span class="repeater-title"></span>
-			<div class="repeater-search">
-				<div class="search input-group">
-					<input type="search" class="form-control" placeholder="Search" /> <span class="input-group-btn">
-						<button class="btn btn-default" type="button">
-							<span class="glyphicon glyphicon-search"></span> <span class="sr-only">Search</span>
-						</button>
-					</span>
-				</div>
-			</div>
-		</div>
-		<div class="repeater-header-right">
-			<div class="dropdown columnDropdown">
-				<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
-					Columns <span class="caret"></span>
-				</button>
-				<ul style="padding-left: 10px" class="dropdown-menu" role="menu"></ul>
-			</div>
-		</div>
-	</div>
-	<div class="repeater-viewport">
-		<div class="repeater-canvas"></div>
-		<div class="loader repeater-loader"></div>
-	</div>
-	<div class="repeater-footer">
-		<div class="repeater-footer-left">
-			<div class="repeater-itemization">
-				<span><span class="repeater-start"></span> - <span class="repeater-end"></span> of <span class="repeater-count"></span> items</span>
-				<div class="btn-group selectlist" data-resize="auto">
-					<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
-						<span class="selected-label">&nbsp;</span> <span class="caret"></span> <span class="sr-only">Toggle Dropdown</span>
-					</button>
-					<ul class="dropdown-menu" role="menu">
-						<li data-value="5"><a href="#">5</a></li>
-						<li data-value="10" data-selected="true"><a href="#">10</a></li>
-						<li data-value="20"><a href="#">20</a></li>
-						<li data-value="50" data-foo="bar" data-fizz="buzz"><a href="#">50</a></li>
-						<li data-value="100"><a href="#">100</a></li>
-					</ul>
-					<input class="hidden hidden-field" name="itemsPerPage" readonly="readonly" aria-hidden="true" type="text" />
-				</div>
-				<span>Per Page</span>
-			</div>
-		</div>
-		<div class="repeater-footer-right">
-			<div class="repeater-pagination">
-				<button type="button" class="btn btn-default btn-sm repeater-prev">
-					<span class="glyphicon glyphicon-chevron-left"></span> <span class="sr-only">Previous Page</span>
-				</button>
-				<label id="MyPageLabel" class="page-label">Page</label>
-				<div class="repeater-primaryPaging active">
-					<div class="input-group input-append dropdown combobox">
-						<input type="text" class="form-control" aria-labelledby="MyPageLabel">
-						<div class="input-group-btn">
-							<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
-								<span class="caret"></span> <span class="sr-only">Toggle Dropdown</span>
-							</button>
-							<ul class="dropdown-menu dropdown-menu-right"></ul>
-						</div>
-					</div>
-				</div>
-				<input type="text" class="form-control repeater-secondaryPaging" aria-labelledby="MyPageLabel"> <span>of <span
-					class="repeater-pages"></span></span>
-				<button type="button" class="btn btn-default btn-sm repeater-next">
-					<span class="glyphicon glyphicon-chevron-right"></span> <span class="sr-only">Next Page</span>
-				</button>
-			</div>
-		</div>
-	</div>
-</div>
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/Grid.js b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/Grid.js
deleted file mode 100644
index 608a64cbefd90e0f90f15a1c4cd1d0b8f3af8a56..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/Grid.js
+++ /dev/null
@@ -1,219 +0,0 @@
-function Grid(columns, getDataList) {
-	this.init(columns, getDataList);
-}
-
-$.extend(Grid.prototype, {
-	init : function(columns, getDataList) {
-		this.columns = columns;
-		this.getDataList = getDataList;
-	},
-
-	render : function() {
-		var thisGrid = this;
-
-		thisGrid.panel = $("<div>").addClass("fuelux");
-
-		$.get("Grid.html", function(template) {
-			thisGrid.panel.html(template);
-			thisGrid.renderColumnDropdown();
-			thisGrid.panel.repeater({
-				defaultView : "list",
-				dataSource : function(options, callback) {
-					if (options.view == "list") {
-						thisGrid.list(options, callback);
-					}
-				},
-				list_selectable : false,
-				list_noItemsHTML : 'No items found',
-				list_rowRendered : function(helpers, callback) {
-					$(helpers.item).click(function() {
-						var rowIndex = helpers.item[0].rowIndex;
-						thisGrid.notifyRowClickListeners({
-							"index" : rowIndex,
-							"data" : thisGrid.result.datas[rowIndex],
-							"item" : thisGrid.result.items[rowIndex]
-						});
-					});
-
-					callback();
-				}
-			});
-		});
-
-		return thisGrid.panel;
-	},
-
-	renderColumnDropdown : function() {
-		var thisGrid = this;
-
-		var columnList = thisGrid.panel.find(".columnDropdown").find("ul");
-		columnList.click(function(e) {
-			e.stopPropagation();
-		});
-
-		thisGrid.columns.forEach(function(column, columnIndex) {
-			var checkbox = $("<input>").attr("type", "checkbox").attr("value", column.property).attr("checked", "checked");
-			checkbox.change(function() {
-				thisGrid.panel.repeater('render');
-			});
-			var label = $("<label>").attr("role", "menuitem").addClass("checkbox").text(column.label).append(checkbox);
-			var item = $("<li>").attr("role", "presentation").append(label);
-			columnList.append(item);
-		});
-	},
-
-	getAllColumns : function() {
-		return this.columns;
-	},
-
-	getVisibleColumns : function() {
-		var thisGrid = this;
-		var columns = [];
-
-		thisGrid.panel.find(".columnDropdown").find("input:checked").each(function(index, element) {
-			thisGrid.getAllColumns().forEach(function(column) {
-				var checkbox = $(element);
-				if (column.property == checkbox.val()) {
-					columns.push(column);
-				}
-			});
-		});
-
-		// add a dummy empty column (repeater does not properly handle visibility of the last column)
-		columns.push({
-			label : null,
-			property : null,
-			sortable : false
-		});
-
-		return columns;
-	},
-
-	filterData : function(dataList, filter) {
-		var thisGrid = this;
-
-		if (filter) {
-			filter = filter.toLowerCase();
-			dataList = dataList.filter(function(data) {
-				return thisGrid.columns.some(function(column) {
-					if (column.filter) {
-						return column.filter(data, filter);
-					} else {
-						var value = "" + data[column.property];
-						return value != null && value.toLowerCase().indexOf(filter) != -1;
-					}
-				});
-			});
-		}
-
-		return dataList;
-	},
-
-	sortData : function(dataList, sortProperty, sortDirection) {
-		var thisGrid = this;
-
-		if (sortProperty && sortDirection) {
-			var sortColumn = null;
-			thisGrid.columns.forEach(function(column) {
-				if (column.property == sortProperty) {
-					sortColumn = column;
-				}
-			});
-			if (sortColumn) {
-				var sortFunction = null;
-				var sortDirection = sortDirection == "asc" ? 1 : -1;
-
-				if (sortColumn.sort) {
-					sortFunction = sortColumn.sort;
-				} else {
-					sortFunction = function(data1, data2) {
-						var value1 = data1[sortColumn.property];
-						var value2 = data2[sortColumn.property];
-						return naturalSort(value1, value2);
-					};
-				}
-
-				dataList.sort(function(data1, data2) {
-					return sortDirection * sortFunction(data1, data2);
-				});
-			}
-		}
-
-		return dataList;
-	},
-
-	renderData : function(dataList) {
-		var thisGrid = this;
-		var items = [];
-
-		dataList.forEach(function(data) {
-			var item = {};
-			thisGrid.getVisibleColumns().forEach(function(column) {
-				var value = null;
-				if (column.render) {
-					value = column.render(data);
-				} else {
-					value = data[column.property];
-				}
-				item[column.property] = value;
-			});
-			items.push(item);
-		});
-
-		return items;
-	},
-
-	list : function(options, callback) {
-		var thisGrid = this;
-
-		thisGrid.getDataList(function(dataList) {
-
-			dataList = thisGrid.filterData(dataList, options.search);
-			dataList = thisGrid.sortData(dataList, options.sortProperty, options.sortDirection);
-
-			var result = {};
-			var defaultPageSize = 50;
-			var startIndex = options.pageIndex * (options.pageSize || defaultPageSize);
-			var endIndex = startIndex + (options.pageSize || defaultPageSize);
-			endIndex = (endIndex <= result.count) ? endIndex : dataList.length;
-
-			result.count = dataList.length;
-			result.datas = [];
-			result.items = [];
-			result.columns = thisGrid.getVisibleColumns();
-			result.page = options.pageIndex;
-			result.pages = Math.ceil(result.count / (options.pageSize || defaultPageSize));
-			result.start = startIndex + 1;
-			result.end = endIndex;
-
-			dataList = dataList.slice(startIndex, endIndex);
-			itemList = thisGrid.renderData(dataList);
-			itemList.forEach(function(item, index) {
-				result.datas.push(dataList[index]);
-				result.items.push(item);
-			});
-
-			// add some delay (repeater does not properly layout columns without it)
-			setTimeout(function() {
-				thisGrid.result = result;
-				callback(result);
-			}, 1);
-		});
-	},
-
-	addRowClickListener : function(listener) {
-		if (!this.rowClickListeners) {
-			this.rowClickListeners = [];
-		}
-		this.rowClickListeners.push(listener);
-	},
-
-	notifyRowClickListeners : function(event) {
-		if (this.rowClickListeners) {
-			this.rowClickListeners.forEach(function(listener) {
-				listener(event);
-			});
-		}
-	}
-
-});
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/index.html b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/index.html
deleted file mode 100644
index 1d5fb1e7dcae8989376d6494d5715fd089a8217a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!--
-/*
- * Copyright 2014 ETH Zuerich, Scientific IT Services
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
-<title>FuelUX</title>
-
-<link rel="stylesheet" href="lib/bootstrap/css/bootstrap.css">
-<link rel="stylesheet" href="lib/fuelux/css/fuelux.css">
-
-<script type="text/javascript" src="lib/jquery/js/jquery.js"></script>
-<script type="text/javascript" src="lib/bootstrap/js/bootstrap.js"></script>
-<script type="text/javascript" src="lib/fuelux/js/fuelux.js"></script>
-<script type="text/javascript" src="lib/naturalsort/js/naturalSort.js"></script>
-<script type="text/javascript" src="Grid.js"></script>
-
-</head>
-
-<body>
-
-	<script type="text/javascript">
-		$(function() {
-			var columns = [ {
-				label : 'Name',
-				property : 'name',
-				sortable : true
-			}, {
-				label : 'Age',
-				property : 'age',
-				sortable : true
-			}, {
-				label : 'Surname',
-				property : 'surname',
-				sortable : true
-			}, {
-				label : "Full Name",
-				property : 'fullname',
-				sortable : true,
-				render : function(data) {
-					var fullName = data.name + " " + data.surname;
-					return $("<button>").text(fullName).click(function() {
-						alert("My name is: " + fullName);
-					});
-				},
-				filter : function(data, filter) {
-					var fullName = data.name + " " + data.surname;
-					return fullName.toLowerCase().indexOf(filter) != -1;
-				},
-				sort : function(data1, data2, asc) {
-					return naturalSort(data1.surname, data2.surname);
-				}
-			} ];
-			var getDataList = function(callback) {
-				callback([ {
-					name : "Name A",
-					surname : "Surname 1",
-					age : 21
-				}, {
-					name : "Name B",
-					surname : "Surname 2",
-					age : 34
-				}, {
-					name : "Name C",
-					surname : "Surname 10",
-					age : 61
-				} ]);
-			};
-			var grid = new Grid(columns, getDataList);
-
-			grid.addRowClickListener(function(e) {
-				console.log("Row clicked - index: " + e.index);
-			});
-
-			$("body").append(grid.render());
-		});
-	</script>
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.css b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.css
deleted file mode 100644
index a4069929bceb661eacbd4b1eb21306cfa5a1c8f9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.css
+++ /dev/null
@@ -1,347 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-}
-.btn-default {
-  text-shadow: 0 1px 0 #fff;
-  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #dbdbdb;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
-  background-color: #e0e0e0;
-  background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
-  background-color: #e0e0e0;
-  border-color: #dbdbdb;
-}
-.btn-primary {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
-  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #2b669a;
-}
-.btn-primary:hover,
-.btn-primary:focus {
-  background-color: #2d6ca2;
-  background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #2d6ca2;
-  border-color: #2b669a;
-}
-.btn-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
-  background-color: #419641;
-  background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #419641;
-  border-color: #3e8f3e;
-}
-.btn-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
-  background-color: #2aabd2;
-  background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #2aabd2;
-  border-color: #28a4c9;
-}
-.btn-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
-  background-color: #eb9316;
-  background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #eb9316;
-  border-color: #e38d13;
-}
-.btn-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
-  background-color: #c12e2a;
-  background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #c12e2a;
-  border-color: #b92c28;
-}
-.thumbnail,
-.img-thumbnail {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  background-color: #e8e8e8;
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  background-color: #357ebd;
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
-  background-repeat: repeat-x;
-}
-.navbar-default {
-  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
-  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-}
-.navbar-inverse .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
-  background-image:         linear-gradient(to bottom, #222 0%, #282828 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  border-radius: 0;
-}
-.alert {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #b2dba1;
-}
-.alert-info {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #9acfea;
-}
-.alert-warning {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #f5e79e;
-}
-.alert-danger {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dca7a7;
-}
-.progress {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
-  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
-  background-repeat: repeat-x;
-}
-.list-group {
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  text-shadow: 0 -1px 0 #3071a9;
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
-  background-image:         linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #3278b3;
-}
-.panel {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
-  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.well {
-  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dcdcdc;
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.css.map b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.css.map
deleted file mode 100644
index b36fc9a4970e41d7a3bfdb67780e93ab18a68faf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"AAeA;AACA;AACA;AACA;AACA;AACA;EACE,wCAAA;ECoGA,2FAAA;EACQ,mFAAA;;ADhGR,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;AACD,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;EC8FD,wDAAA;EACQ,gDAAA;;ADnER,IAAC;AACD,IAAC;EACC,sBAAA;;AAKJ;EC4PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;EAyB2C,yBAAA;EAA2B,kBAAA;;AAvBtE,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAeJ;EC2PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAgBJ;EC0PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAiBJ;ECyPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,SAAC;AACD,SAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,SAAC;AACD,SAAC;EACC,yBAAA;EACA,qBAAA;;AAkBJ;ECwPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAmBJ;ECuPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,WAAC;AACD,WAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,WAAC;AACD,WAAC;EACC,yBAAA;EACA,qBAAA;;AA2BJ;AACA;EC6CE,kDAAA;EACQ,0CAAA;;ADpCV,cAAe,KAAK,IAAG;AACvB,cAAe,KAAK,IAAG;ECmOnB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EDpOF,yBAAA;;AAEF,cAAe,UAAU;AACzB,cAAe,UAAU,IAAG;AAC5B,cAAe,UAAU,IAAG;EC6NxB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9NF,yBAAA;;AAUF;ECiNI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;EDrPA,kBAAA;ECaA,2FAAA;EACQ,mFAAA;;ADjBV,eAOE,YAAY,UAAU;EC0MpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,wDAAA;EACQ,gDAAA;;ADLV;AACA,WAAY,KAAK;EACf,8CAAA;;AAIF;EC+LI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;;ADtOF,eAIE,YAAY,UAAU;EC2LpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,uDAAA;EACQ,+CAAA;;ADCV,eASE;AATF,eAUE,YAAY,KAAK;EACf,yCAAA;;AAKJ;AACA;AACA;EACE,gBAAA;;AAUF;EACE,6CAAA;EChCA,0FAAA;EACQ,kFAAA;;AD2CV;ECqJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAKF;ECoJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAMF;ECmJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAOF;ECkJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAgBF;ECyII,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADlIJ;EC+HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADjIJ;EC8HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADhIJ;EC6HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD/HJ;EC4HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD9HJ;EC2HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtHJ;EACE,kBAAA;EC/EA,kDAAA;EACQ,0CAAA;;ADiFV,gBAAgB;AAChB,gBAAgB,OAAO;AACvB,gBAAgB,OAAO;EACrB,6BAAA;EC4GE,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED7GF,qBAAA;;AAUF;ECjGE,iDAAA;EACQ,yCAAA;;AD0GV,cAAe;ECsFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADxFJ,cAAe;ECqFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADvFJ,cAAe;ECoFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtFJ,WAAY;ECmFR,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADrFJ,cAAe;ECkFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADpFJ,aAAc;ECiFV,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD5EJ;ECyEI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED1EF,qBAAA;EC1HA,yFAAA;EACQ,iFAAA","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n  background-repeat: repeat-x;\n  border-color: darken(@btn-color, 14%);\n\n  &:hover,\n  &:focus  {\n    background-color: darken(@btn-color, 12%);\n    background-position: 0 -15px;\n  }\n\n  &:active,\n  &.active {\n    background-color: darken(@btn-color, 12%);\n    border-color: darken(@btn-color, 14%);\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n    background-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info    { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger  { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n  background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n  background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n  border-radius: @navbar-border-radius;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n  }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n  .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n  border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success    { .alert-styles(@alert-success-bg); }\n.alert-info       { .alert-styles(@alert-info-bg); }\n.alert-warning    { .alert-styles(@alert-warning-bg); }\n.alert-danger     { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar            { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @border-radius-base;\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n  border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n  border-color: darken(@well-bg, 10%);\n  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n.clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n\n// WebKit-style focus\n.tab-focus() {\n  // Default\n  outline: thin dotted;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n  width: @width;\n  height: @height;\n}\n.square(@size) {\n  .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &::-moz-placeholder           { color: @color;   // Firefox\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n  .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n   border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n     border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n   border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n     border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n//   supported browsers that have box shadow capabilities now support the\n//   standard `box-shadow` property.\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n  -webkit-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n          transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n  -webkit-transform: scale(@ratio, @ratio-y);\n      -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n          transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n          transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n  -webkit-transform: skew(@x, @y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n          transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n  resize: @direction; // Options: horizontal, vertical, both\n  overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n    background-image:  linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n  display: @display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse .panel-body {\n      border-top-color: @border;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n  background-color: @background;\n  border-color: @border;\n  color: @text-color;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a& {\n      color: @color;\n\n      .list-group-item-heading { color: inherit; }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\n    }\n  }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 8%);\n        border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      background-color: @background;\n          border-color: @border;\n    }\n  }\n\n  .badge {\n    color: @background;\n    background-color: @color;\n  }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n  background-color: @color;\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover {\n    background-color: darken(@color, 10%);\n  }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover {\n    color: darken(@color, 10%);\n  }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n  background-color: @color;\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n  display: block !important;\n  table&  { display: table; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  (@grid-gutter-width / 2);\n  padding-right: (@grid-gutter-width / 2);\n  &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-left:  (@gutter / -2);\n  margin-right: (@gutter / -2);\n  &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  @media (min-width: @screen-xs-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-xs-column-push(@columns) {\n  @media (min-width: @screen-xs-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-xs-column-pull(@columns) {\n  @media (min-width: @screen-xs-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-color;\n  }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea&,\n  select[multiple]& {\n    height: auto;\n  }\n}\n"]}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.min.css b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.min.css
deleted file mode 100644
index ba4bd28ae51616917024b5d4a8d2d20b969a9e31..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.css b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.css
deleted file mode 100644
index 7f36651961ed5bc42a712042c6db5493b4ce99e9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.css
+++ /dev/null
@@ -1,5785 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
-html {
-  font-family: sans-serif;
-  -webkit-text-size-adjust: 100%;
-      -ms-text-size-adjust: 100%;
-}
-body {
-  margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
-  display: block;
-}
-audio,
-canvas,
-progress,
-video {
-  display: inline-block;
-  vertical-align: baseline;
-}
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-[hidden],
-template {
-  display: none;
-}
-a {
-  background: transparent;
-}
-a:active,
-a:hover {
-  outline: 0;
-}
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-b,
-strong {
-  font-weight: bold;
-}
-dfn {
-  font-style: italic;
-}
-h1 {
-  margin: .67em 0;
-  font-size: 2em;
-}
-mark {
-  color: #000;
-  background: #ff0;
-}
-small {
-  font-size: 80%;
-}
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -.5em;
-}
-sub {
-  bottom: -.25em;
-}
-img {
-  border: 0;
-}
-svg:not(:root) {
-  overflow: hidden;
-}
-figure {
-  margin: 1em 40px;
-}
-hr {
-  height: 0;
-  -moz-box-sizing: content-box;
-       box-sizing: content-box;
-}
-pre {
-  overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
-  margin: 0;
-  font: inherit;
-  color: inherit;
-}
-button {
-  overflow: visible;
-}
-button,
-select {
-  text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-input {
-  line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-box-sizing: content-box;
-     -moz-box-sizing: content-box;
-          box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-fieldset {
-  padding: .35em .625em .75em;
-  margin: 0 2px;
-  border: 1px solid #c0c0c0;
-}
-legend {
-  padding: 0;
-  border: 0;
-}
-textarea {
-  overflow: auto;
-}
-optgroup {
-  font-weight: bold;
-}
-table {
-  border-spacing: 0;
-  border-collapse: collapse;
-}
-td,
-th {
-  padding: 0;
-}
-@media print {
-  * {
-    color: #000 !important;
-    text-shadow: none !important;
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-  select {
-    background: #fff !important;
-  }
-  .navbar {
-    display: none;
-  }
-  .table td,
-  .table th {
-    background-color: #fff !important;
-  }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important;
-  }
-  .label {
-    border: 1px solid #000;
-  }
-  .table {
-    border-collapse: collapse !important;
-  }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important;
-  }
-}
-* {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-*:before,
-*:after {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-html {
-  font-size: 62.5%;
-
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #333;
-  background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-a {
-  color: #428bca;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: #2a6496;
-  text-decoration: underline;
-}
-a:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-figure {
-  margin: 0;
-}
-img {
-  vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  display: block;
-  max-width: 100%;
-  height: auto;
-}
-.img-rounded {
-  border-radius: 6px;
-}
-.img-thumbnail {
-  display: inline-block;
-  max-width: 100%;
-  height: auto;
-  padding: 4px;
-  line-height: 1.42857143;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all .2s ease-in-out;
-          transition: all .2s ease-in-out;
-}
-.img-circle {
-  border-radius: 50%;
-}
-hr {
-  margin-top: 20px;
-  margin-bottom: 20px;
-  border: 0;
-  border-top: 1px solid #eee;
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-  font-family: inherit;
-  font-weight: 500;
-  line-height: 1.1;
-  color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
-  font-weight: normal;
-  line-height: 1;
-  color: #999;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
-  margin-top: 20px;
-  margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
-  font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
-  font-size: 75%;
-}
-h1,
-.h1 {
-  font-size: 36px;
-}
-h2,
-.h2 {
-  font-size: 30px;
-}
-h3,
-.h3 {
-  font-size: 24px;
-}
-h4,
-.h4 {
-  font-size: 18px;
-}
-h5,
-.h5 {
-  font-size: 14px;
-}
-h6,
-.h6 {
-  font-size: 12px;
-}
-p {
-  margin: 0 0 10px;
-}
-.lead {
-  margin-bottom: 20px;
-  font-size: 16px;
-  font-weight: 200;
-  line-height: 1.4;
-}
-@media (min-width: 768px) {
-  .lead {
-    font-size: 21px;
-  }
-}
-small,
-.small {
-  font-size: 85%;
-}
-cite {
-  font-style: normal;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-center {
-  text-align: center;
-}
-.text-justify {
-  text-align: justify;
-}
-.text-muted {
-  color: #999;
-}
-.text-primary {
-  color: #428bca;
-}
-a.text-primary:hover {
-  color: #3071a9;
-}
-.text-success {
-  color: #3c763d;
-}
-a.text-success:hover {
-  color: #2b542c;
-}
-.text-info {
-  color: #31708f;
-}
-a.text-info:hover {
-  color: #245269;
-}
-.text-warning {
-  color: #8a6d3b;
-}
-a.text-warning:hover {
-  color: #66512c;
-}
-.text-danger {
-  color: #a94442;
-}
-a.text-danger:hover {
-  color: #843534;
-}
-.bg-primary {
-  color: #fff;
-  background-color: #428bca;
-}
-a.bg-primary:hover {
-  background-color: #3071a9;
-}
-.bg-success {
-  background-color: #dff0d8;
-}
-a.bg-success:hover {
-  background-color: #c1e2b3;
-}
-.bg-info {
-  background-color: #d9edf7;
-}
-a.bg-info:hover {
-  background-color: #afd9ee;
-}
-.bg-warning {
-  background-color: #fcf8e3;
-}
-a.bg-warning:hover {
-  background-color: #f7ecb5;
-}
-.bg-danger {
-  background-color: #f2dede;
-}
-a.bg-danger:hover {
-  background-color: #e4b9b9;
-}
-.page-header {
-  padding-bottom: 9px;
-  margin: 40px 0 20px;
-  border-bottom: 1px solid #eee;
-}
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
-  margin-bottom: 0;
-}
-.list-unstyled {
-  padding-left: 0;
-  list-style: none;
-}
-.list-inline {
-  padding-left: 0;
-  margin-left: -5px;
-  list-style: none;
-}
-.list-inline > li {
-  display: inline-block;
-  padding-right: 5px;
-  padding-left: 5px;
-}
-dl {
-  margin-top: 0;
-  margin-bottom: 20px;
-}
-dt,
-dd {
-  line-height: 1.42857143;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    overflow: hidden;
-    clear: left;
-    text-align: right;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-  .dl-horizontal dd {
-    margin-left: 180px;
-  }
-}
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #999;
-}
-.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-blockquote {
-  padding: 10px 20px;
-  margin: 0 0 20px;
-  font-size: 17.5px;
-  border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
-  margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
-  display: block;
-  font-size: 80%;
-  line-height: 1.42857143;
-  color: #999;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
-  content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  text-align: right;
-  border-right: 5px solid #eee;
-  border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
-  content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
-  content: '\00A0 \2014';
-}
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  white-space: nowrap;
-  background-color: #f9f2f4;
-  border-radius: 4px;
-}
-kbd {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #fff;
-  background-color: #333;
-  border-radius: 3px;
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 1.42857143;
-  color: #333;
-  word-break: break-all;
-  word-wrap: break-word;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-}
-pre code {
-  padding: 0;
-  font-size: inherit;
-  color: inherit;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border-radius: 0;
-}
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-.container {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-right: auto;
-  margin-left: auto;
-}
-@media (min-width: 768px) {
-  .container {
-    width: 750px;
-  }
-}
-@media (min-width: 992px) {
-  .container {
-    width: 970px;
-  }
-}
-@media (min-width: 1200px) {
-  .container {
-    width: 1170px;
-  }
-}
-.container-fluid {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-right: auto;
-  margin-left: auto;
-}
-.row {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
-  position: relative;
-  min-height: 1px;
-  padding-right: 15px;
-  padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
-  float: left;
-}
-.col-xs-12 {
-  width: 100%;
-}
-.col-xs-11 {
-  width: 91.66666667%;
-}
-.col-xs-10 {
-  width: 83.33333333%;
-}
-.col-xs-9 {
-  width: 75%;
-}
-.col-xs-8 {
-  width: 66.66666667%;
-}
-.col-xs-7 {
-  width: 58.33333333%;
-}
-.col-xs-6 {
-  width: 50%;
-}
-.col-xs-5 {
-  width: 41.66666667%;
-}
-.col-xs-4 {
-  width: 33.33333333%;
-}
-.col-xs-3 {
-  width: 25%;
-}
-.col-xs-2 {
-  width: 16.66666667%;
-}
-.col-xs-1 {
-  width: 8.33333333%;
-}
-.col-xs-pull-12 {
-  right: 100%;
-}
-.col-xs-pull-11 {
-  right: 91.66666667%;
-}
-.col-xs-pull-10 {
-  right: 83.33333333%;
-}
-.col-xs-pull-9 {
-  right: 75%;
-}
-.col-xs-pull-8 {
-  right: 66.66666667%;
-}
-.col-xs-pull-7 {
-  right: 58.33333333%;
-}
-.col-xs-pull-6 {
-  right: 50%;
-}
-.col-xs-pull-5 {
-  right: 41.66666667%;
-}
-.col-xs-pull-4 {
-  right: 33.33333333%;
-}
-.col-xs-pull-3 {
-  right: 25%;
-}
-.col-xs-pull-2 {
-  right: 16.66666667%;
-}
-.col-xs-pull-1 {
-  right: 8.33333333%;
-}
-.col-xs-pull-0 {
-  right: 0;
-}
-.col-xs-push-12 {
-  left: 100%;
-}
-.col-xs-push-11 {
-  left: 91.66666667%;
-}
-.col-xs-push-10 {
-  left: 83.33333333%;
-}
-.col-xs-push-9 {
-  left: 75%;
-}
-.col-xs-push-8 {
-  left: 66.66666667%;
-}
-.col-xs-push-7 {
-  left: 58.33333333%;
-}
-.col-xs-push-6 {
-  left: 50%;
-}
-.col-xs-push-5 {
-  left: 41.66666667%;
-}
-.col-xs-push-4 {
-  left: 33.33333333%;
-}
-.col-xs-push-3 {
-  left: 25%;
-}
-.col-xs-push-2 {
-  left: 16.66666667%;
-}
-.col-xs-push-1 {
-  left: 8.33333333%;
-}
-.col-xs-push-0 {
-  left: 0;
-}
-.col-xs-offset-12 {
-  margin-left: 100%;
-}
-.col-xs-offset-11 {
-  margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
-  margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
-  margin-left: 75%;
-}
-.col-xs-offset-8 {
-  margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
-  margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
-  margin-left: 50%;
-}
-.col-xs-offset-5 {
-  margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
-  margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
-  margin-left: 25%;
-}
-.col-xs-offset-2 {
-  margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
-  margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
-    float: left;
-  }
-  .col-sm-12 {
-    width: 100%;
-  }
-  .col-sm-11 {
-    width: 91.66666667%;
-  }
-  .col-sm-10 {
-    width: 83.33333333%;
-  }
-  .col-sm-9 {
-    width: 75%;
-  }
-  .col-sm-8 {
-    width: 66.66666667%;
-  }
-  .col-sm-7 {
-    width: 58.33333333%;
-  }
-  .col-sm-6 {
-    width: 50%;
-  }
-  .col-sm-5 {
-    width: 41.66666667%;
-  }
-  .col-sm-4 {
-    width: 33.33333333%;
-  }
-  .col-sm-3 {
-    width: 25%;
-  }
-  .col-sm-2 {
-    width: 16.66666667%;
-  }
-  .col-sm-1 {
-    width: 8.33333333%;
-  }
-  .col-sm-pull-12 {
-    right: 100%;
-  }
-  .col-sm-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-sm-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-sm-pull-9 {
-    right: 75%;
-  }
-  .col-sm-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-sm-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-sm-pull-6 {
-    right: 50%;
-  }
-  .col-sm-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-sm-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-sm-pull-3 {
-    right: 25%;
-  }
-  .col-sm-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-sm-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-sm-pull-0 {
-    right: 0;
-  }
-  .col-sm-push-12 {
-    left: 100%;
-  }
-  .col-sm-push-11 {
-    left: 91.66666667%;
-  }
-  .col-sm-push-10 {
-    left: 83.33333333%;
-  }
-  .col-sm-push-9 {
-    left: 75%;
-  }
-  .col-sm-push-8 {
-    left: 66.66666667%;
-  }
-  .col-sm-push-7 {
-    left: 58.33333333%;
-  }
-  .col-sm-push-6 {
-    left: 50%;
-  }
-  .col-sm-push-5 {
-    left: 41.66666667%;
-  }
-  .col-sm-push-4 {
-    left: 33.33333333%;
-  }
-  .col-sm-push-3 {
-    left: 25%;
-  }
-  .col-sm-push-2 {
-    left: 16.66666667%;
-  }
-  .col-sm-push-1 {
-    left: 8.33333333%;
-  }
-  .col-sm-push-0 {
-    left: 0;
-  }
-  .col-sm-offset-12 {
-    margin-left: 100%;
-  }
-  .col-sm-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-sm-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-sm-offset-9 {
-    margin-left: 75%;
-  }
-  .col-sm-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-sm-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-sm-offset-6 {
-    margin-left: 50%;
-  }
-  .col-sm-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-sm-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-sm-offset-3 {
-    margin-left: 25%;
-  }
-  .col-sm-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-sm-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-sm-offset-0 {
-    margin-left: 0;
-  }
-}
-@media (min-width: 992px) {
-  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
-    float: left;
-  }
-  .col-md-12 {
-    width: 100%;
-  }
-  .col-md-11 {
-    width: 91.66666667%;
-  }
-  .col-md-10 {
-    width: 83.33333333%;
-  }
-  .col-md-9 {
-    width: 75%;
-  }
-  .col-md-8 {
-    width: 66.66666667%;
-  }
-  .col-md-7 {
-    width: 58.33333333%;
-  }
-  .col-md-6 {
-    width: 50%;
-  }
-  .col-md-5 {
-    width: 41.66666667%;
-  }
-  .col-md-4 {
-    width: 33.33333333%;
-  }
-  .col-md-3 {
-    width: 25%;
-  }
-  .col-md-2 {
-    width: 16.66666667%;
-  }
-  .col-md-1 {
-    width: 8.33333333%;
-  }
-  .col-md-pull-12 {
-    right: 100%;
-  }
-  .col-md-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-md-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-md-pull-9 {
-    right: 75%;
-  }
-  .col-md-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-md-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-md-pull-6 {
-    right: 50%;
-  }
-  .col-md-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-md-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-md-pull-3 {
-    right: 25%;
-  }
-  .col-md-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-md-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-md-pull-0 {
-    right: 0;
-  }
-  .col-md-push-12 {
-    left: 100%;
-  }
-  .col-md-push-11 {
-    left: 91.66666667%;
-  }
-  .col-md-push-10 {
-    left: 83.33333333%;
-  }
-  .col-md-push-9 {
-    left: 75%;
-  }
-  .col-md-push-8 {
-    left: 66.66666667%;
-  }
-  .col-md-push-7 {
-    left: 58.33333333%;
-  }
-  .col-md-push-6 {
-    left: 50%;
-  }
-  .col-md-push-5 {
-    left: 41.66666667%;
-  }
-  .col-md-push-4 {
-    left: 33.33333333%;
-  }
-  .col-md-push-3 {
-    left: 25%;
-  }
-  .col-md-push-2 {
-    left: 16.66666667%;
-  }
-  .col-md-push-1 {
-    left: 8.33333333%;
-  }
-  .col-md-push-0 {
-    left: 0;
-  }
-  .col-md-offset-12 {
-    margin-left: 100%;
-  }
-  .col-md-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-md-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-md-offset-9 {
-    margin-left: 75%;
-  }
-  .col-md-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-md-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-md-offset-6 {
-    margin-left: 50%;
-  }
-  .col-md-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-md-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-md-offset-3 {
-    margin-left: 25%;
-  }
-  .col-md-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-md-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-md-offset-0 {
-    margin-left: 0;
-  }
-}
-@media (min-width: 1200px) {
-  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
-    float: left;
-  }
-  .col-lg-12 {
-    width: 100%;
-  }
-  .col-lg-11 {
-    width: 91.66666667%;
-  }
-  .col-lg-10 {
-    width: 83.33333333%;
-  }
-  .col-lg-9 {
-    width: 75%;
-  }
-  .col-lg-8 {
-    width: 66.66666667%;
-  }
-  .col-lg-7 {
-    width: 58.33333333%;
-  }
-  .col-lg-6 {
-    width: 50%;
-  }
-  .col-lg-5 {
-    width: 41.66666667%;
-  }
-  .col-lg-4 {
-    width: 33.33333333%;
-  }
-  .col-lg-3 {
-    width: 25%;
-  }
-  .col-lg-2 {
-    width: 16.66666667%;
-  }
-  .col-lg-1 {
-    width: 8.33333333%;
-  }
-  .col-lg-pull-12 {
-    right: 100%;
-  }
-  .col-lg-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-lg-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-lg-pull-9 {
-    right: 75%;
-  }
-  .col-lg-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-lg-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-lg-pull-6 {
-    right: 50%;
-  }
-  .col-lg-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-lg-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-lg-pull-3 {
-    right: 25%;
-  }
-  .col-lg-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-lg-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-lg-pull-0 {
-    right: 0;
-  }
-  .col-lg-push-12 {
-    left: 100%;
-  }
-  .col-lg-push-11 {
-    left: 91.66666667%;
-  }
-  .col-lg-push-10 {
-    left: 83.33333333%;
-  }
-  .col-lg-push-9 {
-    left: 75%;
-  }
-  .col-lg-push-8 {
-    left: 66.66666667%;
-  }
-  .col-lg-push-7 {
-    left: 58.33333333%;
-  }
-  .col-lg-push-6 {
-    left: 50%;
-  }
-  .col-lg-push-5 {
-    left: 41.66666667%;
-  }
-  .col-lg-push-4 {
-    left: 33.33333333%;
-  }
-  .col-lg-push-3 {
-    left: 25%;
-  }
-  .col-lg-push-2 {
-    left: 16.66666667%;
-  }
-  .col-lg-push-1 {
-    left: 8.33333333%;
-  }
-  .col-lg-push-0 {
-    left: 0;
-  }
-  .col-lg-offset-12 {
-    margin-left: 100%;
-  }
-  .col-lg-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-lg-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-lg-offset-9 {
-    margin-left: 75%;
-  }
-  .col-lg-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-lg-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-lg-offset-6 {
-    margin-left: 50%;
-  }
-  .col-lg-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-lg-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-lg-offset-3 {
-    margin-left: 25%;
-  }
-  .col-lg-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-lg-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-lg-offset-0 {
-    margin-left: 0;
-  }
-}
-table {
-  max-width: 100%;
-  background-color: transparent;
-}
-th {
-  text-align: left;
-}
-.table {
-  width: 100%;
-  margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
-  padding: 8px;
-  line-height: 1.42857143;
-  vertical-align: top;
-  border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
-  vertical-align: bottom;
-  border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
-  border-top: 0;
-}
-.table > tbody + tbody {
-  border-top: 2px solid #ddd;
-}
-.table .table {
-  background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
-  padding: 5px;
-}
-.table-bordered {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
-  border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
-  background-color: #f5f5f5;
-}
-table col[class*="col-"] {
-  position: static;
-  display: table-column;
-  float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
-  position: static;
-  display: table-cell;
-  float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
-  background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr.active:hover > th {
-  background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
-  background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr.success:hover > th {
-  background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
-  background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr.info:hover > th {
-  background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
-  background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr.warning:hover > th {
-  background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
-  background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr.danger:hover > th {
-  background-color: #ebcccc;
-}
-@media (max-width: 767px) {
-  .table-responsive {
-    width: 100%;
-    margin-bottom: 15px;
-    overflow-x: scroll;
-    overflow-y: hidden;
-    -webkit-overflow-scrolling: touch;
-    -ms-overflow-style: -ms-autohiding-scrollbar;
-    border: 1px solid #ddd;
-  }
-  .table-responsive > .table {
-    margin-bottom: 0;
-  }
-  .table-responsive > .table > thead > tr > th,
-  .table-responsive > .table > tbody > tr > th,
-  .table-responsive > .table > tfoot > tr > th,
-  .table-responsive > .table > thead > tr > td,
-  .table-responsive > .table > tbody > tr > td,
-  .table-responsive > .table > tfoot > tr > td {
-    white-space: nowrap;
-  }
-  .table-responsive > .table-bordered {
-    border: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0;
-  }
-  .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-  .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-    border-bottom: 0;
-  }
-}
-fieldset {
-  min-width: 0;
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: inherit;
-  color: #333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-label {
-  display: inline-block;
-  margin-bottom: 5px;
-  font-weight: bold;
-}
-input[type="search"] {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9;
-  /* IE8-9 */
-  line-height: normal;
-}
-input[type="file"] {
-  display: block;
-}
-input[type="range"] {
-  display: block;
-  width: 100%;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-output {
-  display: block;
-  padding-top: 7px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555;
-}
-.form-control {
-  display: block;
-  width: 100%;
-  height: 34px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555;
-  background-color: #fff;
-  background-image: none;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
-  border-color: #66afe9;
-  outline: 0;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
-  color: #999;
-  opacity: 1;
-}
-.form-control:-ms-input-placeholder {
-  color: #999;
-}
-.form-control::-webkit-input-placeholder {
-  color: #999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
-  cursor: not-allowed;
-  background-color: #eee;
-  opacity: 1;
-}
-textarea.form-control {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-appearance: none;
-}
-input[type="date"] {
-  line-height: 34px;
-}
-.form-group {
-  margin-bottom: 15px;
-}
-.radio,
-.checkbox {
-  display: block;
-  min-height: 20px;
-  padding-left: 20px;
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
-  display: inline;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  font-weight: normal;
-  vertical-align: middle;
-  cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-.radio[disabled],
-.radio-inline[disabled],
-.checkbox[disabled],
-.checkbox-inline[disabled],
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"],
-fieldset[disabled] .radio,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox,
-fieldset[disabled] .checkbox-inline {
-  cursor: not-allowed;
-}
-.input-sm {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-select.input-sm {
-  height: 30px;
-  line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
-  height: auto;
-}
-.input-lg {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-select.input-lg {
-  height: 46px;
-  line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
-  height: auto;
-}
-.has-feedback {
-  position: relative;
-}
-.has-feedback .form-control {
-  padding-right: 42.5px;
-}
-.has-feedback .form-control-feedback {
-  position: absolute;
-  top: 25px;
-  right: 0;
-  display: block;
-  width: 34px;
-  height: 34px;
-  line-height: 34px;
-  text-align: center;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline {
-  color: #3c763d;
-}
-.has-success .form-control {
-  border-color: #3c763d;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
-  border-color: #2b542c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #3c763d;
-}
-.has-success .form-control-feedback {
-  color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline {
-  color: #8a6d3b;
-}
-.has-warning .form-control {
-  border-color: #8a6d3b;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
-  border-color: #66512c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
-  color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline {
-  color: #a94442;
-}
-.has-error .form-control {
-  border-color: #a94442;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
-  border-color: #843534;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #a94442;
-}
-.has-error .form-control-feedback {
-  color: #a94442;
-}
-.form-control-static {
-  margin-bottom: 0;
-}
-.help-block {
-  display: block;
-  margin-top: 5px;
-  margin-bottom: 10px;
-  color: #737373;
-}
-@media (min-width: 768px) {
-  .form-inline .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .form-inline .input-group > .form-control {
-    width: 100%;
-  }
-  .form-inline .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio,
-  .form-inline .checkbox {
-    display: inline-block;
-    padding-left: 0;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-  .form-inline .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-.form-horizontal .control-label,
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  padding-top: 7px;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-  min-height: 27px;
-}
-.form-horizontal .form-group {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-.form-horizontal .form-control-static {
-  padding-top: 7px;
-}
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    text-align: right;
-  }
-}
-.form-horizontal .has-feedback .form-control-feedback {
-  top: 0;
-  right: 15px;
-}
-.btn {
-  display: inline-block;
-  padding: 6px 12px;
-  margin-bottom: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1.42857143;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus {
-  color: #333;
-  text-decoration: none;
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-  pointer-events: none;
-  cursor: not-allowed;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-          box-shadow: none;
-  opacity: .65;
-}
-.btn-default {
-  color: #333;
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  color: #333;
-  background-color: #ebebeb;
-  border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default .badge {
-  color: #fff;
-  background-color: #333;
-}
-.btn-primary {
-  color: #fff;
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  color: #fff;
-  background-color: #3276b1;
-  border-color: #285e8e;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-.btn-primary .badge {
-  color: #428bca;
-  background-color: #fff;
-}
-.btn-success {
-  color: #fff;
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  color: #fff;
-  background-color: #47a447;
-  border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success .badge {
-  color: #5cb85c;
-  background-color: #fff;
-}
-.btn-info {
-  color: #fff;
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  color: #fff;
-  background-color: #39b3d7;
-  border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info .badge {
-  color: #5bc0de;
-  background-color: #fff;
-}
-.btn-warning {
-  color: #fff;
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  color: #fff;
-  background-color: #ed9c28;
-  border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning .badge {
-  color: #f0ad4e;
-  background-color: #fff;
-}
-.btn-danger {
-  color: #fff;
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  color: #fff;
-  background-color: #d2322d;
-  border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger .badge {
-  color: #d9534f;
-  background-color: #fff;
-}
-.btn-link {
-  font-weight: normal;
-  color: #428bca;
-  cursor: pointer;
-  border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
-  background-color: transparent;
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
-  border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
-  color: #2a6496;
-  text-decoration: underline;
-  background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
-  color: #999;
-  text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
-  padding: 1px 5px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-right: 0;
-  padding-left: 0;
-}
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity .15s linear;
-          transition: opacity .15s linear;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  display: none;
-}
-.collapse.in {
-  display: block;
-}
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height .35s ease;
-          transition: height .35s ease;
-}
-@font-face {
-  font-family: 'Glyphicons Halflings';
-
-  src: url('../fonts/glyphicons-halflings-regular.eot');
-  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
-  position: relative;
-  top: 1px;
-  display: inline-block;
-  font-family: 'Glyphicons Halflings';
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1;
-
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
-  content: "\2a";
-}
-.glyphicon-plus:before {
-  content: "\2b";
-}
-.glyphicon-euro:before {
-  content: "\20ac";
-}
-.glyphicon-minus:before {
-  content: "\2212";
-}
-.glyphicon-cloud:before {
-  content: "\2601";
-}
-.glyphicon-envelope:before {
-  content: "\2709";
-}
-.glyphicon-pencil:before {
-  content: "\270f";
-}
-.glyphicon-glass:before {
-  content: "\e001";
-}
-.glyphicon-music:before {
-  content: "\e002";
-}
-.glyphicon-search:before {
-  content: "\e003";
-}
-.glyphicon-heart:before {
-  content: "\e005";
-}
-.glyphicon-star:before {
-  content: "\e006";
-}
-.glyphicon-star-empty:before {
-  content: "\e007";
-}
-.glyphicon-user:before {
-  content: "\e008";
-}
-.glyphicon-film:before {
-  content: "\e009";
-}
-.glyphicon-th-large:before {
-  content: "\e010";
-}
-.glyphicon-th:before {
-  content: "\e011";
-}
-.glyphicon-th-list:before {
-  content: "\e012";
-}
-.glyphicon-ok:before {
-  content: "\e013";
-}
-.glyphicon-remove:before {
-  content: "\e014";
-}
-.glyphicon-zoom-in:before {
-  content: "\e015";
-}
-.glyphicon-zoom-out:before {
-  content: "\e016";
-}
-.glyphicon-off:before {
-  content: "\e017";
-}
-.glyphicon-signal:before {
-  content: "\e018";
-}
-.glyphicon-cog:before {
-  content: "\e019";
-}
-.glyphicon-trash:before {
-  content: "\e020";
-}
-.glyphicon-home:before {
-  content: "\e021";
-}
-.glyphicon-file:before {
-  content: "\e022";
-}
-.glyphicon-time:before {
-  content: "\e023";
-}
-.glyphicon-road:before {
-  content: "\e024";
-}
-.glyphicon-download-alt:before {
-  content: "\e025";
-}
-.glyphicon-download:before {
-  content: "\e026";
-}
-.glyphicon-upload:before {
-  content: "\e027";
-}
-.glyphicon-inbox:before {
-  content: "\e028";
-}
-.glyphicon-play-circle:before {
-  content: "\e029";
-}
-.glyphicon-repeat:before {
-  content: "\e030";
-}
-.glyphicon-refresh:before {
-  content: "\e031";
-}
-.glyphicon-list-alt:before {
-  content: "\e032";
-}
-.glyphicon-lock:before {
-  content: "\e033";
-}
-.glyphicon-flag:before {
-  content: "\e034";
-}
-.glyphicon-headphones:before {
-  content: "\e035";
-}
-.glyphicon-volume-off:before {
-  content: "\e036";
-}
-.glyphicon-volume-down:before {
-  content: "\e037";
-}
-.glyphicon-volume-up:before {
-  content: "\e038";
-}
-.glyphicon-qrcode:before {
-  content: "\e039";
-}
-.glyphicon-barcode:before {
-  content: "\e040";
-}
-.glyphicon-tag:before {
-  content: "\e041";
-}
-.glyphicon-tags:before {
-  content: "\e042";
-}
-.glyphicon-book:before {
-  content: "\e043";
-}
-.glyphicon-bookmark:before {
-  content: "\e044";
-}
-.glyphicon-print:before {
-  content: "\e045";
-}
-.glyphicon-camera:before {
-  content: "\e046";
-}
-.glyphicon-font:before {
-  content: "\e047";
-}
-.glyphicon-bold:before {
-  content: "\e048";
-}
-.glyphicon-italic:before {
-  content: "\e049";
-}
-.glyphicon-text-height:before {
-  content: "\e050";
-}
-.glyphicon-text-width:before {
-  content: "\e051";
-}
-.glyphicon-align-left:before {
-  content: "\e052";
-}
-.glyphicon-align-center:before {
-  content: "\e053";
-}
-.glyphicon-align-right:before {
-  content: "\e054";
-}
-.glyphicon-align-justify:before {
-  content: "\e055";
-}
-.glyphicon-list:before {
-  content: "\e056";
-}
-.glyphicon-indent-left:before {
-  content: "\e057";
-}
-.glyphicon-indent-right:before {
-  content: "\e058";
-}
-.glyphicon-facetime-video:before {
-  content: "\e059";
-}
-.glyphicon-picture:before {
-  content: "\e060";
-}
-.glyphicon-map-marker:before {
-  content: "\e062";
-}
-.glyphicon-adjust:before {
-  content: "\e063";
-}
-.glyphicon-tint:before {
-  content: "\e064";
-}
-.glyphicon-edit:before {
-  content: "\e065";
-}
-.glyphicon-share:before {
-  content: "\e066";
-}
-.glyphicon-check:before {
-  content: "\e067";
-}
-.glyphicon-move:before {
-  content: "\e068";
-}
-.glyphicon-step-backward:before {
-  content: "\e069";
-}
-.glyphicon-fast-backward:before {
-  content: "\e070";
-}
-.glyphicon-backward:before {
-  content: "\e071";
-}
-.glyphicon-play:before {
-  content: "\e072";
-}
-.glyphicon-pause:before {
-  content: "\e073";
-}
-.glyphicon-stop:before {
-  content: "\e074";
-}
-.glyphicon-forward:before {
-  content: "\e075";
-}
-.glyphicon-fast-forward:before {
-  content: "\e076";
-}
-.glyphicon-step-forward:before {
-  content: "\e077";
-}
-.glyphicon-eject:before {
-  content: "\e078";
-}
-.glyphicon-chevron-left:before {
-  content: "\e079";
-}
-.glyphicon-chevron-right:before {
-  content: "\e080";
-}
-.glyphicon-plus-sign:before {
-  content: "\e081";
-}
-.glyphicon-minus-sign:before {
-  content: "\e082";
-}
-.glyphicon-remove-sign:before {
-  content: "\e083";
-}
-.glyphicon-ok-sign:before {
-  content: "\e084";
-}
-.glyphicon-question-sign:before {
-  content: "\e085";
-}
-.glyphicon-info-sign:before {
-  content: "\e086";
-}
-.glyphicon-screenshot:before {
-  content: "\e087";
-}
-.glyphicon-remove-circle:before {
-  content: "\e088";
-}
-.glyphicon-ok-circle:before {
-  content: "\e089";
-}
-.glyphicon-ban-circle:before {
-  content: "\e090";
-}
-.glyphicon-arrow-left:before {
-  content: "\e091";
-}
-.glyphicon-arrow-right:before {
-  content: "\e092";
-}
-.glyphicon-arrow-up:before {
-  content: "\e093";
-}
-.glyphicon-arrow-down:before {
-  content: "\e094";
-}
-.glyphicon-share-alt:before {
-  content: "\e095";
-}
-.glyphicon-resize-full:before {
-  content: "\e096";
-}
-.glyphicon-resize-small:before {
-  content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
-  content: "\e101";
-}
-.glyphicon-gift:before {
-  content: "\e102";
-}
-.glyphicon-leaf:before {
-  content: "\e103";
-}
-.glyphicon-fire:before {
-  content: "\e104";
-}
-.glyphicon-eye-open:before {
-  content: "\e105";
-}
-.glyphicon-eye-close:before {
-  content: "\e106";
-}
-.glyphicon-warning-sign:before {
-  content: "\e107";
-}
-.glyphicon-plane:before {
-  content: "\e108";
-}
-.glyphicon-calendar:before {
-  content: "\e109";
-}
-.glyphicon-random:before {
-  content: "\e110";
-}
-.glyphicon-comment:before {
-  content: "\e111";
-}
-.glyphicon-magnet:before {
-  content: "\e112";
-}
-.glyphicon-chevron-up:before {
-  content: "\e113";
-}
-.glyphicon-chevron-down:before {
-  content: "\e114";
-}
-.glyphicon-retweet:before {
-  content: "\e115";
-}
-.glyphicon-shopping-cart:before {
-  content: "\e116";
-}
-.glyphicon-folder-close:before {
-  content: "\e117";
-}
-.glyphicon-folder-open:before {
-  content: "\e118";
-}
-.glyphicon-resize-vertical:before {
-  content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
-  content: "\e120";
-}
-.glyphicon-hdd:before {
-  content: "\e121";
-}
-.glyphicon-bullhorn:before {
-  content: "\e122";
-}
-.glyphicon-bell:before {
-  content: "\e123";
-}
-.glyphicon-certificate:before {
-  content: "\e124";
-}
-.glyphicon-thumbs-up:before {
-  content: "\e125";
-}
-.glyphicon-thumbs-down:before {
-  content: "\e126";
-}
-.glyphicon-hand-right:before {
-  content: "\e127";
-}
-.glyphicon-hand-left:before {
-  content: "\e128";
-}
-.glyphicon-hand-up:before {
-  content: "\e129";
-}
-.glyphicon-hand-down:before {
-  content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
-  content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
-  content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
-  content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
-  content: "\e134";
-}
-.glyphicon-globe:before {
-  content: "\e135";
-}
-.glyphicon-wrench:before {
-  content: "\e136";
-}
-.glyphicon-tasks:before {
-  content: "\e137";
-}
-.glyphicon-filter:before {
-  content: "\e138";
-}
-.glyphicon-briefcase:before {
-  content: "\e139";
-}
-.glyphicon-fullscreen:before {
-  content: "\e140";
-}
-.glyphicon-dashboard:before {
-  content: "\e141";
-}
-.glyphicon-paperclip:before {
-  content: "\e142";
-}
-.glyphicon-heart-empty:before {
-  content: "\e143";
-}
-.glyphicon-link:before {
-  content: "\e144";
-}
-.glyphicon-phone:before {
-  content: "\e145";
-}
-.glyphicon-pushpin:before {
-  content: "\e146";
-}
-.glyphicon-usd:before {
-  content: "\e148";
-}
-.glyphicon-gbp:before {
-  content: "\e149";
-}
-.glyphicon-sort:before {
-  content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
-  content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
-  content: "\e152";
-}
-.glyphicon-sort-by-order:before {
-  content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
-  content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
-  content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
-  content: "\e156";
-}
-.glyphicon-unchecked:before {
-  content: "\e157";
-}
-.glyphicon-expand:before {
-  content: "\e158";
-}
-.glyphicon-collapse-down:before {
-  content: "\e159";
-}
-.glyphicon-collapse-up:before {
-  content: "\e160";
-}
-.glyphicon-log-in:before {
-  content: "\e161";
-}
-.glyphicon-flash:before {
-  content: "\e162";
-}
-.glyphicon-log-out:before {
-  content: "\e163";
-}
-.glyphicon-new-window:before {
-  content: "\e164";
-}
-.glyphicon-record:before {
-  content: "\e165";
-}
-.glyphicon-save:before {
-  content: "\e166";
-}
-.glyphicon-open:before {
-  content: "\e167";
-}
-.glyphicon-saved:before {
-  content: "\e168";
-}
-.glyphicon-import:before {
-  content: "\e169";
-}
-.glyphicon-export:before {
-  content: "\e170";
-}
-.glyphicon-send:before {
-  content: "\e171";
-}
-.glyphicon-floppy-disk:before {
-  content: "\e172";
-}
-.glyphicon-floppy-saved:before {
-  content: "\e173";
-}
-.glyphicon-floppy-remove:before {
-  content: "\e174";
-}
-.glyphicon-floppy-save:before {
-  content: "\e175";
-}
-.glyphicon-floppy-open:before {
-  content: "\e176";
-}
-.glyphicon-credit-card:before {
-  content: "\e177";
-}
-.glyphicon-transfer:before {
-  content: "\e178";
-}
-.glyphicon-cutlery:before {
-  content: "\e179";
-}
-.glyphicon-header:before {
-  content: "\e180";
-}
-.glyphicon-compressed:before {
-  content: "\e181";
-}
-.glyphicon-earphone:before {
-  content: "\e182";
-}
-.glyphicon-phone-alt:before {
-  content: "\e183";
-}
-.glyphicon-tower:before {
-  content: "\e184";
-}
-.glyphicon-stats:before {
-  content: "\e185";
-}
-.glyphicon-sd-video:before {
-  content: "\e186";
-}
-.glyphicon-hd-video:before {
-  content: "\e187";
-}
-.glyphicon-subtitles:before {
-  content: "\e188";
-}
-.glyphicon-sound-stereo:before {
-  content: "\e189";
-}
-.glyphicon-sound-dolby:before {
-  content: "\e190";
-}
-.glyphicon-sound-5-1:before {
-  content: "\e191";
-}
-.glyphicon-sound-6-1:before {
-  content: "\e192";
-}
-.glyphicon-sound-7-1:before {
-  content: "\e193";
-}
-.glyphicon-copyright-mark:before {
-  content: "\e194";
-}
-.glyphicon-registration-mark:before {
-  content: "\e195";
-}
-.glyphicon-cloud-download:before {
-  content: "\e197";
-}
-.glyphicon-cloud-upload:before {
-  content: "\e198";
-}
-.glyphicon-tree-conifer:before {
-  content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
-  content: "\e200";
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px solid;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-}
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle:focus {
-  outline: 0;
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  font-size: 14px;
-  list-style: none;
-  background-color: #fff;
-  background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, .15);
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 1.42857143;
-  color: #333;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  color: #262626;
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #fff;
-  text-decoration: none;
-  background-color: #428bca;
-  outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #999;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
-  display: block;
-}
-.open > a {
-  outline: 0;
-}
-.dropdown-menu-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu-left {
-  right: auto;
-  left: 0;
-}
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 12px;
-  line-height: 1.42857143;
-  color: #999;
-}
-.dropdown-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 990;
-}
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  content: "";
-  border-top: 0;
-  border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    right: 0;
-    left: auto;
-  }
-  .navbar-right .dropdown-menu-left {
-    right: auto;
-    left: 0;
-  }
-}
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
-  position: relative;
-  float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
-  z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
-  outline: none;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
-  margin-left: -1px;
-}
-.btn-toolbar {
-  margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
-  float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
-  margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-.btn-group > .btn:first-child {
-  margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
-  float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
-  padding-right: 8px;
-  padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
-  padding-right: 12px;
-  padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn .caret {
-  margin-left: 0;
-}
-.btn-lg .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
-  border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
-  display: block;
-  float: none;
-  width: 100%;
-  max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
-  float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
-  margin-top: -1px;
-  margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-  border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
-  display: table-cell;
-  float: none;
-  width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
-  width: 100%;
-}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
-  display: none;
-}
-.input-group {
-  position: relative;
-  display: table;
-  border-collapse: separate;
-}
-.input-group[class*="col-"] {
-  float: none;
-  padding-right: 0;
-  padding-left: 0;
-}
-.input-group .form-control {
-  position: relative;
-  z-index: 2;
-  float: left;
-  width: 100%;
-  margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
-  height: 46px;
-  line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-  display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
-  width: 1%;
-  white-space: nowrap;
-  vertical-align: middle;
-}
-.input-group-addon {
-  padding: 6px 12px;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1;
-  color: #555;
-  text-align: center;
-  background-color: #eee;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-}
-.input-group-addon.input-sm {
-  padding: 5px 10px;
-  font-size: 12px;
-  border-radius: 3px;
-}
-.input-group-addon.input-lg {
-  padding: 10px 16px;
-  font-size: 18px;
-  border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
-  margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
-  border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
-  border-left: 0;
-}
-.input-group-btn {
-  position: relative;
-  font-size: 0;
-  white-space: nowrap;
-}
-.input-group-btn > .btn {
-  position: relative;
-}
-.input-group-btn > .btn + .btn {
-  margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
-  z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
-  margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
-  margin-left: -1px;
-}
-.nav {
-  padding-left: 0;
-  margin-bottom: 0;
-  list-style: none;
-}
-.nav > li {
-  position: relative;
-  display: block;
-}
-.nav > li > a {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: #eee;
-}
-.nav > li.disabled > a {
-  color: #999;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
-  color: #999;
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
-  background-color: #eee;
-  border-color: #428bca;
-}
-.nav .nav-divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.nav > li > a > img {
-  max-width: none;
-}
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
-  float: left;
-  margin-bottom: -1px;
-}
-.nav-tabs > li > a {
-  margin-right: 2px;
-  line-height: 1.42857143;
-  border: 1px solid transparent;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
-  border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
-  color: #555;
-  cursor: default;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
-  width: 100%;
-  border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
-  float: none;
-}
-.nav-tabs.nav-justified > li > a {
-  margin-bottom: 5px;
-  text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-tabs.nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs.nav-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs.nav-justified > .active > a,
-  .nav-tabs.nav-justified > .active > a:hover,
-  .nav-tabs.nav-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.nav-pills > li {
-  float: left;
-}
-.nav-pills > li > a {
-  border-radius: 4px;
-}
-.nav-pills > li + li {
-  margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
-  color: #fff;
-  background-color: #428bca;
-}
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li + li {
-  margin-top: 2px;
-  margin-left: 0;
-}
-.nav-justified {
-  width: 100%;
-}
-.nav-justified > li {
-  float: none;
-}
-.nav-justified > li > a {
-  margin-bottom: 5px;
-  text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs-justified {
-  border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs-justified > .active > a,
-  .nav-tabs-justified > .active > a:hover,
-  .nav-tabs-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.tab-content > .tab-pane {
-  display: none;
-}
-.tab-content > .active {
-  display: block;
-}
-.nav-tabs .dropdown-menu {
-  margin-top: -1px;
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.navbar {
-  position: relative;
-  min-height: 50px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-}
-@media (min-width: 768px) {
-  .navbar {
-    border-radius: 4px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left;
-  }
-}
-.navbar-collapse {
-  max-height: 340px;
-  padding-right: 15px;
-  padding-left: 15px;
-  overflow-x: visible;
-  -webkit-overflow-scrolling: touch;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
-  overflow-y: auto;
-}
-@media (min-width: 768px) {
-  .navbar-collapse {
-    width: auto;
-    border-top: 0;
-    box-shadow: none;
-  }
-  .navbar-collapse.collapse {
-    display: block !important;
-    height: auto !important;
-    padding-bottom: 0;
-    overflow: visible !important;
-  }
-  .navbar-collapse.in {
-    overflow-y: visible;
-  }
-  .navbar-fixed-top .navbar-collapse,
-  .navbar-static-top .navbar-collapse,
-  .navbar-fixed-bottom .navbar-collapse {
-    padding-right: 0;
-    padding-left: 0;
-  }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-@media (min-width: 768px) {
-  .container > .navbar-header,
-  .container-fluid > .navbar-header,
-  .container > .navbar-collapse,
-  .container-fluid > .navbar-collapse {
-    margin-right: 0;
-    margin-left: 0;
-  }
-}
-.navbar-static-top {
-  z-index: 1000;
-  border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
-  .navbar-static-top {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-}
-@media (min-width: 768px) {
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top {
-  top: 0;
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
-  bottom: 0;
-  margin-bottom: 0;
-  border-width: 1px 0 0;
-}
-.navbar-brand {
-  float: left;
-  height: 50px;
-  padding: 15px 15px;
-  font-size: 18px;
-  line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
-  text-decoration: none;
-}
-@media (min-width: 768px) {
-  .navbar > .container .navbar-brand,
-  .navbar > .container-fluid .navbar-brand {
-    margin-left: -15px;
-  }
-}
-.navbar-toggle {
-  position: relative;
-  float: right;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-right: 15px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.navbar-toggle:focus {
-  outline: none;
-}
-.navbar-toggle .icon-bar {
-  display: block;
-  width: 22px;
-  height: 2px;
-  border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
-  margin-top: 4px;
-}
-@media (min-width: 768px) {
-  .navbar-toggle {
-    display: none;
-  }
-}
-.navbar-nav {
-  margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  line-height: 20px;
-}
-@media (max-width: 767px) {
-  .navbar-nav .open .dropdown-menu {
-    position: static;
-    float: none;
-    width: auto;
-    margin-top: 0;
-    background-color: transparent;
-    border: 0;
-    box-shadow: none;
-  }
-  .navbar-nav .open .dropdown-menu > li > a,
-  .navbar-nav .open .dropdown-menu .dropdown-header {
-    padding: 5px 15px 5px 25px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a {
-    line-height: 20px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-nav .open .dropdown-menu > li > a:focus {
-    background-image: none;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-nav {
-    float: left;
-    margin: 0;
-  }
-  .navbar-nav > li {
-    float: left;
-  }
-  .navbar-nav > li > a {
-    padding-top: 15px;
-    padding-bottom: 15px;
-  }
-  .navbar-nav.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important;
-  }
-  .navbar-right {
-    float: right !important;
-  }
-}
-.navbar-form {
-  padding: 10px 15px;
-  margin-top: 8px;
-  margin-right: -15px;
-  margin-bottom: 8px;
-  margin-left: -15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
-  .navbar-form .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .navbar-form .input-group > .form-control {
-    width: 100%;
-  }
-  .navbar-form .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio,
-  .navbar-form .checkbox {
-    display: inline-block;
-    padding-left: 0;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio input[type="radio"],
-  .navbar-form .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-  .navbar-form .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-@media (max-width: 767px) {
-  .navbar-form .form-group {
-    margin-bottom: 5px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-form {
-    width: auto;
-    padding-top: 0;
-    padding-bottom: 0;
-    margin-right: 0;
-    margin-left: 0;
-    border: 0;
-    -webkit-box-shadow: none;
-            box-shadow: none;
-  }
-  .navbar-form.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.navbar-btn {
-  margin-top: 8px;
-  margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
-  margin-top: 14px;
-  margin-bottom: 14px;
-}
-.navbar-text {
-  margin-top: 15px;
-  margin-bottom: 15px;
-}
-@media (min-width: 768px) {
-  .navbar-text {
-    float: left;
-    margin-right: 15px;
-    margin-left: 15px;
-  }
-  .navbar-text.navbar-right:last-child {
-    margin-right: 0;
-  }
-}
-.navbar-default {
-  background-color: #f8f8f8;
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
-  color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
-  color: #5e5e5e;
-  background-color: transparent;
-}
-.navbar-default .navbar-text {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
-  color: #333;
-  background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
-  color: #555;
-  background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
-  color: #ccc;
-  background-color: transparent;
-}
-.navbar-default .navbar-toggle {
-  border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
-  background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
-  background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
-  color: #555;
-  background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
-    color: #777;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #333;
-    background-color: transparent;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #555;
-    background-color: #e7e7e7;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #ccc;
-    background-color: transparent;
-  }
-}
-.navbar-default .navbar-link {
-  color: #777;
-}
-.navbar-default .navbar-link:hover {
-  color: #333;
-}
-.navbar-inverse {
-  background-color: #222;
-  border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
-  color: #999;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-text {
-  color: #999;
-}
-.navbar-inverse .navbar-nav > li > a {
-  color: #999;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
-  color: #fff;
-  background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
-  color: #444;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
-  border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
-  background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
-  background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
-  border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
-  color: #fff;
-  background-color: #080808;
-}
-@media (max-width: 767px) {
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-    border-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-    color: #999;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #fff;
-    background-color: transparent;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #fff;
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #444;
-    background-color: transparent;
-  }
-}
-.navbar-inverse .navbar-link {
-  color: #999;
-}
-.navbar-inverse .navbar-link:hover {
-  color: #fff;
-}
-.breadcrumb {
-  padding: 8px 15px;
-  margin-bottom: 20px;
-  list-style: none;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-}
-.breadcrumb > li {
-  display: inline-block;
-}
-.breadcrumb > li + li:before {
-  padding: 0 5px;
-  color: #ccc;
-  content: "/\00a0";
-}
-.breadcrumb > .active {
-  color: #999;
-}
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 20px 0;
-  border-radius: 4px;
-}
-.pagination > li {
-  display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
-  position: relative;
-  float: left;
-  padding: 6px 12px;
-  margin-left: -1px;
-  line-height: 1.42857143;
-  color: #428bca;
-  text-decoration: none;
-  background-color: #fff;
-  border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
-  margin-left: 0;
-  border-top-left-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
-  color: #2a6496;
-  background-color: #eee;
-  border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
-  z-index: 2;
-  color: #fff;
-  cursor: default;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
-  color: #999;
-  cursor: not-allowed;
-  background-color: #fff;
-  border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-top-left-radius: 6px;
-  border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-top-right-radius: 6px;
-  border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-top-left-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-top-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-.pager {
-  padding-left: 0;
-  margin: 20px 0;
-  text-align: center;
-  list-style: none;
-}
-.pager li {
-  display: inline;
-}
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
-  color: #999;
-  cursor: not-allowed;
-  background-color: #fff;
-}
-.label {
-  display: inline;
-  padding: .2em .6em .3em;
-  font-size: 75%;
-  font-weight: bold;
-  line-height: 1;
-  color: #fff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  border-radius: .25em;
-}
-.label[href]:hover,
-.label[href]:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer;
-}
-.label:empty {
-  display: none;
-}
-.btn .label {
-  position: relative;
-  top: -1px;
-}
-.label-default {
-  background-color: #999;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
-  background-color: #808080;
-}
-.label-primary {
-  background-color: #428bca;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
-  background-color: #3071a9;
-}
-.label-success {
-  background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
-  background-color: #449d44;
-}
-.label-info {
-  background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
-  background-color: #31b0d5;
-}
-.label-warning {
-  background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
-  background-color: #ec971f;
-}
-.label-danger {
-  background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
-  background-color: #c9302c;
-}
-.badge {
-  display: inline-block;
-  min-width: 10px;
-  padding: 3px 7px;
-  font-size: 12px;
-  font-weight: bold;
-  line-height: 1;
-  color: #fff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  background-color: #999;
-  border-radius: 10px;
-}
-.badge:empty {
-  display: none;
-}
-.btn .badge {
-  position: relative;
-  top: -1px;
-}
-.btn-xs .badge {
-  top: 0;
-  padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer;
-}
-a.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
-  color: #428bca;
-  background-color: #fff;
-}
-.nav-pills > li > a > .badge {
-  margin-left: 3px;
-}
-.jumbotron {
-  padding: 30px;
-  margin-bottom: 30px;
-  color: inherit;
-  background-color: #eee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
-  color: inherit;
-}
-.jumbotron p {
-  margin-bottom: 15px;
-  font-size: 21px;
-  font-weight: 200;
-}
-.container .jumbotron {
-  border-radius: 6px;
-}
-.jumbotron .container {
-  max-width: 100%;
-}
-@media screen and (min-width: 768px) {
-  .jumbotron {
-    padding-top: 48px;
-    padding-bottom: 48px;
-  }
-  .container .jumbotron {
-    padding-right: 60px;
-    padding-left: 60px;
-  }
-  .jumbotron h1,
-  .jumbotron .h1 {
-    font-size: 63px;
-  }
-}
-.thumbnail {
-  display: block;
-  padding: 4px;
-  margin-bottom: 20px;
-  line-height: 1.42857143;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all .2s ease-in-out;
-          transition: all .2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
-  margin-right: auto;
-  margin-left: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
-  border-color: #428bca;
-}
-.thumbnail .caption {
-  padding: 9px;
-  color: #333;
-}
-.alert {
-  padding: 15px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.alert h4 {
-  margin-top: 0;
-  color: inherit;
-}
-.alert .alert-link {
-  font-weight: bold;
-}
-.alert > p,
-.alert > ul {
-  margin-bottom: 0;
-}
-.alert > p + p {
-  margin-top: 5px;
-}
-.alert-dismissable {
-  padding-right: 35px;
-}
-.alert-dismissable .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  color: inherit;
-}
-.alert-success {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-.alert-success hr {
-  border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
-  color: #2b542c;
-}
-.alert-info {
-  color: #31708f;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-.alert-info hr {
-  border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
-  color: #245269;
-}
-.alert-warning {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-}
-.alert-warning hr {
-  border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
-  color: #66512c;
-}
-.alert-danger {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #ebccd1;
-}
-.alert-danger hr {
-  border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
-  color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-.progress {
-  height: 20px;
-  margin-bottom: 20px;
-  overflow: hidden;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-}
-.progress-bar {
-  float: left;
-  width: 0;
-  height: 100%;
-  font-size: 12px;
-  line-height: 20px;
-  color: #fff;
-  text-align: center;
-  background-color: #428bca;
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
-          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
-  -webkit-transition: width .6s ease;
-          transition: width .6s ease;
-}
-.progress-striped .progress-bar {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-size: 40px 40px;
-}
-.progress.active .progress-bar {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-          animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar-success {
-  background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
-  background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
-  background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
-  background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.media,
-.media-body {
-  overflow: hidden;
-  zoom: 1;
-}
-.media,
-.media .media {
-  margin-top: 15px;
-}
-.media:first-child {
-  margin-top: 0;
-}
-.media-object {
-  display: block;
-}
-.media-heading {
-  margin: 0 0 5px;
-}
-.media > .pull-left {
-  margin-right: 10px;
-}
-.media > .pull-right {
-  margin-left: 10px;
-}
-.media-list {
-  padding-left: 0;
-  list-style: none;
-}
-.list-group {
-  padding-left: 0;
-  margin-bottom: 20px;
-}
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-  margin-bottom: -1px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-}
-.list-group-item:first-child {
-  border-top-left-radius: 4px;
-  border-top-right-radius: 4px;
-}
-.list-group-item:last-child {
-  margin-bottom: 0;
-  border-bottom-right-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-.list-group-item > .badge {
-  float: right;
-}
-.list-group-item > .badge + .badge {
-  margin-right: 5px;
-}
-a.list-group-item {
-  color: #555;
-}
-a.list-group-item .list-group-item-heading {
-  color: #333;
-}
-a.list-group-item:hover,
-a.list-group-item:focus {
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-a.list-group-item.active,
-a.list-group-item.active:hover,
-a.list-group-item.active:focus {
-  z-index: 2;
-  color: #fff;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-a.list-group-item.active .list-group-item-heading,
-a.list-group-item.active:hover .list-group-item-heading,
-a.list-group-item.active:focus .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item.active .list-group-item-text,
-a.list-group-item.active:hover .list-group-item-text,
-a.list-group-item.active:focus .list-group-item-text {
-  color: #e1edf7;
-}
-.list-group-item-success {
-  color: #3c763d;
-  background-color: #dff0d8;
-}
-a.list-group-item-success {
-  color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
-  color: #3c763d;
-  background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
-  color: #fff;
-  background-color: #3c763d;
-  border-color: #3c763d;
-}
-.list-group-item-info {
-  color: #31708f;
-  background-color: #d9edf7;
-}
-a.list-group-item-info {
-  color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
-  color: #31708f;
-  background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
-  color: #fff;
-  background-color: #31708f;
-  border-color: #31708f;
-}
-.list-group-item-warning {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-}
-a.list-group-item-warning {
-  color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
-  color: #8a6d3b;
-  background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
-  color: #fff;
-  background-color: #8a6d3b;
-  border-color: #8a6d3b;
-}
-.list-group-item-danger {
-  color: #a94442;
-  background-color: #f2dede;
-}
-a.list-group-item-danger {
-  color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
-  color: #a94442;
-  background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
-  color: #fff;
-  background-color: #a94442;
-  border-color: #a94442;
-}
-.list-group-item-heading {
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-.list-group-item-text {
-  margin-bottom: 0;
-  line-height: 1.3;
-}
-.panel {
-  margin-bottom: 20px;
-  background-color: #fff;
-  border: 1px solid transparent;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-}
-.panel-body {
-  padding: 15px;
-}
-.panel-heading {
-  padding: 10px 15px;
-  border-bottom: 1px solid transparent;
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
-  color: inherit;
-}
-.panel-title {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: 16px;
-  color: inherit;
-}
-.panel-title > a {
-  color: inherit;
-}
-.panel-footer {
-  padding: 10px 15px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel > .list-group {
-  margin-bottom: 0;
-}
-.panel > .list-group .list-group-item {
-  border-width: 1px 0;
-  border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child {
-  border-top: 0;
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child {
-  border-bottom: 0;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel-heading + .list-group .list-group-item:first-child {
-  border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table {
-  margin-bottom: 0;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
-  border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
-  border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
-  border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
-  border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive {
-  border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
-  border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
-  border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-  border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-  border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
-  border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
-  border-bottom: 0;
-}
-.panel > .table-responsive {
-  margin-bottom: 0;
-  border: 0;
-}
-.panel-group {
-  margin-bottom: 20px;
-}
-.panel-group .panel {
-  margin-bottom: 0;
-  overflow: hidden;
-  border-radius: 4px;
-}
-.panel-group .panel + .panel {
-  margin-top: 5px;
-}
-.panel-group .panel-heading {
-  border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse .panel-body {
-  border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
-  border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
-  border-bottom: 1px solid #ddd;
-}
-.panel-default {
-  border-color: #ddd;
-}
-.panel-default > .panel-heading {
-  color: #333;
-  background-color: #f5f5f5;
-  border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #ddd;
-}
-.panel-default > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #ddd;
-}
-.panel-primary {
-  border-color: #428bca;
-}
-.panel-primary > .panel-heading {
-  color: #fff;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-.panel-primary > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #428bca;
-}
-.panel-primary > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #428bca;
-}
-.panel-success {
-  border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #d6e9c6;
-}
-.panel-success > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #d6e9c6;
-}
-.panel-info {
-  border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
-  color: #31708f;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #bce8f1;
-}
-.panel-info > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #bce8f1;
-}
-.panel-warning {
-  border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #faebcc;
-}
-.panel-warning > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #faebcc;
-}
-.panel-danger {
-  border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse .panel-body {
-  border-top-color: #ebccd1;
-}
-.panel-danger > .panel-footer + .panel-collapse .panel-body {
-  border-bottom-color: #ebccd1;
-}
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-}
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, .15);
-}
-.well-lg {
-  padding: 24px;
-  border-radius: 6px;
-}
-.well-sm {
-  padding: 9px;
-  border-radius: 3px;
-}
-.close {
-  float: right;
-  font-size: 21px;
-  font-weight: bold;
-  line-height: 1;
-  color: #000;
-  text-shadow: 0 1px 0 #fff;
-  filter: alpha(opacity=20);
-  opacity: .2;
-}
-.close:hover,
-.close:focus {
-  color: #000;
-  text-decoration: none;
-  cursor: pointer;
-  filter: alpha(opacity=50);
-  opacity: .5;
-}
-button.close {
-  -webkit-appearance: none;
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-}
-.modal-open {
-  overflow: hidden;
-}
-.modal {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1050;
-  display: none;
-  overflow: auto;
-  overflow-y: scroll;
-  -webkit-overflow-scrolling: touch;
-  outline: 0;
-}
-.modal.fade .modal-dialog {
-  -webkit-transition: -webkit-transform .3s ease-out;
-     -moz-transition:    -moz-transform .3s ease-out;
-       -o-transition:      -o-transform .3s ease-out;
-          transition:         transform .3s ease-out;
-  -webkit-transform: translate(0, -25%);
-      -ms-transform: translate(0, -25%);
-          transform: translate(0, -25%);
-}
-.modal.in .modal-dialog {
-  -webkit-transform: translate(0, 0);
-      -ms-transform: translate(0, 0);
-          transform: translate(0, 0);
-}
-.modal-dialog {
-  position: relative;
-  width: auto;
-  margin: 10px;
-}
-.modal-content {
-  position: relative;
-  background-color: #fff;
-  background-clip: padding-box;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, .2);
-  border-radius: 6px;
-  outline: none;
-  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-}
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000;
-}
-.modal-backdrop.fade {
-  filter: alpha(opacity=0);
-  opacity: 0;
-}
-.modal-backdrop.in {
-  filter: alpha(opacity=50);
-  opacity: .5;
-}
-.modal-header {
-  min-height: 16.42857143px;
-  padding: 15px;
-  border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
-  margin-top: -2px;
-}
-.modal-title {
-  margin: 0;
-  line-height: 1.42857143;
-}
-.modal-body {
-  position: relative;
-  padding: 20px;
-}
-.modal-footer {
-  padding: 19px 20px 20px;
-  margin-top: 15px;
-  text-align: right;
-  border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
-  margin-bottom: 0;
-  margin-left: 5px;
-}
-.modal-footer .btn-group .btn + .btn {
-  margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .modal-dialog {
-    width: 600px;
-    margin: 30px auto;
-  }
-  .modal-content {
-    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
-            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
-  }
-  .modal-sm {
-    width: 300px;
-  }
-}
-@media (min-width: 992px) {
-  .modal-lg {
-    width: 900px;
-  }
-}
-.tooltip {
-  position: absolute;
-  z-index: 1030;
-  display: block;
-  font-size: 12px;
-  line-height: 1.4;
-  visibility: visible;
-  filter: alpha(opacity=0);
-  opacity: 0;
-}
-.tooltip.in {
-  filter: alpha(opacity=90);
-  opacity: .9;
-}
-.tooltip.top {
-  padding: 5px 0;
-  margin-top: -3px;
-}
-.tooltip.right {
-  padding: 0 5px;
-  margin-left: 3px;
-}
-.tooltip.bottom {
-  padding: 5px 0;
-  margin-top: 3px;
-}
-.tooltip.left {
-  padding: 0 5px;
-  margin-left: -3px;
-}
-.tooltip-inner {
-  max-width: 200px;
-  padding: 3px 8px;
-  color: #fff;
-  text-align: center;
-  text-decoration: none;
-  background-color: #000;
-  border-radius: 4px;
-}
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000;
-}
-.tooltip.top-left .tooltip-arrow {
-  bottom: 0;
-  left: 5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000;
-}
-.tooltip.top-right .tooltip-arrow {
-  right: 5px;
-  bottom: 0;
-  border-width: 5px 5px 0;
-  border-top-color: #000;
-}
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-width: 5px 5px 5px 0;
-  border-right-color: #000;
-}
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-width: 5px 0 5px 5px;
-  border-left-color: #000;
-}
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000;
-}
-.tooltip.bottom-left .tooltip-arrow {
-  top: 0;
-  left: 5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000;
-}
-.tooltip.bottom-right .tooltip-arrow {
-  top: 0;
-  right: 5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000;
-}
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1010;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  text-align: left;
-  white-space: normal;
-  background-color: #fff;
-  background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, .2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-}
-.popover.top {
-  margin-top: -10px;
-}
-.popover.right {
-  margin-left: 10px;
-}
-.popover.bottom {
-  margin-top: 10px;
-}
-.popover.left {
-  margin-left: -10px;
-}
-.popover-title {
-  padding: 8px 14px;
-  margin: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 18px;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
-  border-radius: 5px 5px 0 0;
-}
-.popover-content {
-  padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.popover > .arrow {
-  border-width: 11px;
-}
-.popover > .arrow:after {
-  content: "";
-  border-width: 10px;
-}
-.popover.top > .arrow {
-  bottom: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-top-color: #999;
-  border-top-color: rgba(0, 0, 0, .25);
-  border-bottom-width: 0;
-}
-.popover.top > .arrow:after {
-  bottom: 1px;
-  margin-left: -10px;
-  content: " ";
-  border-top-color: #fff;
-  border-bottom-width: 0;
-}
-.popover.right > .arrow {
-  top: 50%;
-  left: -11px;
-  margin-top: -11px;
-  border-right-color: #999;
-  border-right-color: rgba(0, 0, 0, .25);
-  border-left-width: 0;
-}
-.popover.right > .arrow:after {
-  bottom: -10px;
-  left: 1px;
-  content: " ";
-  border-right-color: #fff;
-  border-left-width: 0;
-}
-.popover.bottom > .arrow {
-  top: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-top-width: 0;
-  border-bottom-color: #999;
-  border-bottom-color: rgba(0, 0, 0, .25);
-}
-.popover.bottom > .arrow:after {
-  top: 1px;
-  margin-left: -10px;
-  content: " ";
-  border-top-width: 0;
-  border-bottom-color: #fff;
-}
-.popover.left > .arrow {
-  top: 50%;
-  right: -11px;
-  margin-top: -11px;
-  border-right-width: 0;
-  border-left-color: #999;
-  border-left-color: rgba(0, 0, 0, .25);
-}
-.popover.left > .arrow:after {
-  right: 1px;
-  bottom: -10px;
-  content: " ";
-  border-right-width: 0;
-  border-left-color: #fff;
-}
-.carousel {
-  position: relative;
-}
-.carousel-inner {
-  position: relative;
-  width: 100%;
-  overflow: hidden;
-}
-.carousel-inner > .item {
-  position: relative;
-  display: none;
-  -webkit-transition: .6s ease-in-out left;
-          transition: .6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  line-height: 1;
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  display: block;
-}
-.carousel-inner > .active {
-  left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.carousel-inner > .next {
-  left: 100%;
-}
-.carousel-inner > .prev {
-  left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
-  left: 0;
-}
-.carousel-inner > .active.left {
-  left: -100%;
-}
-.carousel-inner > .active.right {
-  left: 100%;
-}
-.carousel-control {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  width: 15%;
-  font-size: 20px;
-  color: #fff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-  filter: alpha(opacity=50);
-  opacity: .5;
-}
-.carousel-control.left {
-  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
-  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
-  background-repeat: repeat-x;
-}
-.carousel-control.right {
-  right: 0;
-  left: auto;
-  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
-  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
-  background-repeat: repeat-x;
-}
-.carousel-control:hover,
-.carousel-control:focus {
-  color: #fff;
-  text-decoration: none;
-  filter: alpha(opacity=90);
-  outline: none;
-  opacity: .9;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
-  position: absolute;
-  top: 50%;
-  z-index: 5;
-  display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
-  left: 50%;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
-  right: 50%;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
-  width: 20px;
-  height: 20px;
-  margin-top: -10px;
-  margin-left: -10px;
-  font-family: serif;
-}
-.carousel-control .icon-prev:before {
-  content: '\2039';
-}
-.carousel-control .icon-next:before {
-  content: '\203a';
-}
-.carousel-indicators {
-  position: absolute;
-  bottom: 10px;
-  left: 50%;
-  z-index: 15;
-  width: 60%;
-  padding-left: 0;
-  margin-left: -30%;
-  text-align: center;
-  list-style: none;
-}
-.carousel-indicators li {
-  display: inline-block;
-  width: 10px;
-  height: 10px;
-  margin: 1px;
-  text-indent: -999px;
-  cursor: pointer;
-  background-color: #000 \9;
-  background-color: rgba(0, 0, 0, 0);
-  border: 1px solid #fff;
-  border-radius: 10px;
-}
-.carousel-indicators .active {
-  width: 12px;
-  height: 12px;
-  margin: 0;
-  background-color: #fff;
-}
-.carousel-caption {
-  position: absolute;
-  right: 15%;
-  bottom: 20px;
-  left: 15%;
-  z-index: 10;
-  padding-top: 20px;
-  padding-bottom: 20px;
-  color: #fff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-}
-.carousel-caption .btn {
-  text-shadow: none;
-}
-@media screen and (min-width: 768px) {
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .glyphicon-chevron-right,
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next {
-    width: 30px;
-    height: 30px;
-    margin-top: -15px;
-    margin-left: -15px;
-    font-size: 30px;
-  }
-  .carousel-caption {
-    right: 20%;
-    left: 20%;
-    padding-bottom: 30px;
-  }
-  .carousel-indicators {
-    bottom: 20px;
-  }
-}
-.clearfix:before,
-.clearfix:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-footer:before,
-.modal-footer:after {
-  display: table;
-  content: " ";
-}
-.clearfix:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-footer:after {
-  clear: both;
-}
-.center-block {
-  display: block;
-  margin-right: auto;
-  margin-left: auto;
-}
-.pull-right {
-  float: right !important;
-}
-.pull-left {
-  float: left !important;
-}
-.hide {
-  display: none !important;
-}
-.show {
-  display: block !important;
-}
-.invisible {
-  visibility: hidden;
-}
-.text-hide {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-.hidden {
-  display: none !important;
-  visibility: hidden !important;
-}
-.affix {
-  position: fixed;
-}
-@-ms-viewport {
-  width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
-  display: none !important;
-}
-@media (max-width: 767px) {
-  .visible-xs {
-    display: block !important;
-  }
-  table.visible-xs {
-    display: table;
-  }
-  tr.visible-xs {
-    display: table-row !important;
-  }
-  th.visible-xs,
-  td.visible-xs {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm {
-    display: block !important;
-  }
-  table.visible-sm {
-    display: table;
-  }
-  tr.visible-sm {
-    display: table-row !important;
-  }
-  th.visible-sm,
-  td.visible-sm {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md {
-    display: block !important;
-  }
-  table.visible-md {
-    display: table;
-  }
-  tr.visible-md {
-    display: table-row !important;
-  }
-  th.visible-md,
-  td.visible-md {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg {
-    display: block !important;
-  }
-  table.visible-lg {
-    display: table;
-  }
-  tr.visible-lg {
-    display: table-row !important;
-  }
-  th.visible-lg,
-  td.visible-lg {
-    display: table-cell !important;
-  }
-}
-@media (max-width: 767px) {
-  .hidden-xs {
-    display: none !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-sm {
-    display: none !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-md {
-    display: none !important;
-  }
-}
-@media (min-width: 1200px) {
-  .hidden-lg {
-    display: none !important;
-  }
-}
-.visible-print {
-  display: none !important;
-}
-@media print {
-  .visible-print {
-    display: block !important;
-  }
-  table.visible-print {
-    display: table;
-  }
-  tr.visible-print {
-    display: table-row !important;
-  }
-  th.visible-print,
-  td.visible-print {
-    display: table-cell !important;
-  }
-}
-@media print {
-  .hidden-print {
-    display: none !important;
-  }
-}
-/*# sourceMappingURL=bootstrap.css.map */
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.css.map b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.css.map
deleted file mode 100644
index 6bc5a2dc75413860670f9e657d62b64cf15fd195..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/normalize.less","less/print.less","less/scaffolding.less","less/mixins.less","less/variables.less","less/thumbnails.less","less/carousel.less","less/type.less","less/code.less","less/grid.less","less/tables.less","less/forms.less","less/buttons.less","less/button-groups.less","less/component-animations.less","less/glyphicons.less","less/dropdowns.less","less/input-groups.less","less/navs.less","less/navbar.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/pager.less","less/labels.less","less/badges.less","less/jumbotron.less","less/alerts.less","less/progress-bars.less","less/media.less","less/list-group.less","less/panels.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/responsive-utilities.less"],"names":[],"mappings":";AAQA;EACE,uBAAA;EACA,0BAAA;EACA,8BAAA;;AAOF;EACE,SAAA;;AAUF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,cAAA;;AAQF;AACA;AACA;AACA;EACE,qBAAA;EACA,wBAAA;;AAQF,KAAK,IAAI;EACP,aAAA;EACA,SAAA;;AAQF;AACA;EACE,aAAA;;AAUF;EACE,uBAAA;;AAOF,CAAC;AACD,CAAC;EACC,UAAA;;AAUF,IAAI;EACF,yBAAA;;AAOF;AACA;EACE,iBAAA;;AAOF;EACE,kBAAA;;AAQF;EACE,cAAA;EACA,gBAAA;;AAOF;EACE,gBAAA;EACA,WAAA;;AAOF;EACE,cAAA;;AAOF;AACA;EACE,cAAA;EACA,cAAA;EACA,kBAAA;EACA,wBAAA;;AAGF;EACE,WAAA;;AAGF;EACE,eAAA;;AAUF;EACE,SAAA;;AAOF,GAAG,IAAI;EACL,gBAAA;;AAUF;EACE,gBAAA;;AAOF;EACE,4BAAA;EACA,uBAAA;EACA,SAAA;;AAOF;EACE,cAAA;;AAOF;AACA;AACA;AACA;EACE,iCAAA;EACA,cAAA;;AAkBF;AACA;AACA;AACA;AACA;EACE,cAAA;EACA,aAAA;EACA,SAAA;;AAOF;EACE,iBAAA;;AAUF;AACA;EACE,oBAAA;;AAWF;AACA,IAAK,MAAK;AACV,KAAK;AACL,KAAK;EACH,0BAAA;EACA,eAAA;;AAOF,MAAM;AACN,IAAK,MAAK;EACR,eAAA;;AAOF,MAAM;AACN,KAAK;EACH,SAAA;EACA,UAAA;;AAQF;EACE,mBAAA;;AAWF,KAAK;AACL,KAAK;EACH,sBAAA;EACA,UAAA;;AASF,KAAK,eAAe;AACpB,KAAK,eAAe;EAClB,YAAA;;AASF,KAAK;EACH,6BAAA;EACA,4BAAA;EACA,+BAAA;EACA,uBAAA;;AASF,KAAK,eAAe;AACpB,KAAK,eAAe;EAClB,wBAAA;;AAOF;EACE,yBAAA;EACA,aAAA;EACA,8BAAA;;AAQF;EACE,SAAA;EACA,UAAA;;AAOF;EACE,cAAA;;AAQF;EACE,iBAAA;;AAUF;EACE,yBAAA;EACA,iBAAA;;AAGF;AACA;EACE,UAAA;;AChUF;EA9FE;IACE,4BAAA;IACA,sBAAA;IACA,kCAAA;IACA,2BAAA;;EAGF;EACA,CAAC;IACC,0BAAA;;EAGF,CAAC,MAAM;IACL,SAAS,KAAK,WAAW,GAAzB;;EAGF,IAAI,OAAO;IACT,SAAS,KAAK,YAAY,GAA1B;;EAIF,CAAC,qBAAqB;EACtB,CAAC,WAAW;IACV,SAAS,EAAT;;EAGF;EACA;IACE,sBAAA;IACA,wBAAA;;EAGF;IACE,2BAAA;;EAGF;EACA;IACE,wBAAA;;EAGF;IACE,0BAAA;;EAGF;EACA;EACA;IACE,UAAA;IACA,SAAA;;EAGF;EACA;IACE,uBAAA;;EAKF;IACE,2BAAA;;EAIF;IACE,aAAA;;EAEF,MACE;EADF,MAEE;IACE,iCAAA;;EAGJ,IAEE;EADF,OAAQ,OACN;IACE,iCAAA;;EAGJ;IACE,sBAAA;;EAGF;IACE,oCAAA;;EAEF,eACE;EADF,eAEE;IACE,iCAAA;;;ACtFN;ECyOE,8BAAA;EACG,2BAAA;EACK,sBAAA;;ADxOV,CAAC;AACD,CAAC;ECqOC,8BAAA;EACG,2BAAA;EACK,sBAAA;;ADhOV;EACE,gBAAA;EACA,6CAAA;;AAGF;EACE,aEcwB,8CFdxB;EACA,eAAA;EACA,uBAAA;EACA,cAAA;EACA,yBAAA;;AAIF;AACA;AACA;AACA;EACE,oBAAA;EACA,kBAAA;EACA,oBAAA;;AAMF;EACE,cAAA;EACA,qBAAA;;AAEA,CAAC;AACD,CAAC;EACC,cAAA;EACA,0BAAA;;AAGF,CAAC;ECzBD,oBAAA;EAEA,0CAAA;EACA,oBAAA;;ADiCF;EACE,SAAA;;AAMF;EACE,sBAAA;;AAIF;AG1EA,UAUE;AAVF,UAWE,EAAE;ACPJ,eAKE,QAME;AAXJ,eAKE,QAOE,IAAI;EHyWN,cAAA;EACA,eAAA;EACA,YAAA;;AD5SF;EACE,kBAAA;;AAMF;EACE,YAAA;EACA,uBAAA;EACA,yBAAA;EACA,yBAAA;EACA,kBAAA;EC8BA,wCAAA;EACQ,gCAAA;EA+PR,qBAAA;EACA,eAAA;EACA,YAAA;;ADxRF;EACE,kBAAA;;AAMF;EACE,gBAAA;EACA,mBAAA;EACA,SAAA;EACA,6BAAA;;AAQF;EACE,kBAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,gBAAA;EACA,MAAM,gBAAN;EACA,SAAA;;AK5HF;AAAI;AAAI;AAAI;AAAI;AAAI;AACpB;AAAK;AAAK;AAAK;AAAK;AAAK;EACvB,oBAAA;EACA,gBAAA;EACA,gBAAA;EACA,cAAA;;AALF,EAOE;AAPE,EAOF;AAPM,EAON;AAPU,EAOV;AAPc,EAOd;AAPkB,EAOlB;AANF,GAME;AANG,GAMH;AANQ,GAMR;AANa,GAMb;AANkB,GAMlB;AANuB,GAMvB;AAPF,EAQE;AARE,EAQF;AARM,EAQN;AARU,EAQV;AARc,EAQd;AARkB,EAQlB;AAPF,GAOE;AAPG,GAOH;AAPQ,GAOR;AAPa,GAOb;AAPkB,GAOlB;AAPuB,GAOvB;EACE,mBAAA;EACA,cAAA;EACA,cAAA;;AAIJ;AAAI;AACJ;AAAI;AACJ;AAAI;EACF,gBAAA;EACA,mBAAA;;AAJF,EAME;AANE,GAMF;AALF,EAKE;AALE,GAKF;AAJF,EAIE;AAJE,GAIF;AANF,EAOE;AAPE,GAOF;AANF,EAME;AANE,GAMF;AALF,EAKE;AALE,GAKF;EACE,cAAA;;AAGJ;AAAI;AACJ;AAAI;AACJ;AAAI;EACF,gBAAA;EACA,mBAAA;;AAJF,EAME;AANE,GAMF;AALF,EAKE;AALE,GAKF;AAJF,EAIE;AAJE,GAIF;AANF,EAOE;AAPE,GAOF;AANF,EAME;AANE,GAMF;AALF,EAKE;AALE,GAKF;EACE,cAAA;;AAIJ;AAAI;EAAM,eAAA;;AACV;AAAI;EAAM,eAAA;;AACV;AAAI;EAAM,eAAA;;AACV;AAAI;EAAM,eAAA;;AACV;AAAI;EAAM,eAAA;;AACV;AAAI;EAAM,eAAA;;AAMV;EACE,gBAAA;;AAGF;EACE,mBAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;;AAKF,QAHqC;EAGrC;IAFI,eAAA;;;AASJ;AACA;EAAU,cAAA;;AAGV;EAAU,kBAAA;;AAGV;EAAuB,gBAAA;;AACvB;EAAuB,iBAAA;;AACvB;EAAuB,kBAAA;;AACvB;EAAuB,mBAAA;;AAGvB;EACE,cAAA;;AAEF;EJofE,cAAA;;AACA,CAAC,aAAC;EACA,cAAA;;AInfJ;EJifE,cAAA;;AACA,CAAC,aAAC;EACA,cAAA;;AIhfJ;EJ8eE,cAAA;;AACA,CAAC,UAAC;EACA,cAAA;;AI7eJ;EJ2eE,cAAA;;AACA,CAAC,aAAC;EACA,cAAA;;AI1eJ;EJweE,cAAA;;AACA,CAAC,YAAC;EACA,cAAA;;AIneJ;EAGE,WAAA;EJqdA,yBAAA;;AACA,CAAC,WAAC;EACA,yBAAA;;AIpdJ;EJkdE,yBAAA;;AACA,CAAC,WAAC;EACA,yBAAA;;AIjdJ;EJ+cE,yBAAA;;AACA,CAAC,QAAC;EACA,yBAAA;;AI9cJ;EJ4cE,yBAAA;;AACA,CAAC,WAAC;EACA,yBAAA;;AI3cJ;EJycE,yBAAA;;AACA,CAAC,UAAC;EACA,yBAAA;;AIncJ;EACE,mBAAA;EACA,mBAAA;EACA,gCAAA;;AAQF;AACA;EACE,aAAA;EACA,mBAAA;;AAHF,EAIE;AAHF,EAGE;AAJF,EAKE;AAJF,EAIE;EACE,gBAAA;;AAOJ;EACE,eAAA;EACA,gBAAA;;AAIF;EALE,eAAA;EACA,gBAAA;EAMA,iBAAA;;AAFF,YAIE;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;;AAKJ;EACE,aAAA;EACA,mBAAA;;AAEF;AACA;EACE,uBAAA;;AAEF;EACE,iBAAA;;AAEF;EACE,cAAA;;AAwBF,QAhB2C;EACzC,cACE;IACE,WAAA;IACA,YAAA;IACA,WAAA;IACA,iBAAA;IJ1IJ,gBAAA;IACA,uBAAA;IACA,mBAAA;;EImIA,cAQE;IACE,kBAAA;;;AAUN,IAAI;AAEJ,IAAI;EACF,YAAA;EACA,iCAAA;;AAEF;EACE,cAAA;EACA,yBAAA;;AAIF;EACE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,8BAAA;;AAKE,UAHF,EAGG;AAAD,UAFF,GAEG;AAAD,UADF,GACG;EACC,gBAAA;;AAVN,UAgBE;AAhBF,UAiBE;AAjBF,UAkBE;EACE,cAAA;EACA,cAAA;EACA,uBAAA;EACA,cAAA;;AAEA,UARF,OAQG;AAAD,UAPF,MAOG;AAAD,UANF,OAMG;EACC,SAAS,aAAT;;AAQN;AACA,UAAU;EACR,mBAAA;EACA,eAAA;EACA,+BAAA;EACA,cAAA;EACA,iBAAA;;AAME,mBAHF,OAGG;AAAD,UAXM,WAQR,OAGG;AAAD,mBAFF,MAEG;AAAD,UAXM,WASR,MAEG;AAAD,mBADF,OACG;AAAD,UAXM,WAUR,OACG;EAAU,SAAS,EAAT;;AACX,mBAJF,OAIG;AAAD,UAZM,WAQR,OAIG;AAAD,mBAHF,MAGG;AAAD,UAZM,WASR,MAGG;AAAD,mBAFF,OAEG;AAAD,UAZM,WAUR,OAEG;EACC,SAAS,aAAT;;AAMN,UAAU;AACV,UAAU;EACR,SAAS,EAAT;;AAIF;EACE,mBAAA;EACA,kBAAA;EACA,uBAAA;;AC7RF;AACA;AACA;AACA;EACE,sCJkCiD,wBIlCjD;;AAIF;EACE,gBAAA;EACA,cAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;EACA,kBAAA;;AAIF;EACE,gBAAA;EACA,cAAA;EACA,cAAA;EACA,yBAAA;EACA,kBAAA;EACA,8CAAA;;AAIF;EACE,cAAA;EACA,cAAA;EACA,gBAAA;EACA,eAAA;EACA,uBAAA;EACA,qBAAA;EACA,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,yBAAA;EACA,kBAAA;;AAXF,GAcE;EACE,UAAA;EACA,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,6BAAA;EACA,gBAAA;;AAKJ;EACE,iBAAA;EACA,kBAAA;;ACpDF;ENqnBE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;;AMlnBA,QAHmC;EAGnC;IAFE,YAAA;;;AAKF,QAHmC;EAGnC;IAFE,YAAA;;;AAKJ,QAHqC;EAGrC;IAFI,aAAA;;;AAUJ;ENimBE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;;AM3lBF;ENimBE,kBAAA;EACA,mBAAA;;AAqIE;EACE,kBAAA;EAEA,eAAA;EAEA,kBAAA;EACA,mBAAA;;AAgBF;EACE,WAAA;;AAOJ,KAAK,EAAQ,CAAC;EACZ,WAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,mBAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,mBAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,UAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,mBAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,mBAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,UAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,mBAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,mBAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,UAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,mBAAA;;AADF,KAAK,EAAQ,CAAC;EACZ,kBAAA;;AASF,KAAK,EAAQ,MAAM;EACjB,WAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,mBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,mBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,UAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,mBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,mBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,UAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,mBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,mBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,UAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,mBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,SAAA;;AANF,KAAK,EAAQ,MAAM;EACjB,UAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,SAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,SAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,SAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,kBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,iBAAA;;AADF,KAAK,EAAQ,MAAM;EACjB,QAAA;;AASF,KAAK,EAAQ,QAAQ;EACnB,iBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,yBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,yBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,gBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,yBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,yBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,gBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,yBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,yBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,gBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,yBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,wBAAA;;AADF,KAAK,EAAQ,QAAQ;EACnB,eAAA;;AMvvBJ,QALmC;ENouB/B;IACE,WAAA;;EAOJ,KAAK,EAAQ,CAAC;IACZ,WAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,kBAAA;;EASF,KAAK,EAAQ,MAAM;IACjB,WAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EANF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,iBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,QAAA;;EASF,KAAK,EAAQ,QAAQ;IACnB,iBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,wBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,eAAA;;;AM9uBJ,QALmC;EN2tB/B;IACE,WAAA;;EAOJ,KAAK,EAAQ,CAAC;IACZ,WAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,kBAAA;;EASF,KAAK,EAAQ,MAAM;IACjB,WAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EANF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,iBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,QAAA;;EASF,KAAK,EAAQ,QAAQ;IACnB,iBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,wBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,eAAA;;;AMvuBJ,QAHmC;ENktB/B;IACE,WAAA;;EAOJ,KAAK,EAAQ,CAAC;IACZ,WAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,UAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,mBAAA;;EADF,KAAK,EAAQ,CAAC;IACZ,kBAAA;;EASF,KAAK,EAAQ,MAAM;IACjB,WAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,mBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EANF,KAAK,EAAQ,MAAM;IACjB,UAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,SAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,kBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,iBAAA;;EADF,KAAK,EAAQ,MAAM;IACjB,QAAA;;EASF,KAAK,EAAQ,QAAQ;IACnB,iBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,gBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,yBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,wBAAA;;EADF,KAAK,EAAQ,QAAQ;IACnB,eAAA;;;AOtzBJ;EACE,eAAA;EACA,6BAAA;;AAEF;EACE,gBAAA;;AAMF;EACE,WAAA;EACA,mBAAA;;AAFF,MAIE,QAGE,KACE;AARN,MAKE,QAEE,KACE;AARN,MAME,QACE,KACE;AARN,MAIE,QAGE,KAEE;AATN,MAKE,QAEE,KAEE;AATN,MAME,QACE,KAEE;EACE,YAAA;EACA,uBAAA;EACA,mBAAA;EACA,6BAAA;;AAbR,MAkBE,QAAQ,KAAK;EACX,sBAAA;EACA,gCAAA;;AApBJ,MAuBE,UAAU,QAGR,KAAI,YACF;AA3BN,MAwBE,WAAW,QAET,KAAI,YACF;AA3BN,MAyBE,QAAO,YACL,KAAI,YACF;AA3BN,MAuBE,UAAU,QAGR,KAAI,YAEF;AA5BN,MAwBE,WAAW,QAET,KAAI,YAEF;AA5BN,MAyBE,QAAO,YACL,KAAI,YAEF;EACE,aAAA;;AA7BR,MAkCE,QAAQ;EACN,6BAAA;;AAnCJ,MAuCE;EACE,yBAAA;;AAOJ,gBACE,QAGE,KACE;AALN,gBAEE,QAEE,KACE;AALN,gBAGE,QACE,KACE;AALN,gBACE,QAGE,KAEE;AANN,gBAEE,QAEE,KAEE;AANN,gBAGE,QACE,KAEE;EACE,YAAA;;AAWR;EACE,yBAAA;;AADF,eAEE,QAGE,KACE;AANN,eAGE,QAEE,KACE;AANN,eAIE,QACE,KACE;AANN,eAEE,QAGE,KAEE;AAPN,eAGE,QAEE,KAEE;AAPN,eAIE,QACE,KAEE;EACE,yBAAA;;AARR,eAYE,QAAQ,KACN;AAbJ,eAYE,QAAQ,KAEN;EACE,wBAAA;;AAUN,cACE,QAAQ,KAAI,UAAU,KACpB;AAFJ,cACE,QAAQ,KAAI,UAAU,KAEpB;EACE,yBAAA;;AAUN,YACE,QAAQ,KAAI,MACV;AAFJ,YACE,QAAQ,KAAI,MAEV;EACE,yBAAA;;AAUN,KAAM,IAAG;EACP,gBAAA;EACA,WAAA;EACA,qBAAA;;AAKE,KAFF,GAEG;AAAD,KADF,GACG;EACC,gBAAA;EACA,WAAA;EACA,mBAAA;;AP0SJ,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AADP,MAAO,QAAQ,KACb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAIb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AACL,MALK,QAAQ,KAKZ,CAAC,MAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,MAAS;AAAX,MAHK,QAAQ,KAGZ,CAAC,MAAS;AACX,MANK,QAAQ,KAMZ,CAAC,MAAS;AAAX,MALK,QAAQ,KAKZ,CAAC,MAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,MAAS;EACT,yBAAA;;AAMJ,YAAa,QAAQ,KACnB,KAAI,CAAC,MAAQ;AADf,YAAa,QAAQ,KAEnB,KAAI,CAAC,MAAQ;AACb,YAHW,QAAQ,KAGlB,CAAC,MAAQ,MAAO;AACjB,YAJW,QAAQ,KAIlB,CAAC,MAAQ,MAAO;EACf,yBAAA;;AAlBJ,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AADP,MAAO,QAAQ,KACb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAIb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AACL,MALK,QAAQ,KAKZ,CAAC,OAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,OAAS;AAAX,MAHK,QAAQ,KAGZ,CAAC,OAAS;AACX,MANK,QAAQ,KAMZ,CAAC,OAAS;AAAX,MALK,QAAQ,KAKZ,CAAC,OAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,OAAS;EACT,yBAAA;;AAMJ,YAAa,QAAQ,KACnB,KAAI,CAAC,OAAQ;AADf,YAAa,QAAQ,KAEnB,KAAI,CAAC,OAAQ;AACb,YAHW,QAAQ,KAGlB,CAAC,OAAQ,MAAO;AACjB,YAJW,QAAQ,KAIlB,CAAC,OAAQ,MAAO;EACf,yBAAA;;AAlBJ,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AADP,MAAO,QAAQ,KACb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAIb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AACL,MALK,QAAQ,KAKZ,CAAC,IAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,IAAS;AAAX,MAHK,QAAQ,KAGZ,CAAC,IAAS;AACX,MANK,QAAQ,KAMZ,CAAC,IAAS;AAAX,MALK,QAAQ,KAKZ,CAAC,IAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,IAAS;EACT,yBAAA;;AAMJ,YAAa,QAAQ,KACnB,KAAI,CAAC,IAAQ;AADf,YAAa,QAAQ,KAEnB,KAAI,CAAC,IAAQ;AACb,YAHW,QAAQ,KAGlB,CAAC,IAAQ,MAAO;AACjB,YAJW,QAAQ,KAIlB,CAAC,IAAQ,MAAO;EACf,yBAAA;;AAlBJ,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AADP,MAAO,QAAQ,KACb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAIb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AACL,MALK,QAAQ,KAKZ,CAAC,OAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,OAAS;AAAX,MAHK,QAAQ,KAGZ,CAAC,OAAS;AACX,MANK,QAAQ,KAMZ,CAAC,OAAS;AAAX,MALK,QAAQ,KAKZ,CAAC,OAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,OAAS;EACT,yBAAA;;AAMJ,YAAa,QAAQ,KACnB,KAAI,CAAC,OAAQ;AADf,YAAa,QAAQ,KAEnB,KAAI,CAAC,OAAQ;AACb,YAHW,QAAQ,KAGlB,CAAC,OAAQ,MAAO;AACjB,YAJW,QAAQ,KAIlB,CAAC,OAAQ,MAAO;EACf,yBAAA;;AAlBJ,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AADP,MAAO,QAAQ,KACb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAIb,KAAI,CAAC;AAHP,MAAO,QAAQ,KAGb,KAAI,CAAC;AAFP,MAAO,QAAQ,KAEb,KAAI,CAAC;AACL,MALK,QAAQ,KAKZ,CAAC,MAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,MAAS;AAAX,MAHK,QAAQ,KAGZ,CAAC,MAAS;AACX,MANK,QAAQ,KAMZ,CAAC,MAAS;AAAX,MALK,QAAQ,KAKZ,CAAC,MAAS;AAAX,MAJK,QAAQ,KAIZ,CAAC,MAAS;EACT,yBAAA;;AAMJ,YAAa,QAAQ,KACnB,KAAI,CAAC,MAAQ;AADf,YAAa,QAAQ,KAEnB,KAAI,CAAC,MAAQ;AACb,YAHW,QAAQ,KAGlB,CAAC,MAAQ,MAAO;AACjB,YAJW,QAAQ,KAIlB,CAAC,MAAQ,MAAO;EACf,yBAAA;;AOpON,QA/DmC;EACjC;IACE,WAAA;IACA,mBAAA;IACA,kBAAA;IACA,kBAAA;IACA,4CAAA;IACA,yBAAA;IACA,iCAAA;;EAPF,iBAUE;IACE,gBAAA;;EAXJ,iBAUE,SAIE,QAGE,KACE;EAlBR,iBAUE,SAKE,QAEE,KACE;EAlBR,iBAUE,SAME,QACE,KACE;EAlBR,iBAUE,SAIE,QAGE,KAEE;EAnBR,iBAUE,SAKE,QAEE,KAEE;EAnBR,iBAUE,SAME,QACE,KAEE;IACE,mBAAA;;EApBV,iBA2BE;IACE,SAAA;;EA5BJ,iBA2BE,kBAIE,QAGE,KACE,KAAI;EAnCZ,iBA2BE,kBAKE,QAEE,KACE,KAAI;EAnCZ,iBA2BE,kBAME,QACE,KACE,KAAI;EAnCZ,iBA2BE,kBAIE,QAGE,KAEE,KAAI;EApCZ,iBA2BE,kBAKE,QAEE,KAEE,KAAI;EApCZ,iBA2BE,kBAME,QACE,KAEE,KAAI;IACF,cAAA;;EArCV,iBA2BE,kBAIE,QAGE,KAKE,KAAI;EAvCZ,iBA2BE,kBAKE,QAEE,KAKE,KAAI;EAvCZ,iBA2BE,kBAME,QACE,KAKE,KAAI;EAvCZ,iBA2BE,kBAIE,QAGE,KAME,KAAI;EAxCZ,iBA2BE,kBAKE,QAEE,KAME,KAAI;EAxCZ,iBA2BE,kBAME,QACE,KAME,KAAI;IACF,eAAA;;EAzCV,iBA2BE,kBAsBE,QAEE,KAAI,WACF;EApDR,iBA2BE,kBAuBE,QACE,KAAI,WACF;EApDR,iBA2BE,kBAsBE,QAEE,KAAI,WAEF;EArDR,iBA2BE,kBAuBE,QACE,KAAI,WAEF;IACE,gBAAA;;;ACxNZ;EACE,UAAA;EACA,SAAA;EACA,SAAA;EAIA,YAAA;;AAGF;EACE,cAAA;EACA,WAAA;EACA,UAAA;EACA,mBAAA;EACA,eAAA;EACA,oBAAA;EACA,cAAA;EACA,SAAA;EACA,gCAAA;;AAGF;EACE,qBAAA;EACA,kBAAA;EACA,iBAAA;;AAWF,KAAK;ERsMH,8BAAA;EACG,2BAAA;EACK,sBAAA;;AQnMV,KAAK;AACL,KAAK;EACH,eAAA;EACA,kBAAA;;EACA,mBAAA;;AAIF,KAAK;EACH,cAAA;;AAIF,KAAK;EACH,cAAA;EACA,WAAA;;AAIF,MAAM;AACN,MAAM;EACJ,YAAA;;AAIF,KAAK,aAAa;AAClB,KAAK,cAAc;AACnB,KAAK,iBAAiB;ER7CpB,oBAAA;EAEA,0CAAA;EACA,oBAAA;;AQ+CF;EACE,cAAA;EACA,gBAAA;EACA,eAAA;EACA,uBAAA;EACA,cAAA;;AA0BF;EACE,cAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,uBAAA;EACA,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,yBAAA;EACA,kBAAA;ERHA,wDAAA;EACQ,gDAAA;EAKR,8EAAA;EACQ,sEAAA;;AAmwBR,aAAC;EACC,qBAAA;EACA,UAAA;EA5wBF,sFAAA;EACQ,8EAAA;;AAlER,aAAC;EAA+B,cAAA;EACA,UAAA;;AAChC,aAAC;EAA+B,cAAA;;AAChC,aAAC;EAA+B,cAAA;;AQgFhC,aAAC;AACD,aAAC;AACD,QAAQ,UAAW;EACjB,mBAAA;EACA,yBAAA;EACA,UAAA;;AAIF,QAAQ;EACN,YAAA;;AAYJ,KAAK;EACH,wBAAA;;AASF,KAAK;EACH,iBAAA;;AASF;EACE,mBAAA;;AAQF;AACA;EACE,cAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;;AANF,MAOE;AANF,SAME;EACE,eAAA;EACA,mBAAA;EACA,eAAA;;AAGJ,MAAO,MAAK;AACZ,aAAc,MAAK;AACnB,SAAU,MAAK;AACf,gBAAiB,MAAK;EACpB,WAAA;EACA,kBAAA;;AAEF,MAAO;AACP,SAAU;EACR,gBAAA;;AAIF;AACA;EACE,qBAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;;AAEF,aAAc;AACd,gBAAiB;EACf,aAAA;EACA,iBAAA;;AAYA,KANG,cAMF;AAAD,KALG,iBAKF;AAAD,MAAC;AAAD,aAAC;AAAD,SAAC;AAAD,gBAAC;AACD,QAAQ,UAAW,MAPhB;AAOH,QAAQ,UAAW,MANhB;AAMH,QAAQ,UAAW;AAAnB,QAAQ,UAAW;AAAnB,QAAQ,UAAW;AAAnB,QAAQ,UAAW;EACjB,mBAAA;;AAUJ;ERqpBE,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;;AAEA,MAAM;EACJ,YAAA;EACA,iBAAA;;AAGF,QAAQ;AACR,MAAM,UAAU;EACd,YAAA;;AQ9pBJ;ERipBE,YAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;;AAEA,MAAM;EACJ,YAAA;EACA,iBAAA;;AAGF,QAAQ;AACR,MAAM,UAAU;EACd,YAAA;;AQrpBJ;EAEE,kBAAA;;AAFF,aAKE;EACE,qBAAA;;AANJ,aAUE;EACE,kBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,kBAAA;;AAKJ,YRsjBE;AQtjBF,YRujBE;AQvjBF,YRwjBE;AQxjBF,YRyjBE;AQzjBF,YR0jBE;AQ1jBF,YR2jBE;EACE,cAAA;;AQ5jBJ,YR+jBE;EACE,qBAAA;EAvuBF,wDAAA;EACQ,gDAAA;;AAwuBN,YAHF,cAGG;EACC,qBAAA;EA1uBJ,yEAAA;EACQ,iEAAA;;AQsKV,YRykBE;EACE,cAAA;EACA,qBAAA;EACA,yBAAA;;AQ5kBJ,YR+kBE;EACE,cAAA;;AQ7kBJ,YRmjBE;AQnjBF,YRojBE;AQpjBF,YRqjBE;AQrjBF,YRsjBE;AQtjBF,YRujBE;AQvjBF,YRwjBE;EACE,cAAA;;AQzjBJ,YR4jBE;EACE,qBAAA;EAvuBF,wDAAA;EACQ,gDAAA;;AAwuBN,YAHF,cAGG;EACC,qBAAA;EA1uBJ,yEAAA;EACQ,iEAAA;;AQyKV,YRskBE;EACE,cAAA;EACA,qBAAA;EACA,yBAAA;;AQzkBJ,YR4kBE;EACE,cAAA;;AQ1kBJ,URgjBE;AQhjBF,URijBE;AQjjBF,URkjBE;AQljBF,URmjBE;AQnjBF,URojBE;AQpjBF,URqjBE;EACE,cAAA;;AQtjBJ,URyjBE;EACE,qBAAA;EAvuBF,wDAAA;EACQ,gDAAA;;AAwuBN,UAHF,cAGG;EACC,qBAAA;EA1uBJ,yEAAA;EACQ,iEAAA;;AQ4KV,URmkBE;EACE,cAAA;EACA,qBAAA;EACA,yBAAA;;AQtkBJ,URykBE;EACE,cAAA;;AQhkBJ;EACE,gBAAA;;AASF;EACE,cAAA;EACA,eAAA;EACA,mBAAA;EACA,cAAA;;AAoEF,QAjDqC;EAiDrC,YA/CI;IACE,qBAAA;IACA,gBAAA;IACA,sBAAA;;EA4CN,YAxCI;IACE,qBAAA;IACA,WAAA;IACA,sBAAA;;EAqCN,YAlCI,aAAa;IACX,WAAA;;EAiCN,YA9BI;IACE,gBAAA;IACA,sBAAA;;EA4BN,YAtBI;EAsBJ,YArBI;IACE,qBAAA;IACA,aAAA;IACA,gBAAA;IACA,eAAA;IACA,sBAAA;;EAgBN,YAdI,OAAO,MAAK;EAchB,YAbI,UAAU,MAAK;IACb,WAAA;IACA,cAAA;;EAWN,YAJI,cAAc;IACZ,MAAA;;;AAWN,gBAGE;AAHF,gBAIE;AAJF,gBAKE;AALF,gBAME;AANF,gBAOE;EACE,aAAA;EACA,gBAAA;EACA,gBAAA;;AAVJ,gBAcE;AAdF,gBAeE;EACE,gBAAA;;AAhBJ,gBAoBE;ERyOA,kBAAA;EACA,mBAAA;;AQ9PF,gBAwBE;EACE,gBAAA;;AAUF,QANmC;EAMnC,gBALE;IACE,iBAAA;;;AA/BN,gBAuCE,cAAc;EACZ,MAAA;EACA,WAAA;;AC3aJ;EACE,qBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;EACA,sBAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;EACA,mBAAA;ET0gBA,iBAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;EAnSA,yBAAA;EACG,sBAAA;EACC,qBAAA;EACI,iBAAA;;AStON,IAAC;AAAD,IAFD,OAEE;AAAD,IADD,OACE;ETQH,oBAAA;EAEA,0CAAA;EACA,oBAAA;;ASNA,IAAC;AACD,IAAC;EACC,cAAA;EACA,qBAAA;;AAGF,IAAC;AACD,IAAC;EACC,UAAA;EACA,sBAAA;ETmFF,wDAAA;EACQ,gDAAA;;AShFR,IAAC;AACD,IAAC;AACD,QAAQ,UAAW;EACjB,mBAAA;EACA,oBAAA;ET+OF,aAAA;EAGA,yBAAA;EAvKA,wBAAA;EACQ,gBAAA;;ASlEV;ET2bE,cAAA;EACA,yBAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;AACD,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,cAAA;EACA,yBAAA;EACI,qBAAA;;AAEN,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,sBAAA;;AAKA,YAHD;AAGC,YAFD;AAEC,QADM,UAAW;AAEjB,YAJD,SAIE;AAAD,YAHD,UAGE;AAAD,QAFM,UAAW,aAEhB;AACD,YALD,SAKE;AAAD,YAJD,UAIE;AAAD,QAHM,UAAW,aAGhB;AACD,YAND,SAME;AAAD,YALD,UAKE;AAAD,QAJM,UAAW,aAIhB;AACD,YAPD,SAOE;AAAD,YAND,UAME;AAAD,QALM,UAAW,aAKhB;EACC,yBAAA;EACI,qBAAA;;AStdV,YT0dE;EACE,cAAA;EACA,yBAAA;;ASzdJ;ETwbE,cAAA;EACA,yBAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;AACD,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,cAAA;EACA,yBAAA;EACI,qBAAA;;AAEN,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,sBAAA;;AAKA,YAHD;AAGC,YAFD;AAEC,QADM,UAAW;AAEjB,YAJD,SAIE;AAAD,YAHD,UAGE;AAAD,QAFM,UAAW,aAEhB;AACD,YALD,SAKE;AAAD,YAJD,UAIE;AAAD,QAHM,UAAW,aAGhB;AACD,YAND,SAME;AAAD,YALD,UAKE;AAAD,QAJM,UAAW,aAIhB;AACD,YAPD,SAOE;AAAD,YAND,UAME;AAAD,QALM,UAAW,aAKhB;EACC,yBAAA;EACI,qBAAA;;ASndV,YTudE;EACE,cAAA;EACA,yBAAA;;ASrdJ;ETobE,cAAA;EACA,yBAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;AACD,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,cAAA;EACA,yBAAA;EACI,qBAAA;;AAEN,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,sBAAA;;AAKA,YAHD;AAGC,YAFD;AAEC,QADM,UAAW;AAEjB,YAJD,SAIE;AAAD,YAHD,UAGE;AAAD,QAFM,UAAW,aAEhB;AACD,YALD,SAKE;AAAD,YAJD,UAIE;AAAD,QAHM,UAAW,aAGhB;AACD,YAND,SAME;AAAD,YALD,UAKE;AAAD,QAJM,UAAW,aAIhB;AACD,YAPD,SAOE;AAAD,YAND,UAME;AAAD,QALM,UAAW,aAKhB;EACC,yBAAA;EACI,qBAAA;;AS/cV,YTmdE;EACE,cAAA;EACA,yBAAA;;ASjdJ;ETgbE,cAAA;EACA,yBAAA;EACA,qBAAA;;AAEA,SAAC;AACD,SAAC;AACD,SAAC;AACD,SAAC;AACD,KAAM,iBAAgB;EACpB,cAAA;EACA,yBAAA;EACI,qBAAA;;AAEN,SAAC;AACD,SAAC;AACD,KAAM,iBAAgB;EACpB,sBAAA;;AAKA,SAHD;AAGC,SAFD;AAEC,QADM,UAAW;AAEjB,SAJD,SAIE;AAAD,SAHD,UAGE;AAAD,QAFM,UAAW,UAEhB;AACD,SALD,SAKE;AAAD,SAJD,UAIE;AAAD,QAHM,UAAW,UAGhB;AACD,SAND,SAME;AAAD,SALD,UAKE;AAAD,QAJM,UAAW,UAIhB;AACD,SAPD,SAOE;AAAD,SAND,UAME;AAAD,QALM,UAAW,UAKhB;EACC,yBAAA;EACI,qBAAA;;AS3cV,ST+cE;EACE,cAAA;EACA,yBAAA;;AS7cJ;ET4aE,cAAA;EACA,yBAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;AACD,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,cAAA;EACA,yBAAA;EACI,qBAAA;;AAEN,YAAC;AACD,YAAC;AACD,KAAM,iBAAgB;EACpB,sBAAA;;AAKA,YAHD;AAGC,YAFD;AAEC,QADM,UAAW;AAEjB,YAJD,SAIE;AAAD,YAHD,UAGE;AAAD,QAFM,UAAW,aAEhB;AACD,YALD,SAKE;AAAD,YAJD,UAIE;AAAD,QAHM,UAAW,aAGhB;AACD,YAND,SAME;AAAD,YALD,UAKE;AAAD,QAJM,UAAW,aAIhB;AACD,YAPD,SAOE;AAAD,YAND,UAME;AAAD,QALM,UAAW,aAKhB;EACC,yBAAA;EACI,qBAAA;;ASvcV,YT2cE;EACE,cAAA;EACA,yBAAA;;ASzcJ;ETwaE,cAAA;EACA,yBAAA;EACA,qBAAA;;AAEA,WAAC;AACD,WAAC;AACD,WAAC;AACD,WAAC;AACD,KAAM,iBAAgB;EACpB,cAAA;EACA,yBAAA;EACI,qBAAA;;AAEN,WAAC;AACD,WAAC;AACD,KAAM,iBAAgB;EACpB,sBAAA;;AAKA,WAHD;AAGC,WAFD;AAEC,QADM,UAAW;AAEjB,WAJD,SAIE;AAAD,WAHD,UAGE;AAAD,QAFM,UAAW,YAEhB;AACD,WALD,SAKE;AAAD,WAJD,UAIE;AAAD,QAHM,UAAW,YAGhB;AACD,WAND,SAME;AAAD,WALD,UAKE;AAAD,QAJM,UAAW,YAIhB;AACD,WAPD,SAOE;AAAD,WAND,UAME;AAAD,QALM,UAAW,YAKhB;EACC,yBAAA;EACI,qBAAA;;ASncV,WTucE;EACE,cAAA;EACA,yBAAA;;AShcJ;EACE,cAAA;EACA,mBAAA;EACA,eAAA;EACA,gBAAA;;AAEA;AACA,SAAC;AACD,SAAC;AACD,QAAQ,UAAW;EACjB,6BAAA;ET2BF,wBAAA;EACQ,gBAAA;;ASzBR;AACA,SAAC;AACD,SAAC;AACD,SAAC;EACC,yBAAA;;AAEF,SAAC;AACD,SAAC;EACC,cAAA;EACA,0BAAA;EACA,6BAAA;;AAIA,SAFD,UAEE;AAAD,QADM,UAAW,UAChB;AACD,SAHD,UAGE;AAAD,QAFM,UAAW,UAEhB;EACC,cAAA;EACA,qBAAA;;AASN;ACvBA,aAAc;EVubZ,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;;AS/ZF;AC5BA,aAAc;EVwbZ,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;;AS3ZF;ACjCA,aAAc;EVybZ,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;;ASnZF;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,gBAAA;;AAIF,UAAW;EACT,eAAA;;AAOA,KAHG,eAGF;AAAD,KAFG,cAEF;AAAD,KADG,eACF;EACC,WAAA;;AEnJJ;EACE,UAAA;EXqHA,wCAAA;EACQ,gCAAA;;AWpHR,KAAC;EACC,UAAA;;AAIJ;EACE,aAAA;;AACA,SAAC;EACC,cAAA;;AAGJ;EACE,kBAAA;EACA,SAAA;EACA,gBAAA;EXqGA,qCAAA;EACQ,6BAAA;;AYtHV;EACE,aAAa,sBAAb;EACA,qDAAA;EACA,2TAAA;;AAOF;EACE,kBAAA;EACA,QAAA;EACA,qBAAA;EACA,aAAa,sBAAb;EACA,kBAAA;EACA,mBAAA;EACA,cAAA;EACA,mCAAA;EACA,kCAAA;;AAIkC,mBAAC;EAAU,SAAS,KAAT;;AACX,eAAC;EAAU,SAAS,KAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,aAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,aAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,cAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,cAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,cAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,yBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,2BAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,0BAAC;EAAU,SAAS,OAAT;;AACX,4BAAC;EAAU,SAAS,OAAT;;AACX,cAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,6BAAC;EAAU,SAAS,OAAT;;AACX,4BAAC;EAAU,SAAS,OAAT;;AACX,0BAAC;EAAU,SAAS,OAAT;;AACX,4BAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,cAAC;EAAU,SAAS,OAAT;;AACX,cAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,2BAAC;EAAU,SAAS,OAAT;;AACX,+BAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,4BAAC;EAAU,SAAS,OAAT;;AACX,6BAAC;EAAU,SAAS,OAAT;;AACX,iCAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,eAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,wBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,kBAAC;EAAU,SAAS,OAAT;;AACX,iBAAC;EAAU,SAAS,OAAT;;AACX,qBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,gBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,mBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,sBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,oBAAC;EAAU,SAAS,OAAT;;AACX,yBAAC;EAAU,SAAS,OAAT;;AACX,4BAAC;EAAU,SAAS,OAAT;;AACX,yBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,uBAAC;EAAU,SAAS,OAAT;;AACX,yBAAC;EAAU,SAAS,OAAT;;AClO/C;EACE,qBAAA;EACA,QAAA;EACA,SAAA;EACA,gBAAA;EACA,sBAAA;EACA,qBAAA;EACA,mCAAA;EACA,kCAAA;;AAIF;EACE,kBAAA;;AAIF,gBAAgB;EACd,UAAA;;AAIF;EACE,kBAAA;EACA,SAAA;EACA,OAAA;EACA,aAAA;EACA,aAAA;EACA,WAAA;EACA,gBAAA;EACA,cAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,yBAAA;EACA,yBAAA;EACA,qCAAA;EACA,kBAAA;Eb8EA,mDAAA;EACQ,2CAAA;Ea7ER,4BAAA;;AAKA,cAAC;EACC,QAAA;EACA,UAAA;;AAxBJ,cA4BE;EboVA,WAAA;EACA,aAAA;EACA,gBAAA;EACA,yBAAA;;AanXF,cAiCE,KAAK;EACH,cAAA;EACA,iBAAA;EACA,WAAA;EACA,mBAAA;EACA,uBAAA;EACA,cAAA;EACA,mBAAA;;AAMF,cADa,KAAK,IACjB;AACD,cAFa,KAAK,IAEjB;EACC,qBAAA;EACA,cAAA;EACA,yBAAA;;AAMF,cADa,UAAU;AAEvB,cAFa,UAAU,IAEtB;AACD,cAHa,UAAU,IAGtB;EACC,cAAA;EACA,qBAAA;EACA,UAAA;EACA,yBAAA;;AASF,cADa,YAAY;AAEzB,cAFa,YAAY,IAExB;AACD,cAHa,YAAY,IAGxB;EACC,cAAA;;AAKF,cADa,YAAY,IACxB;AACD,cAFa,YAAY,IAExB;EACC,qBAAA;EACA,6BAAA;EACA,sBAAA;EbkPF,mEAAA;EahPE,mBAAA;;AAKJ,KAEE;EACE,cAAA;;AAHJ,KAOE;EACE,UAAA;;AAQJ;EACE,UAAA;EACA,QAAA;;AAQF;EACE,OAAA;EACA,WAAA;;AAIF;EACE,cAAA;EACA,iBAAA;EACA,eAAA;EACA,uBAAA;EACA,cAAA;;AAIF;EACE,eAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;EACA,MAAA;EACA,YAAA;;AAIF,WAAY;EACV,QAAA;EACA,UAAA;;AAQF,OAGE;AAFF,oBAAqB,UAEnB;EACE,aAAA;EACA,wBAAA;EACA,SAAS,EAAT;;AANJ,OASE;AARF,oBAAqB,UAQnB;EACE,SAAA;EACA,YAAA;EACA,kBAAA;;AAsBJ,QAb2C;EACzC,aACE;IAnEF,UAAA;IACA,QAAA;;EAiEA,aAME;IA9DF,OAAA;IACA,WAAA;;;AH7IF;AACA;EACE,kBAAA;EACA,qBAAA;EACA,sBAAA;;AAJF,UAKE;AAJF,mBAIE;EACE,kBAAA;EACA,WAAA;;AAEA,UAJF,OAIG;AAAD,mBAJF,OAIG;AACD,UALF,OAKG;AAAD,mBALF,OAKG;AACD,UANF,OAMG;AAAD,mBANF,OAMG;AACD,UAPF,OAOG;AAAD,mBAPF,OAOG;EACC,UAAA;;AAEF,UAVF,OAUG;AAAD,mBAVF,OAUG;EAEC,aAAA;;AAMN,UACE,KAAK;AADP,UAEE,KAAK;AAFP,UAGE,WAAW;AAHb,UAIE,WAAW;EACT,iBAAA;;AAKJ;EACE,iBAAA;;AADF,YAIE;AAJF,YAKE;EACE,WAAA;;AANJ,YAQE;AARF,YASE;AATF,YAUE;EACE,gBAAA;;AAIJ,UAAW,OAAM,IAAI,cAAc,IAAI,aAAa,IAAI;EACtD,gBAAA;;AAIF,UAAW,OAAM;EACf,cAAA;;AACA,UAFS,OAAM,YAEd,IAAI,aAAa,IAAI;EV2CtB,6BAAA;EACG,0BAAA;;AUvCL,UAAW,OAAM,WAAW,IAAI;AAChC,UAAW,mBAAkB,IAAI;EV6C/B,4BAAA;EACG,yBAAA;;AUzCL,UAAW;EACT,WAAA;;AAEF,UAAW,aAAY,IAAI,cAAc,IAAI,aAAc;EACzD,gBAAA;;AAEF,UAAW,aAAY,YACrB,OAAM;AADR,UAAW,aAAY,YAErB;EVwBA,6BAAA;EACG,0BAAA;;AUrBL,UAAW,aAAY,WAAY,OAAM;EV4BvC,4BAAA;EACG,yBAAA;;AUxBL,UAAW,iBAAgB;AAC3B,UAAU,KAAM;EACd,UAAA;;AAiBF,UAAW,OAAO;EAChB,iBAAA;EACA,kBAAA;;AAEF,UAAW,UAAU;EACnB,kBAAA;EACA,mBAAA;;AAKF,UAAU,KAAM;EVGd,wDAAA;EACQ,gDAAA;;AUAR,UAJQ,KAAM,iBAIb;EVDD,wBAAA;EACQ,gBAAA;;AUOV,IAAK;EACH,cAAA;;AAGF,OAAQ;EACN,uBAAA;EACA,sBAAA;;AAGF,OAAQ,QAAQ;EACd,uBAAA;;AAOF,mBACE;AADF,mBAEE;AAFF,mBAGE,aAAa;EACX,cAAA;EACA,WAAA;EACA,WAAA;EACA,eAAA;;AAPJ,mBAWE,aAEE;EACE,WAAA;;AAdN,mBAkBE,OAAO;AAlBT,mBAmBE,OAAO;AAnBT,mBAoBE,aAAa;AApBf,mBAqBE,aAAa;EACX,gBAAA;EACA,cAAA;;AAKF,mBADkB,OACjB,IAAI,cAAc,IAAI;EACrB,gBAAA;;AAEF,mBAJkB,OAIjB,YAAY,IAAI;EACf,4BAAA;EVvEF,6BAAA;EACC,4BAAA;;AUyED,mBARkB,OAQjB,WAAW,IAAI;EACd,8BAAA;EVnFF,0BAAA;EACC,yBAAA;;AUsFH,mBAAoB,aAAY,IAAI,cAAc,IAAI,aAAc;EAClE,gBAAA;;AAEF,mBAAoB,aAAY,YAAY,IAAI,aAC9C,OAAM;AADR,mBAAoB,aAAY,YAAY,IAAI,aAE9C;EVpFA,6BAAA;EACC,4BAAA;;AUuFH,mBAAoB,aAAY,WAAW,IAAI,cAAe,OAAM;EVhGlE,0BAAA;EACC,yBAAA;;AUwGH;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;;AAJF,oBAKE;AALF,oBAME;EACE,WAAA;EACA,mBAAA;EACA,SAAA;;AATJ,oBAWE,aAAa;EACX,WAAA;;AAMJ,uBAAwB,OAAO,QAAO;AACtC,uBAAwB,OAAO,QAAO;EACpC,aAAA;;AI1NF;EACE,kBAAA;EACA,cAAA;EACA,yBAAA;;AAGA,YAAC;EACC,WAAA;EACA,eAAA;EACA,gBAAA;;AATJ,YAYE;EAGE,kBAAA;EACA,UAAA;EAKA,WAAA;EAEA,WAAA;EACA,gBAAA;;AASJ,eAAgB;AAChB,eAAgB;AAChB,eAAgB,mBAAmB;Edw2BjC,YAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;;AAEA,MAAM,ech3BQ;Adg3Bd,MAAM,ec/2BQ;Ad+2Bd,MAAM,ec92BQ,mBAAmB;Ed+2B/B,YAAA;EACA,iBAAA;;AAGF,QAAQ,ecr3BM;Adq3Bd,QAAQ,ecp3BM;Ado3Bd,QAAQ,ecn3BM,mBAAmB;Ado3BjC,MAAM,UAAU,ect3BF;Ads3Bd,MAAM,UAAU,ecr3BF;Adq3Bd,MAAM,UAAU,ecp3BF,mBAAmB;Edq3B/B,YAAA;;Acp3BJ,eAAgB;AAChB,eAAgB;AAChB,eAAgB,mBAAmB;Edq2BjC,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;;AAEA,MAAM,ec72BQ;Ad62Bd,MAAM,ec52BQ;Ad42Bd,MAAM,ec32BQ,mBAAmB;Ed42B/B,YAAA;EACA,iBAAA;;AAGF,QAAQ,ecl3BM;Adk3Bd,QAAQ,ecj3BM;Adi3Bd,QAAQ,ech3BM,mBAAmB;Adi3BjC,MAAM,UAAU,ecn3BF;Adm3Bd,MAAM,UAAU,ecl3BF;Adk3Bd,MAAM,UAAU,ecj3BF,mBAAmB;Edk3B/B,YAAA;;Ac72BJ;AACA;AACA,YAAa;EACX,mBAAA;;AAEA,kBAAC,IAAI,cAAc,IAAI;AAAvB,gBAAC,IAAI,cAAc,IAAI;AAAvB,YAHW,cAGV,IAAI,cAAc,IAAI;EACrB,gBAAA;;AAIJ;AACA;EACE,SAAA;EACA,mBAAA;EACA,sBAAA;;AAKF;EACE,iBAAA;EACA,eAAA;EACA,mBAAA;EACA,cAAA;EACA,cAAA;EACA,kBAAA;EACA,yBAAA;EACA,yBAAA;EACA,kBAAA;;AAGA,kBAAC;EACC,iBAAA;EACA,eAAA;EACA,kBAAA;;AAEF,kBAAC;EACC,kBAAA;EACA,eAAA;EACA,kBAAA;;AApBJ,kBAwBE,MAAK;AAxBP,kBAyBE,MAAK;EACH,aAAA;;AAKJ,YAAa,cAAa;AAC1B,kBAAkB;AAClB,gBAAgB,YAAa;AAC7B,gBAAgB,YAAa,aAAa;AAC1C,gBAAgB,YAAa;AAC7B,gBAAgB,WAAY,OAAM,IAAI,aAAa,IAAI;AACvD,gBAAgB,WAAY,aAAY,IAAI,aAAc;EdFxD,6BAAA;EACG,0BAAA;;AcIL,kBAAkB;EAChB,eAAA;;AAEF,YAAa,cAAa;AAC1B,kBAAkB;AAClB,gBAAgB,WAAY;AAC5B,gBAAgB,WAAY,aAAa;AACzC,gBAAgB,WAAY;AAC5B,gBAAgB,YAAa,OAAM,IAAI;AACvC,gBAAgB,YAAa,aAAY,IAAI,cAAe;EdN1D,4BAAA;EACG,yBAAA;;AcQL,kBAAkB;EAChB,cAAA;;AAKF;EACE,kBAAA;EAGA,YAAA;EACA,mBAAA;;AALF,gBASE;EACE,kBAAA;;AAVJ,gBASE,OAEE;EACE,iBAAA;;AAGF,gBANF,OAMG;AACD,gBAPF,OAOG;AACD,gBARF,OAQG;EACC,UAAA;;AAKJ,gBAAC,YACC;AADF,gBAAC,YAEC;EACE,kBAAA;;AAGJ,gBAAC,WACC;AADF,gBAAC,WAEC;EACE,iBAAA;;ACtJN;EACE,gBAAA;EACA,eAAA;EACA,gBAAA;;AAHF,IAME;EACE,kBAAA;EACA,cAAA;;AARJ,IAME,KAIE;EACE,kBAAA;EACA,cAAA;EACA,kBAAA;;AACA,IARJ,KAIE,IAIG;AACD,IATJ,KAIE,IAKG;EACC,qBAAA;EACA,yBAAA;;AAKJ,IAhBF,KAgBG,SAAU;EACT,cAAA;;AAEA,IAnBJ,KAgBG,SAAU,IAGR;AACD,IApBJ,KAgBG,SAAU,IAIR;EACC,cAAA;EACA,qBAAA;EACA,6BAAA;EACA,mBAAA;;AAOJ,IADF,MAAM;AAEJ,IAFF,MAAM,IAEH;AACD,IAHF,MAAM,IAGH;EACC,yBAAA;EACA,qBAAA;;AAzCN,IAkDE;EfkVA,WAAA;EACA,aAAA;EACA,gBAAA;EACA,yBAAA;;AevYF,IAyDE,KAAK,IAAI;EACP,eAAA;;AASJ;EACE,gCAAA;;AADF,SAEE;EACE,WAAA;EAEA,mBAAA;;AALJ,SAEE,KAME;EACE,iBAAA;EACA,uBAAA;EACA,6BAAA;EACA,0BAAA;;AACA,SAXJ,KAME,IAKG;EACC,qCAAA;;AAMF,SAlBJ,KAiBG,OAAQ;AAEP,SAnBJ,KAiBG,OAAQ,IAEN;AACD,SApBJ,KAiBG,OAAQ,IAGN;EACC,cAAA;EACA,yBAAA;EACA,yBAAA;EACA,gCAAA;EACA,eAAA;;AAKN,SAAC;EAqDD,WAAA;EA8BA,gBAAA;;AAnFA,SAAC,cAuDD;EACE,WAAA;;AAxDF,SAAC,cAuDD,KAEG;EACC,kBAAA;EACA,kBAAA;;AA3DJ,SAAC,cA+DD,YAAY;EACV,SAAA;EACA,UAAA;;AAYJ,QATqC;EASrC,SA7EG,cAqEC;IACE,mBAAA;IACA,SAAA;;EAMN,SA7EG,cAqEC,KAGE;IACE,gBAAA;;;AAzEN,SAAC,cAqFD,KAAK;EAEH,eAAA;EACA,kBAAA;;AAxFF,SAAC,cA2FD,UAAU;AA3FV,SAAC,cA4FD,UAAU,IAAG;AA5Fb,SAAC,cA6FD,UAAU,IAAG;EACX,yBAAA;;AAcJ,QAXqC;EAWrC,SA5GG,cAkGC,KAAK;IACH,gCAAA;IACA,0BAAA;;EAQN,SA5GG,cAsGC,UAAU;EAMd,SA5GG,cAuGC,UAAU,IAAG;EAKjB,SA5GG,cAwGC,UAAU,IAAG;IACX,4BAAA;;;AAhGN,UACE;EACE,WAAA;;AAFJ,UACE,KAIE;EACE,kBAAA;;AANN,UACE,KAOE;EACE,gBAAA;;AAKA,UAbJ,KAYG,OAAQ;AAEP,UAdJ,KAYG,OAAQ,IAEN;AACD,UAfJ,KAYG,OAAQ,IAGN;EACC,cAAA;EACA,yBAAA;;AAQR,YACE;EACE,WAAA;;AAFJ,YACE,KAEE;EACE,eAAA;EACA,cAAA;;AAYN;EACE,WAAA;;AADF,cAGE;EACE,WAAA;;AAJJ,cAGE,KAEG;EACC,kBAAA;EACA,kBAAA;;AAPN,cAWE,YAAY;EACV,SAAA;EACA,UAAA;;AAYJ,QATqC;EASrC,cARI;IACE,mBAAA;IACA,SAAA;;EAMN,cARI,KAGE;IACE,gBAAA;;;AASR;EACE,gBAAA;;AADF,mBAGE,KAAK;EAEH,eAAA;EACA,kBAAA;;AANJ,mBASE,UAAU;AATZ,mBAUE,UAAU,IAAG;AAVf,mBAWE,UAAU,IAAG;EACX,yBAAA;;AAcJ,QAXqC;EAWrC,mBAVI,KAAK;IACH,gCAAA;IACA,0BAAA;;EAQN,mBANI,UAAU;EAMd,mBALI,UAAU,IAAG;EAKjB,mBAJI,UAAU,IAAG;IACX,4BAAA;;;AAUN,YACE;EACE,aAAA;;AAFJ,YAIE;EACE,cAAA;;AASJ,SAAU;EAER,gBAAA;Ef3IA,0BAAA;EACC,yBAAA;;AgB1FH;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,6BAAA;;AAQF,QAH6C;EAG7C;IAFI,kBAAA;;;AAgBJ,QAH6C;EAG7C;IAFI,WAAA;;;AAeJ;EACE,iBAAA;EACA,mBAAA;EACA,mBAAA;EACA,kBAAA;EACA,iCAAA;EACA,kDAAA;EAEA,iCAAA;;AAEA,gBAAC;EACC,gBAAA;;AA4BJ,QAzB6C;EAyB7C;IAxBI,WAAA;IACA,aAAA;IACA,gBAAA;;EAEA,gBAAC;IACC,yBAAA;IACA,uBAAA;IACA,iBAAA;IACA,4BAAA;;EAGF,gBAAC;IACC,mBAAA;;EAKF,iBAAkB;EAClB,kBAAmB;EACnB,oBAAqB;IACnB,eAAA;IACA,gBAAA;;;AAUN,UAEE;AADF,gBACE;AAFF,UAGE;AAFF,gBAEE;EACE,mBAAA;EACA,kBAAA;;AAMF,QAJ6C;EAI7C,UATA;EASA,gBATA;EASA,UARA;EAQA,gBARA;IAKI,eAAA;IACA,cAAA;;;AAaN;EACE,aAAA;EACA,qBAAA;;AAKF,QAH6C;EAG7C;IAFI,gBAAA;;;AAKJ;AACA;EACE,eAAA;EACA,QAAA;EACA,OAAA;EACA,aAAA;;AAMF,QAH6C;EAG7C;EAAA;IAFI,gBAAA;;;AAGJ;EACE,MAAA;EACA,qBAAA;;AAEF;EACE,SAAA;EACA,gBAAA;EACA,qBAAA;;AAMF;EACE,WAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,YAAA;;AAEA,aAAC;AACD,aAAC;EACC,qBAAA;;AASJ,QAN6C;EACzC,OAAQ,aAAa;EACrB,OAAQ,mBAAmB;IACzB,kBAAA;;;AAWN;EACE,kBAAA;EACA,YAAA;EACA,kBAAA;EACA,iBAAA;EhBsaA,eAAA;EACA,kBAAA;EgBraA,6BAAA;EACA,sBAAA;EACA,6BAAA;EACA,kBAAA;;AAIA,cAAC;EACC,aAAA;;AAdJ,cAkBE;EACE,cAAA;EACA,WAAA;EACA,WAAA;EACA,kBAAA;;AAtBJ,cAwBE,UAAU;EACR,eAAA;;AAMJ,QAH6C;EAG7C;IAFI,aAAA;;;AAUJ;EACE,mBAAA;;AADF,WAGE,KAAK;EACH,iBAAA;EACA,oBAAA;EACA,iBAAA;;AA2BF,QAxB+C;EAwB/C,WAtBE,MAAM;IACJ,gBAAA;IACA,WAAA;IACA,WAAA;IACA,aAAA;IACA,6BAAA;IACA,SAAA;IACA,gBAAA;;EAeJ,WAtBE,MAAM,eAQJ,KAAK;EAcT,WAtBE,MAAM,eASJ;IACE,0BAAA;;EAYN,WAtBE,MAAM,eAYJ,KAAK;IACH,iBAAA;;EACA,WAdJ,MAAM,eAYJ,KAAK,IAEF;EACD,WAfJ,MAAM,eAYJ,KAAK,IAGF;IACC,sBAAA;;;AAuBV,QAhB6C;EAgB7C;IAfI,WAAA;IACA,SAAA;;EAcJ,WAZI;IACE,WAAA;;EAWN,WAZI,KAEE;IACE,iBAAA;IACA,oBAAA;;EAIJ,WAAC,aAAa;IACZ,mBAAA;;;AAkBN,QAN2C;EACzC;ICnQA,sBAAA;;EDoQA;ICvQA,uBAAA;;;ADgRF;EACE,kBAAA;EACA,mBAAA;EACA,kBAAA;EACA,iCAAA;EACA,oCAAA;EhB3KA,4FAAA;EACQ,oFAAA;EAkeR,eAAA;EACA,kBAAA;;AQ3NF,QAjDqC;EAiDrC,YA/CI;IACE,qBAAA;IACA,gBAAA;IACA,sBAAA;;EA4CN,YAxCI;IACE,qBAAA;IACA,WAAA;IACA,sBAAA;;EAqCN,YAlCI,aAAa;IACX,WAAA;;EAiCN,YA9BI;IACE,gBAAA;IACA,sBAAA;;EA4BN,YAtBI;EAsBJ,YArBI;IACE,qBAAA;IACA,aAAA;IACA,gBAAA;IACA,eAAA;IACA,sBAAA;;EAgBN,YAdI,OAAO,MAAK;EAchB,YAbI,UAAU,MAAK;IACb,WAAA;IACA,cAAA;;EAWN,YAJI,cAAc;IACZ,MAAA;;;AQhFJ,QAHiD;EAGjD,YAJA;IAEI,kBAAA;;;AAsBN,QAd6C;EAc7C;IAbI,WAAA;IACA,SAAA;IACA,cAAA;IACA,eAAA;IACA,cAAA;IACA,iBAAA;IhBlMF,wBAAA;IACQ,gBAAA;;EgBqMN,YAAC,aAAa;IACZ,mBAAA;;;AASN,WAAY,KAAK;EACf,aAAA;EhBvOA,0BAAA;EACC,yBAAA;;AgB0OH,oBAAqB,YAAY,KAAK;EhBnOpC,6BAAA;EACC,4BAAA;;AgB2OH;EhBqQE,eAAA;EACA,kBAAA;;AgBnQA,WAAC;EhBkQD,gBAAA;EACA,mBAAA;;AgBhQA,WAAC;EhB+PD,gBAAA;EACA,mBAAA;;AgBtPF;EhBqPE,gBAAA;EACA,mBAAA;;AgBzOF,QAV6C;EAU7C;IATI,WAAA;IACA,iBAAA;IACA,kBAAA;;EAGA,YAAC,aAAa;IACZ,eAAA;;;AASN;EACE,yBAAA;EACA,qBAAA;;AAFF,eAIE;EACE,cAAA;;AACA,eAFF,cAEG;AACD,eAHF,cAGG;EACC,cAAA;EACA,6BAAA;;AATN,eAaE;EACE,cAAA;;AAdJ,eAiBE,YACE,KAAK;EACH,cAAA;;AAEA,eAJJ,YACE,KAAK,IAGF;AACD,eALJ,YACE,KAAK,IAIF;EACC,cAAA;EACA,6BAAA;;AAIF,eAXJ,YAUE,UAAU;AAER,eAZJ,YAUE,UAAU,IAEP;AACD,eAbJ,YAUE,UAAU,IAGP;EACC,cAAA;EACA,yBAAA;;AAIF,eAnBJ,YAkBE,YAAY;AAEV,eApBJ,YAkBE,YAAY,IAET;AACD,eArBJ,YAkBE,YAAY,IAGT;EACC,cAAA;EACA,6BAAA;;AAxCR,eA6CE;EACE,qBAAA;;AACA,eAFF,eAEG;AACD,eAHF,eAGG;EACC,yBAAA;;AAjDN,eA6CE,eAME;EACE,yBAAA;;AApDN,eAwDE;AAxDF,eAyDE;EACE,qBAAA;;AAOE,eAHJ,YAEE,QAAQ;AAEN,eAJJ,YAEE,QAAQ,IAEL;AACD,eALJ,YAEE,QAAQ,IAGL;EACC,yBAAA;EACA,cAAA;;AAiCN,QA7BiD;EA6BjD,eAxCA,YAaI,MAAM,eACJ,KAAK;IACH,cAAA;;EACA,eAhBR,YAaI,MAAM,eACJ,KAAK,IAEF;EACD,eAjBR,YAaI,MAAM,eACJ,KAAK,IAGF;IACC,cAAA;IACA,6BAAA;;EAIF,eAvBR,YAaI,MAAM,eASJ,UAAU;EAER,eAxBR,YAaI,MAAM,eASJ,UAAU,IAEP;EACD,eAzBR,YAaI,MAAM,eASJ,UAAU,IAGP;IACC,cAAA;IACA,yBAAA;;EAIF,eA/BR,YAaI,MAAM,eAiBJ,YAAY;EAEV,eAhCR,YAaI,MAAM,eAiBJ,YAAY,IAET;EACD,eAjCR,YAaI,MAAM,eAiBJ,YAAY,IAGT;IACC,cAAA;IACA,6BAAA;;;AAjGZ,eA6GE;EACE,cAAA;;AACA,eAFF,aAEG;EACC,cAAA;;AAQN;EACE,yBAAA;EACA,qBAAA;;AAFF,eAIE;EACE,cAAA;;AACA,eAFF,cAEG;AACD,eAHF,cAGG;EACC,cAAA;EACA,6BAAA;;AATN,eAaE;EACE,cAAA;;AAdJ,eAiBE,YACE,KAAK;EACH,cAAA;;AAEA,eAJJ,YACE,KAAK,IAGF;AACD,eALJ,YACE,KAAK,IAIF;EACC,cAAA;EACA,6BAAA;;AAIF,eAXJ,YAUE,UAAU;AAER,eAZJ,YAUE,UAAU,IAEP;AACD,eAbJ,YAUE,UAAU,IAGP;EACC,cAAA;EACA,yBAAA;;AAIF,eAnBJ,YAkBE,YAAY;AAEV,eApBJ,YAkBE,YAAY,IAET;AACD,eArBJ,YAkBE,YAAY,IAGT;EACC,cAAA;EACA,6BAAA;;AAxCR,eA8CE;EACE,qBAAA;;AACA,eAFF,eAEG;AACD,eAHF,eAGG;EACC,yBAAA;;AAlDN,eA8CE,eAME;EACE,yBAAA;;AArDN,eAyDE;AAzDF,eA0DE;EACE,qBAAA;;AAME,eAFJ,YACE,QAAQ;AAEN,eAHJ,YACE,QAAQ,IAEL;AACD,eAJJ,YACE,QAAQ,IAGL;EACC,yBAAA;EACA,cAAA;;AAuCN,QAnCiD;EAmCjD,eA7CA,YAYI,MAAM,eACJ;IACE,qBAAA;;EA+BR,eA7CA,YAYI,MAAM,eAIJ;IACE,yBAAA;;EA4BR,eA7CA,YAYI,MAAM,eAOJ,KAAK;IACH,cAAA;;EACA,eArBR,YAYI,MAAM,eAOJ,KAAK,IAEF;EACD,eAtBR,YAYI,MAAM,eAOJ,KAAK,IAGF;IACC,cAAA;IACA,6BAAA;;EAIF,eA5BR,YAYI,MAAM,eAeJ,UAAU;EAER,eA7BR,YAYI,MAAM,eAeJ,UAAU,IAEP;EACD,eA9BR,YAYI,MAAM,eAeJ,UAAU,IAGP;IACC,cAAA;IACA,yBAAA;;EAIF,eApCR,YAYI,MAAM,eAuBJ,YAAY;EAEV,eArCR,YAYI,MAAM,eAuBJ,YAAY,IAET;EACD,eAtCR,YAYI,MAAM,eAuBJ,YAAY,IAGT;IACC,cAAA;IACA,6BAAA;;;AAvGZ,eA8GE;EACE,cAAA;;AACA,eAFF,aAEG;EACC,cAAA;;AE9lBN;EACE,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,yBAAA;EACA,kBAAA;;AALF,WAOE;EACE,qBAAA;;AARJ,WAOE,KAGE,KAAI;EACF,SAAS,QAAT;EACA,cAAA;EACA,cAAA;;AAbN,WAiBE;EACE,cAAA;;ACpBJ;EACE,qBAAA;EACA,eAAA;EACA,cAAA;EACA,kBAAA;;AAJF,WAME;EACE,eAAA;;AAPJ,WAME,KAEE;AARJ,WAME,KAGE;EACE,kBAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,yBAAA;EACA,iBAAA;;AAEF,WAdF,KAcG,YACC;AADF,WAdF,KAcG,YAEC;EACE,cAAA;EnBqFN,8BAAA;EACG,2BAAA;;AmBlFD,WArBF,KAqBG,WACC;AADF,WArBF,KAqBG,WAEC;EnBuEJ,+BAAA;EACG,4BAAA;;AmBhED,WAFF,KAAK,IAEF;AAAD,WADF,KAAK,OACF;AACD,WAHF,KAAK,IAGF;AAAD,WAFF,KAAK,OAEF;EACC,cAAA;EACA,yBAAA;EACA,qBAAA;;AAMF,WAFF,UAAU;AAER,WADF,UAAU;AAER,WAHF,UAAU,IAGP;AAAD,WAFF,UAAU,OAEP;AACD,WAJF,UAAU,IAIP;AAAD,WAHF,UAAU,OAGP;EACC,UAAA;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,eAAA;;AAtDN,WA0DE,YACE;AA3DJ,WA0DE,YAEE,OAAM;AA5DV,WA0DE,YAGE,OAAM;AA7DV,WA0DE,YAIE;AA9DJ,WA0DE,YAKE,IAAG;AA/DP,WA0DE,YAME,IAAG;EACD,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,mBAAA;;AASN,cnBodE,KACE;AmBrdJ,cnBodE,KAEE;EACE,kBAAA;EACA,eAAA;;AAEF,cANF,KAMG,YACC;AADF,cANF,KAMG,YAEC;EA7bJ,8BAAA;EACG,2BAAA;;AAgcD,cAZF,KAYG,WACC;AADF,cAZF,KAYG,WAEC;EA3cJ,+BAAA;EACG,4BAAA;;AmBnBL,cnB+cE,KACE;AmBhdJ,cnB+cE,KAEE;EACE,iBAAA;EACA,eAAA;;AAEF,cANF,KAMG,YACC;AADF,cANF,KAMG,YAEC;EA7bJ,8BAAA;EACG,2BAAA;;AAgcD,cAZF,KAYG,WACC;AADF,cAZF,KAYG,WAEC;EA3cJ,+BAAA;EACG,4BAAA;;AoBnGL;EACE,eAAA;EACA,cAAA;EACA,gBAAA;EACA,kBAAA;;AAJF,MAME;EACE,eAAA;;AAPJ,MAME,GAEE;AARJ,MAME,GAGE;EACE,qBAAA;EACA,iBAAA;EACA,yBAAA;EACA,yBAAA;EACA,mBAAA;;AAdN,MAME,GAWE,IAAG;AAjBP,MAME,GAYE,IAAG;EACD,qBAAA;EACA,yBAAA;;AApBN,MAwBE,MACE;AAzBJ,MAwBE,MAEE;EACE,YAAA;;AA3BN,MA+BE,UACE;AAhCJ,MA+BE,UAEE;EACE,WAAA;;AAlCN,MAsCE,UACE;AAvCJ,MAsCE,UAEE,IAAG;AAxCP,MAsCE,UAGE,IAAG;AAzCP,MAsCE,UAIE;EACE,cAAA;EACA,yBAAA;EACA,mBAAA;;AC9CN;EACE,eAAA;EACA,uBAAA;EACA,cAAA;EACA,iBAAA;EACA,cAAA;EACA,cAAA;EACA,kBAAA;EACA,mBAAA;EACA,wBAAA;EACA,oBAAA;;AAIE,MADD,MACE;AACD,MAFD,MAEE;EACC,cAAA;EACA,qBAAA;EACA,eAAA;;AAKJ,MAAC;EACC,aAAA;;AAIF,IAAK;EACH,kBAAA;EACA,SAAA;;AAOJ;ErBmhBE,yBAAA;;AAEE,cADD,MACE;AACD,cAFD,MAEE;EACC,yBAAA;;AqBnhBN;ErB+gBE,yBAAA;;AAEE,cADD,MACE;AACD,cAFD,MAEE;EACC,yBAAA;;AqB/gBN;ErB2gBE,yBAAA;;AAEE,cADD,MACE;AACD,cAFD,MAEE;EACC,yBAAA;;AqB3gBN;ErBugBE,yBAAA;;AAEE,WADD,MACE;AACD,WAFD,MAEE;EACC,yBAAA;;AqBvgBN;ErBmgBE,yBAAA;;AAEE,cADD,MACE;AACD,cAFD,MAEE;EACC,yBAAA;;AqBngBN;ErB+fE,yBAAA;;AAEE,aADD,MACE;AACD,aAFD,MAEE;EACC,yBAAA;;AsB1jBN;EACE,qBAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,cAAA;EACA,cAAA;EACA,wBAAA;EACA,mBAAA;EACA,kBAAA;EACA,yBAAA;EACA,mBAAA;;AAGA,MAAC;EACC,aAAA;;AAIF,IAAK;EACH,kBAAA;EACA,SAAA;;AAEF,OAAQ;EACN,MAAA;EACA,gBAAA;;AAMF,CADD,MACE;AACD,CAFD,MAEE;EACC,cAAA;EACA,qBAAA;EACA,eAAA;;AAKJ,CAAC,gBAAgB,OAAQ;AACzB,UAAW,UAAU,IAAI;EACvB,cAAA;EACA,yBAAA;;AAEF,UAAW,KAAK,IAAI;EAClB,gBAAA;;AChDF;EACE,aAAA;EACA,mBAAA;EACA,cAAA;EACA,yBAAA;;AAJF,UAME;AANF,UAOE;EACE,cAAA;;AARJ,UAUE;EACE,mBAAA;EACA,eAAA;EACA,gBAAA;;AAGF,UAAW;EACT,kBAAA;;AAjBJ,UAoBE;EACE,eAAA;;AAiBJ,mBAdgD;EAchD;IAbI,iBAAA;IACA,oBAAA;;EAEA,UAAW;IACT,kBAAA;IACA,mBAAA;;EAQN,UALI;EAKJ,UAJI;IACE,eAAA;;;ArBlCN;EACE,cAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,yBAAA;EACA,yBAAA;EACA,kBAAA;EFkHA,wCAAA;EACQ,gCAAA;;AE1HV,UAUE;AAVF,UAWE,EAAE;EAEA,iBAAA;EACA,kBAAA;;AAIF,CAAC,UAAC;AACF,CAAC,UAAC;AACF,CAAC,UAAC;EACA,qBAAA;;AArBJ,UAyBE;EACE,YAAA;EACA,cAAA;;AsBzBJ;EACE,aAAA;EACA,mBAAA;EACA,6BAAA;EACA,kBAAA;;AAJF,MAOE;EACE,aAAA;EAEA,cAAA;;AAVJ,MAaE;EACE,iBAAA;;AAdJ,MAkBE;AAlBF,MAmBE;EACE,gBAAA;;AApBJ,MAsBE,IAAI;EACF,eAAA;;AAQJ;EACC,mBAAA;;AADD,kBAIE;EACE,kBAAA;EACA,SAAA;EACA,YAAA;EACA,cAAA;;AAQJ;ExBmXE,yBAAA;EACA,qBAAA;EACA,cAAA;;AwBrXF,cxBuXE;EACE,yBAAA;;AwBxXJ,cxB0XE;EACE,cAAA;;AwBxXJ;ExBgXE,yBAAA;EACA,qBAAA;EACA,cAAA;;AwBlXF,WxBoXE;EACE,yBAAA;;AwBrXJ,WxBuXE;EACE,cAAA;;AwBrXJ;ExB6WE,yBAAA;EACA,qBAAA;EACA,cAAA;;AwB/WF,cxBiXE;EACE,yBAAA;;AwBlXJ,cxBoXE;EACE,cAAA;;AwBlXJ;ExB0WE,yBAAA;EACA,qBAAA;EACA,cAAA;;AwB5WF,axB8WE;EACE,yBAAA;;AwB/WJ,axBiXE;EACE,cAAA;;AyBzaJ;EACE;IAAQ,2BAAA;;EACR;IAAQ,wBAAA;;;AAIV;EACE;IAAQ,2BAAA;;EACR;IAAQ,wBAAA;;;AASV;EACE,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,yBAAA;EACA,kBAAA;EzB0FA,sDAAA;EACQ,8CAAA;;AyBtFV;EACE,WAAA;EACA,SAAA;EACA,YAAA;EACA,eAAA;EACA,iBAAA;EACA,cAAA;EACA,kBAAA;EACA,yBAAA;EzB6EA,sDAAA;EACQ,8CAAA;EAKR,mCAAA;EACQ,2BAAA;;AyB9EV,iBAAkB;EzBqSd,kBAAkB,2LAAlB;EACA,kBAAkB,mLAAlB;EyBpSF,0BAAA;;AAIF,SAAS,OAAQ;EzBoJf,0DAAA;EACQ,kDAAA;;AyB5IV;EzBkiBE,yBAAA;;AACA,iBAAkB;EA7QhB,kBAAkB,2LAAlB;EACA,kBAAkB,mLAAlB;;AyBnRJ;EzB8hBE,yBAAA;;AACA,iBAAkB;EA7QhB,kBAAkB,2LAAlB;EACA,kBAAkB,mLAAlB;;AyB/QJ;EzB0hBE,yBAAA;;AACA,iBAAkB;EA7QhB,kBAAkB,2LAAlB;EACA,kBAAkB,mLAAlB;;AyB3QJ;EzBshBE,yBAAA;;AACA,iBAAkB;EA7QhB,kBAAkB,2LAAlB;EACA,kBAAkB,mLAAlB;;A0B/UJ;AACA;EACE,gBAAA;EACA,OAAA;;AAIF;AACA,MAAO;EACL,gBAAA;;AAEF,MAAM;EACJ,aAAA;;AAIF;EACE,cAAA;;AAIF;EACE,eAAA;;AAOF,MACE;EACE,kBAAA;;AAFJ,MAIE;EACE,iBAAA;;AASJ;EACE,eAAA;EACA,gBAAA;;AC7CF;EAEE,mBAAA;EACA,eAAA;;AAQF;EACE,kBAAA;EACA,cAAA;EACA,kBAAA;EAEA,mBAAA;EACA,yBAAA;EACA,yBAAA;;AAGA,gBAAC;E3BqED,4BAAA;EACC,2BAAA;;A2BnED,gBAAC;EACC,gBAAA;E3ByEF,+BAAA;EACC,8BAAA;;A2BxFH,gBAmBE;EACE,YAAA;;AApBJ,gBAsBE,SAAS;EACP,iBAAA;;AAUJ,CAAC;EACC,cAAA;;AADF,CAAC,gBAGC;EACE,cAAA;;AAIF,CARD,gBAQE;AACD,CATD,gBASE;EACC,qBAAA;EACA,yBAAA;;AAIF,CAfD,gBAeE;AACD,CAhBD,gBAgBE,OAAO;AACR,CAjBD,gBAiBE,OAAO;EACN,UAAA;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;;AANF,CAfD,gBAeE,OASC;AARF,CAhBD,gBAgBE,OAAO,MAQN;AAPF,CAjBD,gBAiBE,OAAO,MAON;EACE,cAAA;;AAVJ,CAfD,gBAeE,OAYC;AAXF,CAhBD,gBAgBE,OAAO,MAWN;AAVF,CAjBD,gBAiBE,OAAO,MAUN;EACE,cAAA;;A3BoYJ,iBAAiB;EACf,cAAA;EACA,yBAAA;;AAEA,CAAC,iBAJc;EAKb,cAAA;;AADF,CAAC,iBAJc,OAOb;EAA2B,cAAA;;AAE3B,CALD,iBAJc,OASZ;AACD,CAND,iBAJc,OAUZ;EACC,cAAA;EACA,yBAAA;;AAEF,CAVD,iBAJc,OAcZ;AACD,CAXD,iBAJc,OAeZ,OAAO;AACR,CAZD,iBAJc,OAgBZ,OAAO;EACN,WAAA;EACA,yBAAA;EACA,qBAAA;;AAnBN,iBAAiB;EACf,cAAA;EACA,yBAAA;;AAEA,CAAC,iBAJc;EAKb,cAAA;;AADF,CAAC,iBAJc,IAOb;EAA2B,cAAA;;AAE3B,CALD,iBAJc,IASZ;AACD,CAND,iBAJc,IAUZ;EACC,cAAA;EACA,yBAAA;;AAEF,CAVD,iBAJc,IAcZ;AACD,CAXD,iBAJc,IAeZ,OAAO;AACR,CAZD,iBAJc,IAgBZ,OAAO;EACN,WAAA;EACA,yBAAA;EACA,qBAAA;;AAnBN,iBAAiB;EACf,cAAA;EACA,yBAAA;;AAEA,CAAC,iBAJc;EAKb,cAAA;;AADF,CAAC,iBAJc,OAOb;EAA2B,cAAA;;AAE3B,CALD,iBAJc,OASZ;AACD,CAND,iBAJc,OAUZ;EACC,cAAA;EACA,yBAAA;;AAEF,CAVD,iBAJc,OAcZ;AACD,CAXD,iBAJc,OAeZ,OAAO;AACR,CAZD,iBAJc,OAgBZ,OAAO;EACN,WAAA;EACA,yBAAA;EACA,qBAAA;;AAnBN,iBAAiB;EACf,cAAA;EACA,yBAAA;;AAEA,CAAC,iBAJc;EAKb,cAAA;;AADF,CAAC,iBAJc,MAOb;EAA2B,cAAA;;AAE3B,CALD,iBAJc,MASZ;AACD,CAND,iBAJc,MAUZ;EACC,cAAA;EACA,yBAAA;;AAEF,CAVD,iBAJc,MAcZ;AACD,CAXD,iBAJc,MAeZ,OAAO;AACR,CAZD,iBAJc,MAgBZ,OAAO;EACN,WAAA;EACA,yBAAA;EACA,qBAAA;;A2BlYR;EACE,aAAA;EACA,kBAAA;;AAEF;EACE,gBAAA;EACA,gBAAA;;ACtGF;EACE,mBAAA;EACA,yBAAA;EACA,6BAAA;EACA,kBAAA;E5B+GA,iDAAA;EACQ,yCAAA;;A4B3GV;EACE,aAAA;;AAKF;EACE,kBAAA;EACA,oCAAA;E5B4EA,4BAAA;EACC,2BAAA;;A4B/EH,cAKE,YAAY;EACV,cAAA;;AAKJ;EACE,aAAA;EACA,gBAAA;EACA,eAAA;EACA,cAAA;;AAJF,YAME;EACE,cAAA;;AAKJ;EACE,kBAAA;EACA,yBAAA;EACA,6BAAA;E5B4DA,+BAAA;EACC,8BAAA;;A4BnDH,MACE;EACE,gBAAA;;AAFJ,MACE,cAGE;EACE,mBAAA;EACA,gBAAA;;AAIF,MATF,cASG,YACC,iBAAgB;EACd,aAAA;E5B8BN,4BAAA;EACC,2BAAA;;A4B1BC,MAhBF,cAgBG,WACC,iBAAgB;EACd,gBAAA;E5B+BN,+BAAA;EACC,8BAAA;;A4BzBH,cAAe,cACb,iBAAgB;EACd,mBAAA;;AAUJ,MACE;AADF,MAEE,oBAAoB;EAClB,gBAAA;;AAHJ,MAME,SAAQ;AANV,MAOE,oBAAmB,YAAa,SAAQ;E5BHxC,4BAAA;EACC,2BAAA;;A4BLH,MAME,SAAQ,YAIN,QAAO,YAEL,KAAI,YACF,GAAE;AAbV,MAOE,oBAAmB,YAAa,SAAQ,YAGtC,QAAO,YAEL,KAAI,YACF,GAAE;AAbV,MAME,SAAQ,YAKN,QAAO,YACL,KAAI,YACF,GAAE;AAbV,MAOE,oBAAmB,YAAa,SAAQ,YAItC,QAAO,YACL,KAAI,YACF,GAAE;AAbV,MAME,SAAQ,YAIN,QAAO,YAEL,KAAI,YAEF,GAAE;AAdV,MAOE,oBAAmB,YAAa,SAAQ,YAGtC,QAAO,YAEL,KAAI,YAEF,GAAE;AAdV,MAME,SAAQ,YAKN,QAAO,YACL,KAAI,YAEF,GAAE;AAdV,MAOE,oBAAmB,YAAa,SAAQ,YAItC,QAAO,YACL,KAAI,YAEF,GAAE;EACA,2BAAA;;AAfV,MAME,SAAQ,YAIN,QAAO,YAEL,KAAI,YAKF,GAAE;AAjBV,MAOE,oBAAmB,YAAa,SAAQ,YAGtC,QAAO,YAEL,KAAI,YAKF,GAAE;AAjBV,MAME,SAAQ,YAKN,QAAO,YACL,KAAI,YAKF,GAAE;AAjBV,MAOE,oBAAmB,YAAa,SAAQ,YAItC,QAAO,YACL,KAAI,YAKF,GAAE;AAjBV,MAME,SAAQ,YAIN,QAAO,YAEL,KAAI,YAMF,GAAE;AAlBV,MAOE,oBAAmB,YAAa,SAAQ,YAGtC,QAAO,YAEL,KAAI,YAMF,GAAE;AAlBV,MAME,SAAQ,YAKN,QAAO,YACL,KAAI,YAMF,GAAE;AAlBV,MAOE,oBAAmB,YAAa,SAAQ,YAItC,QAAO,YACL,KAAI,YAMF,GAAE;EACA,4BAAA;;AAnBV,MAyBE,SAAQ;AAzBV,MA0BE,oBAAmB,WAAY,SAAQ;E5BdvC,+BAAA;EACC,8BAAA;;A4BbH,MAyBE,SAAQ,WAIN,QAAO,WAEL,KAAI,WACF,GAAE;AAhCV,MA0BE,oBAAmB,WAAY,SAAQ,WAGrC,QAAO,WAEL,KAAI,WACF,GAAE;AAhCV,MAyBE,SAAQ,WAKN,QAAO,WACL,KAAI,WACF,GAAE;AAhCV,MA0BE,oBAAmB,WAAY,SAAQ,WAIrC,QAAO,WACL,KAAI,WACF,GAAE;AAhCV,MAyBE,SAAQ,WAIN,QAAO,WAEL,KAAI,WAEF,GAAE;AAjCV,MA0BE,oBAAmB,WAAY,SAAQ,WAGrC,QAAO,WAEL,KAAI,WAEF,GAAE;AAjCV,MAyBE,SAAQ,WAKN,QAAO,WACL,KAAI,WAEF,GAAE;AAjCV,MA0BE,oBAAmB,WAAY,SAAQ,WAIrC,QAAO,WACL,KAAI,WAEF,GAAE;EACA,8BAAA;;AAlCV,MAyBE,SAAQ,WAIN,QAAO,WAEL,KAAI,WAKF,GAAE;AApCV,MA0BE,oBAAmB,WAAY,SAAQ,WAGrC,QAAO,WAEL,KAAI,WAKF,GAAE;AApCV,MAyBE,SAAQ,WAKN,QAAO,WACL,KAAI,WAKF,GAAE;AApCV,MA0BE,oBAAmB,WAAY,SAAQ,WAIrC,QAAO,WACL,KAAI,WAKF,GAAE;AApCV,MAyBE,SAAQ,WAIN,QAAO,WAEL,KAAI,WAMF,GAAE;AArCV,MA0BE,oBAAmB,WAAY,SAAQ,WAGrC,QAAO,WAEL,KAAI,WAMF,GAAE;AArCV,MAyBE,SAAQ,WAKN,QAAO,WACL,KAAI,WAMF,GAAE;AArCV,MA0BE,oBAAmB,WAAY,SAAQ,WAIrC,QAAO,WACL,KAAI,WAMF,GAAE;EACA,+BAAA;;AAtCV,MA2CE,cAAc;AA3ChB,MA4CE,cAAc;EACZ,6BAAA;;AA7CJ,MA+CE,SAAS,QAAO,YAAa,KAAI,YAAa;AA/ChD,MAgDE,SAAS,QAAO,YAAa,KAAI,YAAa;EAC5C,aAAA;;AAjDJ,MAmDE;AAnDF,MAoDE,oBAAoB;EAClB,SAAA;;AArDJ,MAmDE,kBAGE,QAGE,KACE,KAAI;AA1DZ,MAoDE,oBAAoB,kBAElB,QAGE,KACE,KAAI;AA1DZ,MAmDE,kBAIE,QAEE,KACE,KAAI;AA1DZ,MAoDE,oBAAoB,kBAGlB,QAEE,KACE,KAAI;AA1DZ,MAmDE,kBAKE,QACE,KACE,KAAI;AA1DZ,MAoDE,oBAAoB,kBAIlB,QACE,KACE,KAAI;AA1DZ,MAmDE,kBAGE,QAGE,KAEE,KAAI;AA3DZ,MAoDE,oBAAoB,kBAElB,QAGE,KAEE,KAAI;AA3DZ,MAmDE,kBAIE,QAEE,KAEE,KAAI;AA3DZ,MAoDE,oBAAoB,kBAGlB,QAEE,KAEE,KAAI;AA3DZ,MAmDE,kBAKE,QACE,KAEE,KAAI;AA3DZ,MAoDE,oBAAoB,kBAIlB,QACE,KAEE,KAAI;EACF,cAAA;;AA5DV,MAmDE,kBAGE,QAGE,KAKE,KAAI;AA9DZ,MAoDE,oBAAoB,kBAElB,QAGE,KAKE,KAAI;AA9DZ,MAmDE,kBAIE,QAEE,KAKE,KAAI;AA9DZ,MAoDE,oBAAoB,kBAGlB,QAEE,KAKE,KAAI;AA9DZ,MAmDE,kBAKE,QACE,KAKE,KAAI;AA9DZ,MAoDE,oBAAoB,kBAIlB,QACE,KAKE,KAAI;AA9DZ,MAmDE,kBAGE,QAGE,KAME,KAAI;AA/DZ,MAoDE,oBAAoB,kBAElB,QAGE,KAME,KAAI;AA/DZ,MAmDE,kBAIE,QAEE,KAME,KAAI;AA/DZ,MAoDE,oBAAoB,kBAGlB,QAEE,KAME,KAAI;AA/DZ,MAmDE,kBAKE,QACE,KAME,KAAI;AA/DZ,MAoDE,oBAAoB,kBAIlB,QACE,KAME,KAAI;EACF,eAAA;;AAhEV,MAmDE,kBAiBE,QAEE,KAAI,YACF;AAvER,MAoDE,oBAAoB,kBAgBlB,QAEE,KAAI,YACF;AAvER,MAmDE,kBAkBE,QACE,KAAI,YACF;AAvER,MAoDE,oBAAoB,kBAiBlB,QACE,KAAI,YACF;AAvER,MAmDE,kBAiBE,QAEE,KAAI,YAEF;AAxER,MAoDE,oBAAoB,kBAgBlB,QAEE,KAAI,YAEF;AAxER,MAmDE,kBAkBE,QACE,KAAI,YAEF;AAxER,MAoDE,oBAAoB,kBAiBlB,QACE,KAAI,YAEF;EACE,gBAAA;;AAzEV,MAmDE,kBA0BE,QAEE,KAAI,WACF;AAhFR,MAoDE,oBAAoB,kBAyBlB,QAEE,KAAI,WACF;AAhFR,MAmDE,kBA2BE,QACE,KAAI,WACF;AAhFR,MAoDE,oBAAoB,kBA0BlB,QACE,KAAI,WACF;AAhFR,MAmDE,kBA0BE,QAEE,KAAI,WAEF;AAjFR,MAoDE,oBAAoB,kBAyBlB,QAEE,KAAI,WAEF;AAjFR,MAmDE,kBA2BE,QACE,KAAI,WAEF;AAjFR,MAoDE,oBAAoB,kBA0BlB,QACE,KAAI,WAEF;EACE,gBAAA;;AAlFV,MAuFE;EACE,SAAA;EACA,gBAAA;;AAUJ;EACE,mBAAA;;AADF,YAIE;EACE,gBAAA;EACA,kBAAA;EACA,gBAAA;;AAPJ,YAIE,OAIE;EACE,eAAA;;AATN,YAaE;EACE,gBAAA;;AAdJ,YAaE,eAEE,kBAAkB;EAChB,6BAAA;;AAhBN,YAmBE;EACE,aAAA;;AApBJ,YAmBE,cAEE,kBAAkB;EAChB,gCAAA;;AAON;E5BsLE,qBAAA;;AAEA,cAAE;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;;AAHF,cAAE,iBAKA,kBAAkB;EAChB,yBAAA;;AAGJ,cAAE,gBACA,kBAAkB;EAChB,4BAAA;;A4BhMN;E5BmLE,qBAAA;;AAEA,cAAE;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;;AAHF,cAAE,iBAKA,kBAAkB;EAChB,yBAAA;;AAGJ,cAAE,gBACA,kBAAkB;EAChB,4BAAA;;A4B7LN;E5BgLE,qBAAA;;AAEA,cAAE;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;;AAHF,cAAE,iBAKA,kBAAkB;EAChB,yBAAA;;AAGJ,cAAE,gBACA,kBAAkB;EAChB,4BAAA;;A4B1LN;E5B6KE,qBAAA;;AAEA,WAAE;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;;AAHF,WAAE,iBAKA,kBAAkB;EAChB,yBAAA;;AAGJ,WAAE,gBACA,kBAAkB;EAChB,4BAAA;;A4BvLN;E5B0KE,qBAAA;;AAEA,cAAE;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;;AAHF,cAAE,iBAKA,kBAAkB;EAChB,yBAAA;;AAGJ,cAAE,gBACA,kBAAkB;EAChB,4BAAA;;A4BpLN;E5BuKE,qBAAA;;AAEA,aAAE;EACA,cAAA;EACA,yBAAA;EACA,qBAAA;;AAHF,aAAE,iBAKA,kBAAkB;EAChB,yBAAA;;AAGJ,aAAE,gBACA,kBAAkB;EAChB,4BAAA;;A6B5ZN;EACE,gBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,yBAAA;EACA,kBAAA;E7B6GA,uDAAA;EACQ,+CAAA;;A6BpHV,KAQE;EACE,kBAAA;EACA,iCAAA;;AAKJ;EACE,aAAA;EACA,kBAAA;;AAEF;EACE,YAAA;EACA,kBAAA;;ACtBF;EACE,YAAA;EACA,eAAA;EACA,iBAAA;EACA,cAAA;EACA,cAAA;EACA,4BAAA;E9BkRA,YAAA;EAGA,yBAAA;;A8BlRA,MAAC;AACD,MAAC;EACC,cAAA;EACA,qBAAA;EACA,eAAA;E9B2QF,YAAA;EAGA,yBAAA;;A8BvQA,MAAM;EACJ,UAAA;EACA,eAAA;EACA,uBAAA;EACA,SAAA;EACA,wBAAA;;ACpBJ;EACE,gBAAA;;AAIF;EACE,aAAA;EACA,cAAA;EACA,kBAAA;EACA,eAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,aAAA;EACA,iCAAA;EAIA,UAAA;;AAGA,MAAC,KAAM;E/BiIP,mBAAmB,kBAAnB;EACI,eAAe,kBAAf;EACI,WAAW,kBAAX;EApBR,mDAAA;EACG,6CAAA;EACE,yCAAA;EACG,mCAAA;;A+B9GR,MAAC,GAAI;E/B6HL,mBAAmB,eAAnB;EACI,eAAe,eAAf;EACI,WAAW,eAAX;;A+B3HV;EACE,kBAAA;EACA,WAAA;EACA,YAAA;;AAIF;EACE,kBAAA;EACA,yBAAA;EACA,yBAAA;EACA,oCAAA;EACA,kBAAA;E/BqEA,gDAAA;EACQ,wCAAA;E+BpER,4BAAA;EAEA,aAAA;;AAIF;EACE,eAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,aAAA;EACA,yBAAA;;AAEA,eAAC;E/BwND,UAAA;EAGA,wBAAA;;A+B1NA,eAAC;E/BuND,YAAA;EAGA,yBAAA;;A+BrNF;EACE,aAAA;EACA,gCAAA;EACA,yBAAA;;AAGF,aAAc;EACZ,gBAAA;;AAIF;EACE,SAAA;EACA,uBAAA;;AAKF;EACE,kBAAA;EACA,aAAA;;AAIF;EACE,gBAAA;EACA,uBAAA;EACA,iBAAA;EACA,6BAAA;;AAJF,aAQE,KAAK;EACH,gBAAA;EACA,gBAAA;;AAVJ,aAaE,WAAW,KAAK;EACd,iBAAA;;AAdJ,aAiBE,WAAW;EACT,cAAA;;AAmBJ,QAdmC;EAEjC;IACE,YAAA;IACA,iBAAA;;EAEF;I/BPA,iDAAA;IACQ,yCAAA;;E+BWR;IAAY,YAAA;;;AAMd,QAHmC;EACjC;IAAY,YAAA;;;ACnId;EACE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,eAAA;EACA,gBAAA;EhCiRA,UAAA;EAGA,wBAAA;;AgCjRA,QAAC;EhC8QD,YAAA;EAGA,yBAAA;;AgChRA,QAAC;EAAU,gBAAA;EAAmB,cAAA;;AAC9B,QAAC;EAAU,gBAAA;EAAmB,cAAA;;AAC9B,QAAC;EAAU,eAAA;EAAmB,cAAA;;AAC9B,QAAC;EAAU,iBAAA;EAAmB,cAAA;;AAIhC;EACE,gBAAA;EACA,gBAAA;EACA,cAAA;EACA,kBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;;AAIF;EACE,kBAAA;EACA,QAAA;EACA,SAAA;EACA,yBAAA;EACA,mBAAA;;AAGA,QAAC,IAAK;EACJ,SAAA;EACA,SAAA;EACA,iBAAA;EACA,uBAAA;EACA,yBAAA;;AAEF,QAAC,SAAU;EACT,SAAA;EACA,SAAA;EACA,uBAAA;EACA,yBAAA;;AAEF,QAAC,UAAW;EACV,SAAA;EACA,UAAA;EACA,uBAAA;EACA,yBAAA;;AAEF,QAAC,MAAO;EACN,QAAA;EACA,OAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;;AAEF,QAAC,KAAM;EACL,QAAA;EACA,QAAA;EACA,gBAAA;EACA,2BAAA;EACA,0BAAA;;AAEF,QAAC,OAAQ;EACP,MAAA;EACA,SAAA;EACA,iBAAA;EACA,uBAAA;EACA,4BAAA;;AAEF,QAAC,YAAa;EACZ,MAAA;EACA,SAAA;EACA,uBAAA;EACA,4BAAA;;AAEF,QAAC,aAAc;EACb,MAAA;EACA,UAAA;EACA,uBAAA;EACA,4BAAA;;ACvFJ;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,aAAA;EACA,aAAA;EACA,gBAAA;EACA,YAAA;EACA,gBAAA;EACA,yBAAA;EACA,4BAAA;EACA,yBAAA;EACA,oCAAA;EACA,kBAAA;EjCuGA,iDAAA;EACQ,yCAAA;EiCpGR,mBAAA;;AAGA,QAAC;EAAW,iBAAA;;AACZ,QAAC;EAAW,iBAAA;;AACZ,QAAC;EAAW,gBAAA;;AACZ,QAAC;EAAW,kBAAA;;AAGd;EACE,SAAA;EACA,iBAAA;EACA,eAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gCAAA;EACA,0BAAA;;AAGF;EACE,iBAAA;;AAQA,QADO;AAEP,QAFO,SAEN;EACC,kBAAA;EACA,cAAA;EACA,QAAA;EACA,SAAA;EACA,yBAAA;EACA,mBAAA;;AAGJ,QAAS;EACP,kBAAA;;AAEF,QAAS,SAAQ;EACf,kBAAA;EACA,SAAS,EAAT;;AAIA,QAAC,IAAK;EACJ,SAAA;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,qCAAA;EACA,aAAA;;AACA,QAPD,IAAK,SAOH;EACC,SAAS,GAAT;EACA,WAAA;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;;AAGJ,QAAC,MAAO;EACN,QAAA;EACA,WAAA;EACA,iBAAA;EACA,oBAAA;EACA,2BAAA;EACA,uCAAA;;AACA,QAPD,MAAO,SAOL;EACC,SAAS,GAAT;EACA,SAAA;EACA,aAAA;EACA,oBAAA;EACA,2BAAA;;AAGJ,QAAC,OAAQ;EACP,SAAA;EACA,kBAAA;EACA,mBAAA;EACA,4BAAA;EACA,wCAAA;EACA,UAAA;;AACA,QAPD,OAAQ,SAON;EACC,SAAS,GAAT;EACA,QAAA;EACA,kBAAA;EACA,mBAAA;EACA,4BAAA;;AAIJ,QAAC,KAAM;EACL,QAAA;EACA,YAAA;EACA,iBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sCAAA;;AACA,QAPD,KAAM,SAOJ;EACC,SAAS,GAAT;EACA,UAAA;EACA,qBAAA;EACA,0BAAA;EACA,aAAA;;A9B1HN;EACE,kBAAA;;AAGF;EACE,kBAAA;EACA,gBAAA;EACA,WAAA;;AAHF,eAKE;EACE,aAAA;EACA,kBAAA;EH8GF,yCAAA;EACQ,iCAAA;;AGtHV,eAKE,QAME;AAXJ,eAKE,QAOE,IAAI;EAEF,cAAA;;AAdN,eAkBE;AAlBF,eAmBE;AAnBF,eAoBE;EAAU,cAAA;;AApBZ,eAsBE;EACE,OAAA;;AAvBJ,eA0BE;AA1BF,eA2BE;EACE,kBAAA;EACA,MAAA;EACA,WAAA;;AA9BJ,eAiCE;EACE,UAAA;;AAlCJ,eAoCE;EACE,WAAA;;AArCJ,eAuCE,QAAO;AAvCT,eAwCE,QAAO;EACL,OAAA;;AAzCJ,eA4CE,UAAS;EACP,WAAA;;AA7CJ,eA+CE,UAAS;EACP,UAAA;;AAQJ;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EHsNA,YAAA;EAGA,yBAAA;EGvNA,eAAA;EACA,cAAA;EACA,kBAAA;EACA,yCAAA;;AAKA,iBAAC;EH8NC,kBAAkB,8BAA8B,mCAAyC,uCAAzF;EACA,kBAAmB,4EAAnB;EACA,2BAAA;EACA,sHAAA;;AG9NF,iBAAC;EACC,UAAA;EACA,QAAA;EHyNA,kBAAkB,8BAA8B,sCAAyC,oCAAzF;EACA,kBAAmB,4EAAnB;EACA,2BAAA;EACA,sHAAA;;AGvNF,iBAAC;AACD,iBAAC;EACC,aAAA;EACA,cAAA;EACA,qBAAA;EH8LF,YAAA;EAGA,yBAAA;;AG9NF,iBAkCE;AAlCF,iBAmCE;AAnCF,iBAoCE;AApCF,iBAqCE;EACE,kBAAA;EACA,QAAA;EACA,UAAA;EACA,qBAAA;;AAzCJ,iBA2CE;AA3CF,iBA4CE;EACE,SAAA;;AA7CJ,iBA+CE;AA/CF,iBAgDE;EACE,UAAA;;AAjDJ,iBAmDE;AAnDF,iBAoDE;EACE,WAAA;EACA,YAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;;AAIA,iBADF,WACG;EACC,SAAS,OAAT;;AAIF,iBADF,WACG;EACC,SAAS,OAAT;;AAUN;EACE,kBAAA;EACA,YAAA;EACA,SAAA;EACA,WAAA;EACA,UAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;;AATF,oBAWE;EACE,qBAAA;EACA,WAAA;EACA,YAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,mBAAA;EACA,eAAA;EAUA,yBAAA;EACA,kCAAA;;AA9BJ,oBAgCE;EACE,SAAA;EACA,WAAA;EACA,YAAA;EACA,yBAAA;;AAOJ;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,iBAAA;EACA,oBAAA;EACA,cAAA;EACA,kBAAA;EACA,yCAAA;;AACA,iBAAE;EACA,iBAAA;;AAkCJ,mBA5B8C;EAG5C,iBACE;EADF,iBAEE;EAFF,iBAGE;EAHF,iBAIE;IACE,WAAA;IACA,YAAA;IACA,iBAAA;IACA,kBAAA;IACA,eAAA;;EAKJ;IACE,SAAA;IACA,UAAA;IACA,oBAAA;;EAIF;IACE,YAAA;;;AHlNF,SAAC;AACD,SAAC;AMXH,UNUG;AMVH,UNWG;AMSH,gBNVG;AMUH,gBNTG;AMkBH,INnBG;AMmBH,INlBG;AQsXH,gBAoBE,YR3YC;AQuXH,gBAoBE,YR1YC;AUkBH,YVnBG;AUmBH,YVlBG;AU8HH,mBAWE,aV1IC;AU+HH,mBAWE,aVzIC;AeZH,IfWG;AeXH,IfYG;AgBVH,OhBSG;AgBTH,OhBUG;AgBUH,chBXG;AgBWH,chBVG;AgB6BH,gBhB9BG;AgB8BH,gBhB7BG;AoBfH,MpBcG;AoBdH,MpBeG;A4BLH,W5BIG;A4BJH,W5BKG;A+B+EH,a/BhFG;A+BgFH,a/B/EG;EACC,SAAS,GAAT;EACA,cAAA;;AAEF,SAAC;AMfH,UNeG;AMKH,gBNLG;AMcH,INdG;AQkXH,gBAoBE,YRtYC;AUcH,YVdG;AU0HH,mBAWE,aVrIC;AehBH,IfgBG;AgBdH,OhBcG;AgBMH,chBNG;AgByBH,gBhBzBG;AoBnBH,MpBmBG;A4BTH,W5BSG;A+B2EH,a/B3EG;EACC,WAAA;;AiBdJ;EjB6BE,cAAA;EACA,iBAAA;EACA,kBAAA;;AiB5BF;EACE,uBAAA;;AAEF;EACE,sBAAA;;AAQF;EACE,wBAAA;;AAEF;EACE,yBAAA;;AAEF;EACE,kBAAA;;AAEF;EjB8CE,WAAA;EACA,kBAAA;EACA,iBAAA;EACA,6BAAA;EACA,SAAA;;AiBzCF;EACE,wBAAA;EACA,6BAAA;;AAOF;EACE,eAAA;;AiBnCF;EACE,mBAAA;;AAKF;AACA;AACA;AACA;ElCylBE,wBAAA;;AkCjlBF,QAHqC;EAGrC;IlCykBE,yBAAA;;EACA,KAAK;IAAK,cAAA;;EACV,EAAE;IAAQ,kBAAA;;EACV,EAAE;EACF,EAAE;IAAQ,mBAAA;;;AkCxkBZ,QAHqC,uBAAgC;EAGrE;IlCokBE,yBAAA;;EACA,KAAK;IAAK,cAAA;;EACV,EAAE;IAAQ,kBAAA;;EACV,EAAE;EACF,EAAE;IAAQ,mBAAA;;;AkCnkBZ,QAHqC,uBAAgC;EAGrE;IlC+jBE,yBAAA;;EACA,KAAK;IAAK,cAAA;;EACV,EAAE;IAAQ,kBAAA;;EACV,EAAE;EACF,EAAE;IAAQ,mBAAA;;;AkC9jBZ,QAHqC;EAGrC;IlC0jBE,yBAAA;;EACA,KAAK;IAAK,cAAA;;EACV,EAAE;IAAQ,kBAAA;;EACV,EAAE;EACF,EAAE;IAAQ,mBAAA;;;AkCxjBZ,QAHqC;EAGrC;IlC4jBE,wBAAA;;;AkCvjBF,QAHqC,uBAAgC;EAGrE;IlCujBE,wBAAA;;;AkCljBF,QAHqC,uBAAgC;EAGrE;IlCkjBE,wBAAA;;;AkC7iBF,QAHqC;EAGrC;IlC6iBE,wBAAA;;;AkCtiBF;ElCsiBE,wBAAA;;AkChiBF;EAAA;IlCwhBE,yBAAA;;EACA,KAAK;IAAK,cAAA;;EACV,EAAE;IAAQ,kBAAA;;EACV,EAAE;EACF,EAAE;IAAQ,mBAAA;;;AkCthBZ;EAAA;IlC0hBE,wBAAA","sourcesContent":["/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined in IE 8/9.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9.\n// Hide the `template` element in IE, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9, Safari 5, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari 5 and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari 5, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow displayed oddly in IE 9.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari 5.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8+, and Opera\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n  * {\n    text-shadow: none !important;\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links for images, or javascript/internal links\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n  // Once fixed, we can just straight up remove this.\n  select {\n    background: #fff !important;\n  }\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .table {\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n  .box-sizing(border-box);\n}\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n  }\n\n  &:focus {\n    .tab-focus();\n  }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top:    @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n.clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n\n// WebKit-style focus\n.tab-focus() {\n  // Default\n  outline: thin dotted;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n  width: @width;\n  height: @height;\n}\n.square(@size) {\n  .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &::-moz-placeholder           { color: @color;   // Firefox\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n  .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n   border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n     border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n   border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n     border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n//   supported browsers that have box shadow capabilities now support the\n//   standard `box-shadow` property.\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n  -webkit-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n          transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n  -webkit-transform: scale(@ratio, @ratio-y);\n      -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n          transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n          transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n  -webkit-transform: skew(@x, @y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n          transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n  resize: @direction; // Options: horizontal, vertical, both\n  overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n    background-image:  linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n  display: @display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse .panel-body {\n      border-top-color: @border;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n  background-color: @background;\n  border-color: @border;\n  color: @text-color;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a& {\n      color: @color;\n\n      .list-group-item-heading { color: inherit; }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\n    }\n  }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 8%);\n        border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      background-color: @background;\n          border-color: @border;\n    }\n  }\n\n  .badge {\n    color: @background;\n    background-color: @color;\n  }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n  background-color: @color;\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover {\n    background-color: darken(@color, 10%);\n  }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover {\n    color: darken(@color, 10%);\n  }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n  background-color: @color;\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n  display: block !important;\n  table&  { display: table; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  (@grid-gutter-width / 2);\n  padding-right: (@grid-gutter-width / 2);\n  &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-left:  (@gutter / -2);\n  margin-right: (@gutter / -2);\n  &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  @media (min-width: @screen-xs-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-xs-column-push(@columns) {\n  @media (min-width: @screen-xs-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-xs-column-pull(@columns) {\n  @media (min-width: @screen-xs-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-color;\n  }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea&,\n  select[multiple]& {\n    height: auto;\n  }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker:            lighten(#000, 13.5%); // #222\n@gray-dark:              lighten(#000, 20%);   // #333\n@gray:                   lighten(#000, 33.5%); // #555\n@gray-light:             lighten(#000, 60%);   // #999\n@gray-lighter:           lighten(#000, 93.5%); // #eee\n\n@brand-primary:         #428bca;\n@brand-success:         #5cb85c;\n@brand-info:            #5bc0de;\n@brand-warning:         #f0ad4e;\n@brand-danger:          #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for `<body>`.\n@body-bg:               #fff;\n//** Global text color on `<body>`.\n@text-color:            @gray-dark;\n\n//** Global textual link color.\n@link-color:            @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color:      darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif:  \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif:       Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the `<body>`.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for `<th>`s and `<td>`s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `<input>` background color\n@input-bg:                       #fff;\n//** `<input disabled>` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for `<input>`s\n@input-color:                    @gray;\n//** `<input>` border color\n@input-border:                   #ccc;\n//** `<input>` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  white-space: nowrap;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    .border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    .border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Align badges within list items\n  > .badge {\n    float: right;\n  }\n  > .badge + .badge {\n    margin-right: 5px;\n  }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n  color: @list-group-link-color;\n\n  .list-group-item-heading {\n    color: @list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: @list-group-hover-bg;\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: @list-group-active-color;\n    background-color: @list-group-active-bg;\n    border-color: @list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-active-text-color;\n    }\n  }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n  padding: @panel-body-padding;\n  &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  .border-top-radius((@panel-border-radius - 1));\n\n  > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  color: inherit;\n\n  > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: 10px 15px;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        .border-top-radius((@panel-border-radius - 1));\n      }\n    }\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        .border-bottom-radius((@panel-border-radius - 1));\n      }\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    .border-top-radius((@panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    .border-bottom-radius((@panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n      }\n    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    border: 0;\n    margin-bottom: 0;\n  }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  margin-bottom: @line-height-computed;\n\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: @panel-border-radius;\n    overflow: hidden; // crop contents when collapsed\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n    + .panel-collapse .panel-body {\n      border-top: 1px solid @panel-inner-border;\n    }\n  }\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid @panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid @well-border;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0,0,0,.15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: @close-color;\n    text-decoration: none;\n    cursor: pointer;\n    .opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  button& {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n  }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    .translate(0, -25%);\n    .transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0,0,0,.5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  margin-top: 15px;\n  padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: @modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n  .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: @font-size-small;\n  line-height: 1.4;\n  .opacity(0);\n\n  &.in     { .opacity(@tooltip-opacity); }\n  &.top    { margin-top:  -3px; padding: @tooltip-arrow-width 0; }\n  &.right  { margin-left:  3px; padding: 0 @tooltip-arrow-width; }\n  &.bottom { margin-top:   3px; padding: @tooltip-arrow-width 0; }\n  &.left   { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: @tooltip-max-width;\n  padding: 3px 8px;\n  color: @tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip {\n  &.top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n    bottom: 0;\n    left: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n    bottom: 0;\n    right: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-right-color: @tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-left-color: @tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n    top: 0;\n    left: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n    top: 0;\n    right: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  display: none;\n  max-width: @popover-max-width;\n  padding: 1px;\n  text-align: left; // Reset given new insertion method\n  background-color: @popover-bg;\n  background-clip: padding-box;\n  border: 1px solid @popover-fallback-border-color;\n  border: 1px solid @popover-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top     { margin-top: -@popover-arrow-width; }\n  &.right   { margin-left: @popover-arrow-width; }\n  &.bottom  { margin-top: @popover-arrow-width; }\n  &.left    { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: @popover-title-bg;\n  border-bottom: 1px solid darken(@popover-title-bg, 5%);\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n  &,\n  &:after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n.popover > .arrow {\n  border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n  border-width: @popover-arrow-width;\n  content: \"\";\n}\n\n.popover {\n  &.top > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-bottom-width: 0;\n    border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-top-color: @popover-arrow-outer-color;\n    bottom: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      bottom: 1px;\n      margin-left: -@popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: @popover-arrow-color;\n    }\n  }\n  &.right > .arrow {\n    top: 50%;\n    left: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-left-width: 0;\n    border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-right-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      left: 1px;\n      bottom: -@popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: @popover-arrow-color;\n    }\n  }\n  &.bottom > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-top-width: 0;\n    border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-bottom-color: @popover-arrow-outer-color;\n    top: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      top: 1px;\n      margin-left: -@popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: @popover-arrow-color;\n    }\n  }\n\n  &.left > .arrow {\n    top: 50%;\n    right: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-right-width: 0;\n    border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-left-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: @popover-arrow-color;\n      bottom: -@popover-arrow-width;\n    }\n  }\n\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  .responsive-invisibility();\n}\n\n.visible-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-visibility();\n  }\n}\n.visible-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-visibility();\n  }\n}\n.visible-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-visibility();\n  }\n}\n.visible-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n\n.hidden-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n  .responsive-invisibility();\n\n  @media print {\n    .responsive-visibility();\n  }\n}\n\n.hidden-print {\n  @media print {\n    .responsive-invisibility();\n  }\n}\n"]}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.min.css b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.min.css
deleted file mode 100644
index 679272d25859d55e9931101ef56656e2c50e5ea5..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/css/bootstrap.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index 4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot and /dev/null differ
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index e3e2dc739dd851f2d7d291be032e30b909e3e95f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph />
-<glyph />
-<glyph unicode="&#xd;" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
-<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
-<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
-<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
-<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
-<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
-<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
-<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
-<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
-<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
-<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
-<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
-<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
-<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
-<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
-<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
-<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
-<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
-<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
-<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
-<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
-<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
-<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
-<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
-<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
-<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
-<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
-<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
-<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
-<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
-<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
-<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
-<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
-<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
-<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
-<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
-<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
-<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
-<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
-<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
-<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
-<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
-<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
-<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
-<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
-<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
-<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
-<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
-<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
-<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
-<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
-<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
-<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
-<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
-<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
-<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
-<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
-<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
-<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
-<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
-<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
-<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
-<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
-<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
-<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
-<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
-<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
-<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
-<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
-<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
-<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
-<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
-<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
-<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
-<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
-<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
-<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
-<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
-<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
-<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
-<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
-<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
-<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
-<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
-<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
-<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
-<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
-<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
-<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
-<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
-<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
-<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
-<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
-<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
-<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
-<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
-<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
-<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
-<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
-<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
-<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
-<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
-<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
-<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
-<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
-<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
-<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
-<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
-<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
-<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
-<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
-<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
-<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
-<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
-<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
-<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
-<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
-<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
-<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
-<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
-<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
-<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
-<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
-<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
-<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
-<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
-<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
-<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
-<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
-<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
-<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 67fa00bf83801d2fa568546b982c80d27f6ef74e..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf and /dev/null differ
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 8c54182aa5d4d1ab3c9171976b615c1dcb1dc187..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff and /dev/null differ
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/js/bootstrap.js b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/js/bootstrap.js
deleted file mode 100644
index 8ae571b6da5be9c7dcd95ba25896ae39e1917445..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/js/bootstrap.js
+++ /dev/null
@@ -1,1951 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
-
-/* ========================================================================
- * Bootstrap: transition.js v3.1.1
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
-  // ============================================================
-
-  function transitionEnd() {
-    var el = document.createElement('bootstrap')
-
-    var transEndEventNames = {
-      'WebkitTransition' : 'webkitTransitionEnd',
-      'MozTransition'    : 'transitionend',
-      'OTransition'      : 'oTransitionEnd otransitionend',
-      'transition'       : 'transitionend'
-    }
-
-    for (var name in transEndEventNames) {
-      if (el.style[name] !== undefined) {
-        return { end: transEndEventNames[name] }
-      }
-    }
-
-    return false // explicit for ie8 (  ._.)
-  }
-
-  // http://blog.alexmaccaw.com/css-transitions
-  $.fn.emulateTransitionEnd = function (duration) {
-    var called = false, $el = this
-    $(this).one($.support.transition.end, function () { called = true })
-    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
-    setTimeout(callback, duration)
-    return this
-  }
-
-  $(function () {
-    $.support.transition = transitionEnd()
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.1.1
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // ALERT CLASS DEFINITION
-  // ======================
-
-  var dismiss = '[data-dismiss="alert"]'
-  var Alert   = function (el) {
-    $(el).on('click', dismiss, this.close)
-  }
-
-  Alert.prototype.close = function (e) {
-    var $this    = $(this)
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    var $parent = $(selector)
-
-    if (e) e.preventDefault()
-
-    if (!$parent.length) {
-      $parent = $this.hasClass('alert') ? $this : $this.parent()
-    }
-
-    $parent.trigger(e = $.Event('close.bs.alert'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      $parent.trigger('closed.bs.alert').remove()
-    }
-
-    $.support.transition && $parent.hasClass('fade') ?
-      $parent
-        .one($.support.transition.end, removeElement)
-        .emulateTransitionEnd(150) :
-      removeElement()
-  }
-
-
-  // ALERT PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.alert
-
-  $.fn.alert = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.alert')
-
-      if (!data) $this.data('bs.alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.alert.Constructor = Alert
-
-
-  // ALERT NO CONFLICT
-  // =================
-
-  $.fn.alert.noConflict = function () {
-    $.fn.alert = old
-    return this
-  }
-
-
-  // ALERT DATA-API
-  // ==============
-
-  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.1.1
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // BUTTON PUBLIC CLASS DEFINITION
-  // ==============================
-
-  var Button = function (element, options) {
-    this.$element  = $(element)
-    this.options   = $.extend({}, Button.DEFAULTS, options)
-    this.isLoading = false
-  }
-
-  Button.DEFAULTS = {
-    loadingText: 'loading...'
-  }
-
-  Button.prototype.setState = function (state) {
-    var d    = 'disabled'
-    var $el  = this.$element
-    var val  = $el.is('input') ? 'val' : 'html'
-    var data = $el.data()
-
-    state = state + 'Text'
-
-    if (!data.resetText) $el.data('resetText', $el[val]())
-
-    $el[val](data[state] || this.options[state])
-
-    // push to event loop to allow forms to submit
-    setTimeout($.proxy(function () {
-      if (state == 'loadingText') {
-        this.isLoading = true
-        $el.addClass(d).attr(d, d)
-      } else if (this.isLoading) {
-        this.isLoading = false
-        $el.removeClass(d).removeAttr(d)
-      }
-    }, this), 0)
-  }
-
-  Button.prototype.toggle = function () {
-    var changed = true
-    var $parent = this.$element.closest('[data-toggle="buttons"]')
-
-    if ($parent.length) {
-      var $input = this.$element.find('input')
-      if ($input.prop('type') == 'radio') {
-        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
-        else $parent.find('.active').removeClass('active')
-      }
-      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
-    }
-
-    if (changed) this.$element.toggleClass('active')
-  }
-
-
-  // BUTTON PLUGIN DEFINITION
-  // ========================
-
-  var old = $.fn.button
-
-  $.fn.button = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.button')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
-      if (option == 'toggle') data.toggle()
-      else if (option) data.setState(option)
-    })
-  }
-
-  $.fn.button.Constructor = Button
-
-
-  // BUTTON NO CONFLICT
-  // ==================
-
-  $.fn.button.noConflict = function () {
-    $.fn.button = old
-    return this
-  }
-
-
-  // BUTTON DATA-API
-  // ===============
-
-  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
-    var $btn = $(e.target)
-    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-    $btn.button('toggle')
-    e.preventDefault()
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.1.1
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // CAROUSEL CLASS DEFINITION
-  // =========================
-
-  var Carousel = function (element, options) {
-    this.$element    = $(element)
-    this.$indicators = this.$element.find('.carousel-indicators')
-    this.options     = options
-    this.paused      =
-    this.sliding     =
-    this.interval    =
-    this.$active     =
-    this.$items      = null
-
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter', $.proxy(this.pause, this))
-      .on('mouseleave', $.proxy(this.cycle, this))
-  }
-
-  Carousel.DEFAULTS = {
-    interval: 5000,
-    pause: 'hover',
-    wrap: true
-  }
-
-  Carousel.prototype.cycle =  function (e) {
-    e || (this.paused = false)
-
-    this.interval && clearInterval(this.interval)
-
-    this.options.interval
-      && !this.paused
-      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
-    return this
-  }
-
-  Carousel.prototype.getActiveIndex = function () {
-    this.$active = this.$element.find('.item.active')
-    this.$items  = this.$active.parent().children()
-
-    return this.$items.index(this.$active)
-  }
-
-  Carousel.prototype.to = function (pos) {
-    var that        = this
-    var activeIndex = this.getActiveIndex()
-
-    if (pos > (this.$items.length - 1) || pos < 0) return
-
-    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
-    if (activeIndex == pos) return this.pause().cycle()
-
-    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
-  }
-
-  Carousel.prototype.pause = function (e) {
-    e || (this.paused = true)
-
-    if (this.$element.find('.next, .prev').length && $.support.transition) {
-      this.$element.trigger($.support.transition.end)
-      this.cycle(true)
-    }
-
-    this.interval = clearInterval(this.interval)
-
-    return this
-  }
-
-  Carousel.prototype.next = function () {
-    if (this.sliding) return
-    return this.slide('next')
-  }
-
-  Carousel.prototype.prev = function () {
-    if (this.sliding) return
-    return this.slide('prev')
-  }
-
-  Carousel.prototype.slide = function (type, next) {
-    var $active   = this.$element.find('.item.active')
-    var $next     = next || $active[type]()
-    var isCycling = this.interval
-    var direction = type == 'next' ? 'left' : 'right'
-    var fallback  = type == 'next' ? 'first' : 'last'
-    var that      = this
-
-    if (!$next.length) {
-      if (!this.options.wrap) return
-      $next = this.$element.find('.item')[fallback]()
-    }
-
-    if ($next.hasClass('active')) return this.sliding = false
-
-    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
-    this.$element.trigger(e)
-    if (e.isDefaultPrevented()) return
-
-    this.sliding = true
-
-    isCycling && this.pause()
-
-    if (this.$indicators.length) {
-      this.$indicators.find('.active').removeClass('active')
-      this.$element.one('slid.bs.carousel', function () {
-        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
-        $nextIndicator && $nextIndicator.addClass('active')
-      })
-    }
-
-    if ($.support.transition && this.$element.hasClass('slide')) {
-      $next.addClass(type)
-      $next[0].offsetWidth // force reflow
-      $active.addClass(direction)
-      $next.addClass(direction)
-      $active
-        .one($.support.transition.end, function () {
-          $next.removeClass([type, direction].join(' ')).addClass('active')
-          $active.removeClass(['active', direction].join(' '))
-          that.sliding = false
-          setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
-        })
-        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
-    } else {
-      $active.removeClass('active')
-      $next.addClass('active')
-      this.sliding = false
-      this.$element.trigger('slid.bs.carousel')
-    }
-
-    isCycling && this.cycle()
-
-    return this
-  }
-
-
-  // CAROUSEL PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.carousel
-
-  $.fn.carousel = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.carousel')
-      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
-      var action  = typeof option == 'string' ? option : options.slide
-
-      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (action) data[action]()
-      else if (options.interval) data.pause().cycle()
-    })
-  }
-
-  $.fn.carousel.Constructor = Carousel
-
-
-  // CAROUSEL NO CONFLICT
-  // ====================
-
-  $.fn.carousel.noConflict = function () {
-    $.fn.carousel = old
-    return this
-  }
-
-
-  // CAROUSEL DATA-API
-  // =================
-
-  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
-    var $this   = $(this), href
-    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-    var options = $.extend({}, $target.data(), $this.data())
-    var slideIndex = $this.attr('data-slide-to')
-    if (slideIndex) options.interval = false
-
-    $target.carousel(options)
-
-    if (slideIndex = $this.attr('data-slide-to')) {
-      $target.data('bs.carousel').to(slideIndex)
-    }
-
-    e.preventDefault()
-  })
-
-  $(window).on('load', function () {
-    $('[data-ride="carousel"]').each(function () {
-      var $carousel = $(this)
-      $carousel.carousel($carousel.data())
-    })
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.1.1
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // COLLAPSE PUBLIC CLASS DEFINITION
-  // ================================
-
-  var Collapse = function (element, options) {
-    this.$element      = $(element)
-    this.options       = $.extend({}, Collapse.DEFAULTS, options)
-    this.transitioning = null
-
-    if (this.options.parent) this.$parent = $(this.options.parent)
-    if (this.options.toggle) this.toggle()
-  }
-
-  Collapse.DEFAULTS = {
-    toggle: true
-  }
-
-  Collapse.prototype.dimension = function () {
-    var hasWidth = this.$element.hasClass('width')
-    return hasWidth ? 'width' : 'height'
-  }
-
-  Collapse.prototype.show = function () {
-    if (this.transitioning || this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('show.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var actives = this.$parent && this.$parent.find('> .panel > .in')
-
-    if (actives && actives.length) {
-      var hasData = actives.data('bs.collapse')
-      if (hasData && hasData.transitioning) return
-      actives.collapse('hide')
-      hasData || actives.data('bs.collapse', null)
-    }
-
-    var dimension = this.dimension()
-
-    this.$element
-      .removeClass('collapse')
-      .addClass('collapsing')
-      [dimension](0)
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.$element
-        .removeClass('collapsing')
-        .addClass('collapse in')
-        [dimension]('auto')
-      this.transitioning = 0
-      this.$element.trigger('shown.bs.collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
-    this.$element
-      .one($.support.transition.end, $.proxy(complete, this))
-      .emulateTransitionEnd(350)
-      [dimension](this.$element[0][scrollSize])
-  }
-
-  Collapse.prototype.hide = function () {
-    if (this.transitioning || !this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('hide.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var dimension = this.dimension()
-
-    this.$element
-      [dimension](this.$element[dimension]())
-      [0].offsetHeight
-
-    this.$element
-      .addClass('collapsing')
-      .removeClass('collapse')
-      .removeClass('in')
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.transitioning = 0
-      this.$element
-        .trigger('hidden.bs.collapse')
-        .removeClass('collapsing')
-        .addClass('collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    this.$element
-      [dimension](0)
-      .one($.support.transition.end, $.proxy(complete, this))
-      .emulateTransitionEnd(350)
-  }
-
-  Collapse.prototype.toggle = function () {
-    this[this.$element.hasClass('in') ? 'hide' : 'show']()
-  }
-
-
-  // COLLAPSE PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.collapse
-
-  $.fn.collapse = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.collapse')
-      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data && options.toggle && option == 'show') option = !option
-      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.collapse.Constructor = Collapse
-
-
-  // COLLAPSE NO CONFLICT
-  // ====================
-
-  $.fn.collapse.noConflict = function () {
-    $.fn.collapse = old
-    return this
-  }
-
-
-  // COLLAPSE DATA-API
-  // =================
-
-  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
-    var $this   = $(this), href
-    var target  = $this.attr('data-target')
-        || e.preventDefault()
-        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
-    var $target = $(target)
-    var data    = $target.data('bs.collapse')
-    var option  = data ? 'toggle' : $this.data()
-    var parent  = $this.attr('data-parent')
-    var $parent = parent && $(parent)
-
-    if (!data || !data.transitioning) {
-      if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
-      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
-    }
-
-    $target.collapse(option)
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.1.1
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // DROPDOWN CLASS DEFINITION
-  // =========================
-
-  var backdrop = '.dropdown-backdrop'
-  var toggle   = '[data-toggle=dropdown]'
-  var Dropdown = function (element) {
-    $(element).on('click.bs.dropdown', this.toggle)
-  }
-
-  Dropdown.prototype.toggle = function (e) {
-    var $this = $(this)
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    clearMenus()
-
-    if (!isActive) {
-      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
-        // if mobile we use a backdrop because click events don't delegate
-        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
-      }
-
-      var relatedTarget = { relatedTarget: this }
-      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
-      if (e.isDefaultPrevented()) return
-
-      $parent
-        .toggleClass('open')
-        .trigger('shown.bs.dropdown', relatedTarget)
-
-      $this.focus()
-    }
-
-    return false
-  }
-
-  Dropdown.prototype.keydown = function (e) {
-    if (!/(38|40|27)/.test(e.keyCode)) return
-
-    var $this = $(this)
-
-    e.preventDefault()
-    e.stopPropagation()
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    if (!isActive || (isActive && e.keyCode == 27)) {
-      if (e.which == 27) $parent.find(toggle).focus()
-      return $this.click()
-    }
-
-    var desc = ' li:not(.divider):visible a'
-    var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
-
-    if (!$items.length) return
-
-    var index = $items.index($items.filter(':focus'))
-
-    if (e.keyCode == 38 && index > 0)                 index--                        // up
-    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
-    if (!~index)                                      index = 0
-
-    $items.eq(index).focus()
-  }
-
-  function clearMenus(e) {
-    $(backdrop).remove()
-    $(toggle).each(function () {
-      var $parent = getParent($(this))
-      var relatedTarget = { relatedTarget: this }
-      if (!$parent.hasClass('open')) return
-      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-      if (e.isDefaultPrevented()) return
-      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
-    })
-  }
-
-  function getParent($this) {
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    var $parent = selector && $(selector)
-
-    return $parent && $parent.length ? $parent : $this.parent()
-  }
-
-
-  // DROPDOWN PLUGIN DEFINITION
-  // ==========================
-
-  var old = $.fn.dropdown
-
-  $.fn.dropdown = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.dropdown')
-
-      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.dropdown.Constructor = Dropdown
-
-
-  // DROPDOWN NO CONFLICT
-  // ====================
-
-  $.fn.dropdown.noConflict = function () {
-    $.fn.dropdown = old
-    return this
-  }
-
-
-  // APPLY TO STANDARD DROPDOWN ELEMENTS
-  // ===================================
-
-  $(document)
-    .on('click.bs.dropdown.data-api', clearMenus)
-    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
-    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.1.1
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // MODAL CLASS DEFINITION
-  // ======================
-
-  var Modal = function (element, options) {
-    this.options   = options
-    this.$element  = $(element)
-    this.$backdrop =
-    this.isShown   = null
-
-    if (this.options.remote) {
-      this.$element
-        .find('.modal-content')
-        .load(this.options.remote, $.proxy(function () {
-          this.$element.trigger('loaded.bs.modal')
-        }, this))
-    }
-  }
-
-  Modal.DEFAULTS = {
-    backdrop: true,
-    keyboard: true,
-    show: true
-  }
-
-  Modal.prototype.toggle = function (_relatedTarget) {
-    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
-  }
-
-  Modal.prototype.show = function (_relatedTarget) {
-    var that = this
-    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
-    this.$element.trigger(e)
-
-    if (this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = true
-
-    this.escape()
-
-    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
-    this.backdrop(function () {
-      var transition = $.support.transition && that.$element.hasClass('fade')
-
-      if (!that.$element.parent().length) {
-        that.$element.appendTo(document.body) // don't move modals dom position
-      }
-
-      that.$element
-        .show()
-        .scrollTop(0)
-
-      if (transition) {
-        that.$element[0].offsetWidth // force reflow
-      }
-
-      that.$element
-        .addClass('in')
-        .attr('aria-hidden', false)
-
-      that.enforceFocus()
-
-      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
-      transition ?
-        that.$element.find('.modal-dialog') // wait for modal to slide in
-          .one($.support.transition.end, function () {
-            that.$element.focus().trigger(e)
-          })
-          .emulateTransitionEnd(300) :
-        that.$element.focus().trigger(e)
-    })
-  }
-
-  Modal.prototype.hide = function (e) {
-    if (e) e.preventDefault()
-
-    e = $.Event('hide.bs.modal')
-
-    this.$element.trigger(e)
-
-    if (!this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = false
-
-    this.escape()
-
-    $(document).off('focusin.bs.modal')
-
-    this.$element
-      .removeClass('in')
-      .attr('aria-hidden', true)
-      .off('click.dismiss.bs.modal')
-
-    $.support.transition && this.$element.hasClass('fade') ?
-      this.$element
-        .one($.support.transition.end, $.proxy(this.hideModal, this))
-        .emulateTransitionEnd(300) :
-      this.hideModal()
-  }
-
-  Modal.prototype.enforceFocus = function () {
-    $(document)
-      .off('focusin.bs.modal') // guard against infinite focus loop
-      .on('focusin.bs.modal', $.proxy(function (e) {
-        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
-          this.$element.focus()
-        }
-      }, this))
-  }
-
-  Modal.prototype.escape = function () {
-    if (this.isShown && this.options.keyboard) {
-      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
-        e.which == 27 && this.hide()
-      }, this))
-    } else if (!this.isShown) {
-      this.$element.off('keyup.dismiss.bs.modal')
-    }
-  }
-
-  Modal.prototype.hideModal = function () {
-    var that = this
-    this.$element.hide()
-    this.backdrop(function () {
-      that.removeBackdrop()
-      that.$element.trigger('hidden.bs.modal')
-    })
-  }
-
-  Modal.prototype.removeBackdrop = function () {
-    this.$backdrop && this.$backdrop.remove()
-    this.$backdrop = null
-  }
-
-  Modal.prototype.backdrop = function (callback) {
-    var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
-    if (this.isShown && this.options.backdrop) {
-      var doAnimate = $.support.transition && animate
-
-      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
-        .appendTo(document.body)
-
-      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
-        if (e.target !== e.currentTarget) return
-        this.options.backdrop == 'static'
-          ? this.$element[0].focus.call(this.$element[0])
-          : this.hide.call(this)
-      }, this))
-
-      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
-      this.$backdrop.addClass('in')
-
-      if (!callback) return
-
-      doAnimate ?
-        this.$backdrop
-          .one($.support.transition.end, callback)
-          .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (!this.isShown && this.$backdrop) {
-      this.$backdrop.removeClass('in')
-
-      $.support.transition && this.$element.hasClass('fade') ?
-        this.$backdrop
-          .one($.support.transition.end, callback)
-          .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (callback) {
-      callback()
-    }
-  }
-
-
-  // MODAL PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.modal
-
-  $.fn.modal = function (option, _relatedTarget) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.modal')
-      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
-      if (typeof option == 'string') data[option](_relatedTarget)
-      else if (options.show) data.show(_relatedTarget)
-    })
-  }
-
-  $.fn.modal.Constructor = Modal
-
-
-  // MODAL NO CONFLICT
-  // =================
-
-  $.fn.modal.noConflict = function () {
-    $.fn.modal = old
-    return this
-  }
-
-
-  // MODAL DATA-API
-  // ==============
-
-  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
-    var $this   = $(this)
-    var href    = $this.attr('href')
-    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
-    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
-    if ($this.is('a')) e.preventDefault()
-
-    $target
-      .modal(option, this)
-      .one('hide', function () {
-        $this.is(':visible') && $this.focus()
-      })
-  })
-
-  $(document)
-    .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
-    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.1.1
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // TOOLTIP PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Tooltip = function (element, options) {
-    this.type       =
-    this.options    =
-    this.enabled    =
-    this.timeout    =
-    this.hoverState =
-    this.$element   = null
-
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.DEFAULTS = {
-    animation: true,
-    placement: 'top',
-    selector: false,
-    template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
-    trigger: 'hover focus',
-    title: '',
-    delay: 0,
-    html: false,
-    container: false
-  }
-
-  Tooltip.prototype.init = function (type, element, options) {
-    this.enabled  = true
-    this.type     = type
-    this.$element = $(element)
-    this.options  = this.getOptions(options)
-
-    var triggers = this.options.trigger.split(' ')
-
-    for (var i = triggers.length; i--;) {
-      var trigger = triggers[i]
-
-      if (trigger == 'click') {
-        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
-      } else if (trigger != 'manual') {
-        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
-        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
-        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
-        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
-      }
-    }
-
-    this.options.selector ?
-      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-      this.fixTitle()
-  }
-
-  Tooltip.prototype.getDefaults = function () {
-    return Tooltip.DEFAULTS
-  }
-
-  Tooltip.prototype.getOptions = function (options) {
-    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
-    if (options.delay && typeof options.delay == 'number') {
-      options.delay = {
-        show: options.delay,
-        hide: options.delay
-      }
-    }
-
-    return options
-  }
-
-  Tooltip.prototype.getDelegateOptions = function () {
-    var options  = {}
-    var defaults = this.getDefaults()
-
-    this._options && $.each(this._options, function (key, value) {
-      if (defaults[key] != value) options[key] = value
-    })
-
-    return options
-  }
-
-  Tooltip.prototype.enter = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'in'
-
-    if (!self.options.delay || !self.options.delay.show) return self.show()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'in') self.show()
-    }, self.options.delay.show)
-  }
-
-  Tooltip.prototype.leave = function (obj) {
-    var self = obj instanceof this.constructor ?
-      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
-
-    clearTimeout(self.timeout)
-
-    self.hoverState = 'out'
-
-    if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-    self.timeout = setTimeout(function () {
-      if (self.hoverState == 'out') self.hide()
-    }, self.options.delay.hide)
-  }
-
-  Tooltip.prototype.show = function () {
-    var e = $.Event('show.bs.' + this.type)
-
-    if (this.hasContent() && this.enabled) {
-      this.$element.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-      var that = this;
-
-      var $tip = this.tip()
-
-      this.setContent()
-
-      if (this.options.animation) $tip.addClass('fade')
-
-      var placement = typeof this.options.placement == 'function' ?
-        this.options.placement.call(this, $tip[0], this.$element[0]) :
-        this.options.placement
-
-      var autoToken = /\s?auto?\s?/i
-      var autoPlace = autoToken.test(placement)
-      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
-      $tip
-        .detach()
-        .css({ top: 0, left: 0, display: 'block' })
-        .addClass(placement)
-
-      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
-      var pos          = this.getPosition()
-      var actualWidth  = $tip[0].offsetWidth
-      var actualHeight = $tip[0].offsetHeight
-
-      if (autoPlace) {
-        var $parent = this.$element.parent()
-
-        var orgPlacement = placement
-        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop
-        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()
-        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
-        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left
-
-        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :
-                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :
-                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :
-                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :
-                    placement
-
-        $tip
-          .removeClass(orgPlacement)
-          .addClass(placement)
-      }
-
-      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
-      this.applyPlacement(calculatedOffset, placement)
-      this.hoverState = null
-
-      var complete = function() {
-        that.$element.trigger('shown.bs.' + that.type)
-      }
-
-      $.support.transition && this.$tip.hasClass('fade') ?
-        $tip
-          .one($.support.transition.end, complete)
-          .emulateTransitionEnd(150) :
-        complete()
-    }
-  }
-
-  Tooltip.prototype.applyPlacement = function (offset, placement) {
-    var replace
-    var $tip   = this.tip()
-    var width  = $tip[0].offsetWidth
-    var height = $tip[0].offsetHeight
-
-    // manually read margins because getBoundingClientRect includes difference
-    var marginTop = parseInt($tip.css('margin-top'), 10)
-    var marginLeft = parseInt($tip.css('margin-left'), 10)
-
-    // we must check for NaN for ie 8/9
-    if (isNaN(marginTop))  marginTop  = 0
-    if (isNaN(marginLeft)) marginLeft = 0
-
-    offset.top  = offset.top  + marginTop
-    offset.left = offset.left + marginLeft
-
-    // $.fn.offset doesn't round pixel values
-    // so we use setOffset directly with our own function B-0
-    $.offset.setOffset($tip[0], $.extend({
-      using: function (props) {
-        $tip.css({
-          top: Math.round(props.top),
-          left: Math.round(props.left)
-        })
-      }
-    }, offset), 0)
-
-    $tip.addClass('in')
-
-    // check to see if placing tip in new offset caused the tip to resize itself
-    var actualWidth  = $tip[0].offsetWidth
-    var actualHeight = $tip[0].offsetHeight
-
-    if (placement == 'top' && actualHeight != height) {
-      replace = true
-      offset.top = offset.top + height - actualHeight
-    }
-
-    if (/bottom|top/.test(placement)) {
-      var delta = 0
-
-      if (offset.left < 0) {
-        delta       = offset.left * -2
-        offset.left = 0
-
-        $tip.offset(offset)
-
-        actualWidth  = $tip[0].offsetWidth
-        actualHeight = $tip[0].offsetHeight
-      }
-
-      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
-    } else {
-      this.replaceArrow(actualHeight - height, actualHeight, 'top')
-    }
-
-    if (replace) $tip.offset(offset)
-  }
-
-  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
-    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
-  }
-
-  Tooltip.prototype.setContent = function () {
-    var $tip  = this.tip()
-    var title = this.getTitle()
-
-    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
-    $tip.removeClass('fade in top bottom left right')
-  }
-
-  Tooltip.prototype.hide = function () {
-    var that = this
-    var $tip = this.tip()
-    var e    = $.Event('hide.bs.' + this.type)
-
-    function complete() {
-      if (that.hoverState != 'in') $tip.detach()
-      that.$element.trigger('hidden.bs.' + that.type)
-    }
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    $tip.removeClass('in')
-
-    $.support.transition && this.$tip.hasClass('fade') ?
-      $tip
-        .one($.support.transition.end, complete)
-        .emulateTransitionEnd(150) :
-      complete()
-
-    this.hoverState = null
-
-    return this
-  }
-
-  Tooltip.prototype.fixTitle = function () {
-    var $e = this.$element
-    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
-      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
-    }
-  }
-
-  Tooltip.prototype.hasContent = function () {
-    return this.getTitle()
-  }
-
-  Tooltip.prototype.getPosition = function () {
-    var el = this.$element[0]
-    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
-      width: el.offsetWidth,
-      height: el.offsetHeight
-    }, this.$element.offset())
-  }
-
-  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
-    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :
-           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
-        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
-  }
-
-  Tooltip.prototype.getTitle = function () {
-    var title
-    var $e = this.$element
-    var o  = this.options
-
-    title = $e.attr('data-original-title')
-      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-    return title
-  }
-
-  Tooltip.prototype.tip = function () {
-    return this.$tip = this.$tip || $(this.options.template)
-  }
-
-  Tooltip.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
-  }
-
-  Tooltip.prototype.validate = function () {
-    if (!this.$element[0].parentNode) {
-      this.hide()
-      this.$element = null
-      this.options  = null
-    }
-  }
-
-  Tooltip.prototype.enable = function () {
-    this.enabled = true
-  }
-
-  Tooltip.prototype.disable = function () {
-    this.enabled = false
-  }
-
-  Tooltip.prototype.toggleEnabled = function () {
-    this.enabled = !this.enabled
-  }
-
-  Tooltip.prototype.toggle = function (e) {
-    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
-    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
-  }
-
-  Tooltip.prototype.destroy = function () {
-    clearTimeout(this.timeout)
-    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
-  }
-
-
-  // TOOLTIP PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.tooltip
-
-  $.fn.tooltip = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.tooltip')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tooltip.Constructor = Tooltip
-
-
-  // TOOLTIP NO CONFLICT
-  // ===================
-
-  $.fn.tooltip.noConflict = function () {
-    $.fn.tooltip = old
-    return this
-  }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.1.1
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // POPOVER PUBLIC CLASS DEFINITION
-  // ===============================
-
-  var Popover = function (element, options) {
-    this.init('popover', element, options)
-  }
-
-  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
-  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
-    placement: 'right',
-    trigger: 'click',
-    content: '',
-    template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
-  })
-
-
-  // NOTE: POPOVER EXTENDS tooltip.js
-  // ================================
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
-  Popover.prototype.constructor = Popover
-
-  Popover.prototype.getDefaults = function () {
-    return Popover.DEFAULTS
-  }
-
-  Popover.prototype.setContent = function () {
-    var $tip    = this.tip()
-    var title   = this.getTitle()
-    var content = this.getContent()
-
-    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
-    $tip.find('.popover-content')[ // we use append for html objects to maintain js events
-      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
-    ](content)
-
-    $tip.removeClass('fade top bottom left right in')
-
-    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
-    // this manually by checking the contents.
-    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
-  }
-
-  Popover.prototype.hasContent = function () {
-    return this.getTitle() || this.getContent()
-  }
-
-  Popover.prototype.getContent = function () {
-    var $e = this.$element
-    var o  = this.options
-
-    return $e.attr('data-content')
-      || (typeof o.content == 'function' ?
-            o.content.call($e[0]) :
-            o.content)
-  }
-
-  Popover.prototype.arrow = function () {
-    return this.$arrow = this.$arrow || this.tip().find('.arrow')
-  }
-
-  Popover.prototype.tip = function () {
-    if (!this.$tip) this.$tip = $(this.options.template)
-    return this.$tip
-  }
-
-
-  // POPOVER PLUGIN DEFINITION
-  // =========================
-
-  var old = $.fn.popover
-
-  $.fn.popover = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.popover')
-      var options = typeof option == 'object' && option
-
-      if (!data && option == 'destroy') return
-      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.popover.Constructor = Popover
-
-
-  // POPOVER NO CONFLICT
-  // ===================
-
-  $.fn.popover.noConflict = function () {
-    $.fn.popover = old
-    return this
-  }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.1.1
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // SCROLLSPY CLASS DEFINITION
-  // ==========================
-
-  function ScrollSpy(element, options) {
-    var href
-    var process  = $.proxy(this.process, this)
-
-    this.$element       = $(element).is('body') ? $(window) : $(element)
-    this.$body          = $('body')
-    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
-    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
-    this.selector       = (this.options.target
-      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-      || '') + ' .nav li > a'
-    this.offsets        = $([])
-    this.targets        = $([])
-    this.activeTarget   = null
-
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.DEFAULTS = {
-    offset: 10
-  }
-
-  ScrollSpy.prototype.refresh = function () {
-    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
-
-    this.offsets = $([])
-    this.targets = $([])
-
-    var self     = this
-    var $targets = this.$body
-      .find(this.selector)
-      .map(function () {
-        var $el   = $(this)
-        var href  = $el.data('target') || $el.attr('href')
-        var $href = /^#./.test(href) && $(href)
-
-        return ($href
-          && $href.length
-          && $href.is(':visible')
-          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
-      })
-      .sort(function (a, b) { return a[0] - b[0] })
-      .each(function () {
-        self.offsets.push(this[0])
-        self.targets.push(this[1])
-      })
-  }
-
-  ScrollSpy.prototype.process = function () {
-    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
-    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
-    var maxScroll    = scrollHeight - this.$scrollElement.height()
-    var offsets      = this.offsets
-    var targets      = this.targets
-    var activeTarget = this.activeTarget
-    var i
-
-    if (scrollTop >= maxScroll) {
-      return activeTarget != (i = targets.last()[0]) && this.activate(i)
-    }
-
-    if (activeTarget && scrollTop <= offsets[0]) {
-      return activeTarget != (i = targets[0]) && this.activate(i)
-    }
-
-    for (i = offsets.length; i--;) {
-      activeTarget != targets[i]
-        && scrollTop >= offsets[i]
-        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
-        && this.activate( targets[i] )
-    }
-  }
-
-  ScrollSpy.prototype.activate = function (target) {
-    this.activeTarget = target
-
-    $(this.selector)
-      .parentsUntil(this.options.target, '.active')
-      .removeClass('active')
-
-    var selector = this.selector +
-        '[data-target="' + target + '"],' +
-        this.selector + '[href="' + target + '"]'
-
-    var active = $(selector)
-      .parents('li')
-      .addClass('active')
-
-    if (active.parent('.dropdown-menu').length) {
-      active = active
-        .closest('li.dropdown')
-        .addClass('active')
-    }
-
-    active.trigger('activate.bs.scrollspy')
-  }
-
-
-  // SCROLLSPY PLUGIN DEFINITION
-  // ===========================
-
-  var old = $.fn.scrollspy
-
-  $.fn.scrollspy = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.scrollspy')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.scrollspy.Constructor = ScrollSpy
-
-
-  // SCROLLSPY NO CONFLICT
-  // =====================
-
-  $.fn.scrollspy.noConflict = function () {
-    $.fn.scrollspy = old
-    return this
-  }
-
-
-  // SCROLLSPY DATA-API
-  // ==================
-
-  $(window).on('load', function () {
-    $('[data-spy="scroll"]').each(function () {
-      var $spy = $(this)
-      $spy.scrollspy($spy.data())
-    })
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.1.1
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // TAB CLASS DEFINITION
-  // ====================
-
-  var Tab = function (element) {
-    this.element = $(element)
-  }
-
-  Tab.prototype.show = function () {
-    var $this    = this.element
-    var $ul      = $this.closest('ul:not(.dropdown-menu)')
-    var selector = $this.data('target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    if ($this.parent('li').hasClass('active')) return
-
-    var previous = $ul.find('.active:last a')[0]
-    var e        = $.Event('show.bs.tab', {
-      relatedTarget: previous
-    })
-
-    $this.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    var $target = $(selector)
-
-    this.activate($this.parent('li'), $ul)
-    this.activate($target, $target.parent(), function () {
-      $this.trigger({
-        type: 'shown.bs.tab',
-        relatedTarget: previous
-      })
-    })
-  }
-
-  Tab.prototype.activate = function (element, container, callback) {
-    var $active    = container.find('> .active')
-    var transition = callback
-      && $.support.transition
-      && $active.hasClass('fade')
-
-    function next() {
-      $active
-        .removeClass('active')
-        .find('> .dropdown-menu > .active')
-        .removeClass('active')
-
-      element.addClass('active')
-
-      if (transition) {
-        element[0].offsetWidth // reflow for transition
-        element.addClass('in')
-      } else {
-        element.removeClass('fade')
-      }
-
-      if (element.parent('.dropdown-menu')) {
-        element.closest('li.dropdown').addClass('active')
-      }
-
-      callback && callback()
-    }
-
-    transition ?
-      $active
-        .one($.support.transition.end, next)
-        .emulateTransitionEnd(150) :
-      next()
-
-    $active.removeClass('in')
-  }
-
-
-  // TAB PLUGIN DEFINITION
-  // =====================
-
-  var old = $.fn.tab
-
-  $.fn.tab = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.tab')
-
-      if (!data) $this.data('bs.tab', (data = new Tab(this)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tab.Constructor = Tab
-
-
-  // TAB NO CONFLICT
-  // ===============
-
-  $.fn.tab.noConflict = function () {
-    $.fn.tab = old
-    return this
-  }
-
-
-  // TAB DATA-API
-  // ============
-
-  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
-    e.preventDefault()
-    $(this).tab('show')
-  })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.1.1
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // AFFIX CLASS DEFINITION
-  // ======================
-
-  var Affix = function (element, options) {
-    this.options = $.extend({}, Affix.DEFAULTS, options)
-    this.$window = $(window)
-      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
-      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
-
-    this.$element     = $(element)
-    this.affixed      =
-    this.unpin        =
-    this.pinnedOffset = null
-
-    this.checkPosition()
-  }
-
-  Affix.RESET = 'affix affix-top affix-bottom'
-
-  Affix.DEFAULTS = {
-    offset: 0
-  }
-
-  Affix.prototype.getPinnedOffset = function () {
-    if (this.pinnedOffset) return this.pinnedOffset
-    this.$element.removeClass(Affix.RESET).addClass('affix')
-    var scrollTop = this.$window.scrollTop()
-    var position  = this.$element.offset()
-    return (this.pinnedOffset = position.top - scrollTop)
-  }
-
-  Affix.prototype.checkPositionWithEventLoop = function () {
-    setTimeout($.proxy(this.checkPosition, this), 1)
-  }
-
-  Affix.prototype.checkPosition = function () {
-    if (!this.$element.is(':visible')) return
-
-    var scrollHeight = $(document).height()
-    var scrollTop    = this.$window.scrollTop()
-    var position     = this.$element.offset()
-    var offset       = this.options.offset
-    var offsetTop    = offset.top
-    var offsetBottom = offset.bottom
-
-    if (this.affixed == 'top') position.top += scrollTop
-
-    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
-    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)
-    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
-    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :
-                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
-                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false
-
-    if (this.affixed === affix) return
-    if (this.unpin) this.$element.css('top', '')
-
-    var affixType = 'affix' + (affix ? '-' + affix : '')
-    var e         = $.Event(affixType + '.bs.affix')
-
-    this.$element.trigger(e)
-
-    if (e.isDefaultPrevented()) return
-
-    this.affixed = affix
-    this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
-    this.$element
-      .removeClass(Affix.RESET)
-      .addClass(affixType)
-      .trigger($.Event(affixType.replace('affix', 'affixed')))
-
-    if (affix == 'bottom') {
-      this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
-    }
-  }
-
-
-  // AFFIX PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.affix
-
-  $.fn.affix = function (option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.affix')
-      var options = typeof option == 'object' && option
-
-      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.affix.Constructor = Affix
-
-
-  // AFFIX NO CONFLICT
-  // =================
-
-  $.fn.affix.noConflict = function () {
-    $.fn.affix = old
-    return this
-  }
-
-
-  // AFFIX DATA-API
-  // ==============
-
-  $(window).on('load', function () {
-    $('[data-spy="affix"]').each(function () {
-      var $spy = $(this)
-      var data = $spy.data()
-
-      data.offset = data.offset || {}
-
-      if (data.offsetBottom) data.offset.bottom = data.offsetBottom
-      if (data.offsetTop)    data.offset.top    = data.offsetTop
-
-      $spy.affix(data)
-    })
-  })
-
-}(jQuery);
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/js/bootstrap.min.js b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/js/bootstrap.min.js
deleted file mode 100644
index b04a0e82fffee109e8cd5e48b3f3aa2a9b2aceff..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/bootstrap/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu], [role=listbox]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHeight:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;if("top"==c&&k!=g&&(d=!0,b.top=b.top+g-k),/bottom|top/.test(c)){var l=0;b.left<0&&(l=-2*b.left,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.css b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.css
deleted file mode 100644
index d0a7cd74544aa8c19276818f7c03f4295b269a1b..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.css
+++ /dev/null
@@ -1,1657 +0,0 @@
-/*!
- * Fuel UX v3.0.2 
- * Copyright 2012-2014 ExactTarget
- * Licensed under the BSD-3-Clause license ()
- */
-
-.fuelux {
-  
-}@charset "UTF-8";
-.fuelux .clearfix {
-  *zoom: 1;
-}
-.fuelux .clearfix:before,
-.fuelux .clearfix:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .clearfix:after {
-  clear: both;
-}
-@font-face {
-  font-family: "fuelux";
-  src: url("../fonts/fuelux.eot");
-  src: url("../fonts/fuelux.eot?#iefix") format("embedded-opentype"), url("../fonts/fuelux.woff") format("woff"), url("../fonts/fuelux.ttf") format("truetype"), url("../fonts/fuelux.svg#fuelux") format("svg");
-  font-weight: normal;
-  font-style: normal;
-}
-.fuelux [class^="fueluxicon-"]:before,
-.fuelux [class*=" fueluxicon-"]:before {
-  font-family: "fuelux" !important;
-  font-style: normal !important;
-  font-weight: normal !important;
-  font-variant: normal !important;
-  text-transform: none !important;
-  line-height: 1;
-  speak: none;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-.fuelux .fueluxicon-loader-full:before {
-  content: "\e000";
-}
-.fuelux .fueluxicon-loader-1:before {
-  content: "\e001";
-}
-.fuelux .fueluxicon-loader-2:before {
-  content: "\e002";
-}
-.fuelux .fueluxicon-loader-3:before {
-  content: "\e003";
-}
-.fuelux .fueluxicon-loader-4:before {
-  content: "\e004";
-}
-.fuelux .fueluxicon-loader-5:before {
-  content: "\e005";
-}
-.fuelux .fueluxicon-loader-6:before {
-  content: "\e006";
-}
-.fuelux .fueluxicon-loader-7:before {
-  content: "\e007";
-}
-.fuelux .fueluxicon-loader-8:before {
-  content: "\e008";
-}
-.fuelux .fueluxicon-bullet:before {
-  content: "\e009";
-}
-.fuelux .checkbox {
-  /* for keyboard tabbing */
-}
-.fuelux .checkbox.highlight {
-  padding: 4px;
-}
-.fuelux .checkbox.highlight.checked {
-  background: #e9e9e9;
-  border-radius: 4px;
-}
-.fuelux .checkbox input[type="checkbox"]:focus + .checkbox-label,
-.fuelux .checkbox input[type="checkbox"]:hover + .checkbox-label,
-.fuelux .checkbox .checkbox-label:hover {
-  color: #999999;
-}
-.fuelux .checkbox-custom {
-  position: relative;
-  /* for keyboard tabbing */
-}
-.fuelux .checkbox-custom:before {
-  font-family: "Glyphicons Halflings" !important;
-  font-style: normal !important;
-  font-weight: normal !important;
-  font-variant: normal !important;
-  text-transform: none !important;
-  line-height: 1;
-  speak: none;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  border: 1px solid #adadad;
-  border-radius: 4px;
-  color: #fff;
-  content: " ";
-  font-size: 9px;
-  height: 14px;
-  left: 0px;
-  padding: 1px 0 0 1px;
-  position: absolute;
-  top: 3px;
-  width: 14px;
-}
-.fuelux .checkbox-custom.checked:before {
-  background: #39b3d7;
-  border-color: #39b3d7;
-  content: "\e013";
-}
-.fuelux .checkbox-custom.disabled {
-  cursor: not-allowed;
-}
-.fuelux .checkbox-custom.disabled:before {
-  cursor: not-allowed;
-  opacity: .5;
-}
-.fuelux .checkbox-custom.checkbox-inline:before {
-  left: 0;
-  top: 3px;
-}
-.fuelux .checkbox-custom.checkbox-inline.highlight {
-  padding: 4px 4px 4px 24px;
-}
-.fuelux .checkbox-custom.checkbox-inline.highlight:before {
-  left: 4px;
-  top: 7px;
-}
-.fuelux .checkbox-custom.checkbox-inline.highlight.checked {
-  background: #e9e9e9;
-  border-radius: 4px;
-}
-.fuelux .checkbox-custom input[type="checkbox"]:focus + .checkbox-label {
-  color: #999999;
-}
-.fuelux .combobox.disabled .input-group-btn {
-  cursor: not-allowed;
-}
-.fuelux .datepicker-calendar {
-  padding: 16px 16px 0;
-  min-height: 262px;
-}
-.fuelux .datepicker-calendar button {
-  border: 0;
-  padding: 0;
-  background-color: transparent;
-}
-.fuelux .datepicker-calendar-days {
-  height: 182px;
-  margin: 10px 0 12px;
-  width: 100%;
-  /* for spacing */
-}
-.fuelux .datepicker-calendar-days thead {
-  border-bottom: 1px solid #cccaca;
-}
-.fuelux .datepicker-calendar-days tbody:before {
-  line-height: 3px;
-  content: "\200C";
-  display: block;
-}
-.fuelux .datepicker-calendar-days td,
-.fuelux .datepicker-calendar-days th {
-  font-size: 14px;
-  height: 32px;
-  text-align: center;
-  vertical-align: middle;
-  width: 14.29%;
-}
-.fuelux .datepicker-calendar-days td button {
-  color: #231f20;
-  display: inline-block;
-  height: 30px;
-  text-decoration: none;
-  width: 30px;
-}
-.fuelux .datepicker-calendar-days td span {
-  display: block;
-}
-.fuelux .datepicker-calendar-days td span:hover {
-  background: #b7e3f8;
-  text-decoration: none;
-}
-.fuelux .datepicker-calendar-days td.current-day button {
-  border: 1px solid #1d75bb;
-}
-.fuelux .datepicker-calendar-days td.last-month,
-.fuelux .datepicker-calendar-days td.next-month {
-  background: #e3e2e1;
-}
-.fuelux .datepicker-calendar-days td.past button {
-  color: #8d8787;
-}
-.fuelux .datepicker-calendar-days td.restricted button {
-  cursor: no-drop;
-  position: relative;
-}
-.fuelux .datepicker-calendar-days td.restricted button:before {
-  border-top: 1px solid #a94442;
-  bottom: 0;
-  content: " ";
-  display: block;
-  left: 5px;
-  position: absolute;
-  right: 5px;
-  top: 50%;
-}
-.fuelux .datepicker-calendar-days td.restricted button:hover {
-  background: none;
-}
-.fuelux .datepicker-calendar-days td.selected span {
-  background: #1d75bb;
-}
-.fuelux .datepicker-calendar-days td.selected span:hover {
-  background: #0f5f9f;
-}
-.fuelux .datepicker-calendar-days td.selected button {
-  color: #fff;
-}
-.fuelux .datepicker-calendar-days td.selected.current-day {
-  box-shadow: 0 0 0 1px #fff offset;
-}
-.fuelux .datepicker-calendar-days th {
-  font-weight: bold;
-  height: 22px;
-  vertical-align: top;
-}
-.fuelux .datepicker-calendar-header {
-  *zoom: 1;
-}
-.fuelux .datepicker-calendar-header:before,
-.fuelux .datepicker-calendar-header:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .datepicker-calendar-header:after {
-  clear: both;
-}
-.fuelux .datepicker-calendar-header button {
-  border: 0;
-  padding: 0;
-  background-color: transparent;
-}
-.fuelux .datepicker-calendar-header .title {
-  margin: 0 auto;
-  text-align: center;
-  display: block;
-  width: 174px;
-  color: #4d4d4f;
-  font-size: 20px;
-  line-height: 30px;
-  text-decoration: underline;
-  vertical-align: middle;
-}
-.fuelux .datepicker-calendar-header .title:hover {
-  color: #1d75bb;
-  text-decoration: underline;
-}
-.fuelux .datepicker-calendar-header .title.disabled {
-  cursor: default;
-  pointer-events: none;
-  text-decoration: none;
-}
-.fuelux .datepicker-calendar-header .title .month {
-  display: inline;
-  margin: 0;
-  padding: 0;
-}
-.fuelux .datepicker-calendar-header .title .month span {
-  display: none;
-}
-.fuelux .datepicker-calendar-header .title .month span.current {
-  display: inline;
-}
-.fuelux .datepicker-calendar-header .next,
-.fuelux .datepicker-calendar-header .prev {
-  background: #666669;
-  background-clip: padding-box;
-  border-radius: 30px;
-  cursor: pointer;
-  float: left;
-  height: 30px;
-  text-align: center;
-  width: 30px;
-}
-.fuelux .datepicker-calendar-header .next span.glyphicon,
-.fuelux .datepicker-calendar-header .prev span.glyphicon {
-  color: #fff;
-  font-size: 16px;
-  line-height: 30px;
-}
-.fuelux .datepicker-calendar-header .next:hover,
-.fuelux .datepicker-calendar-header .prev:hover {
-  background: #1d75bb;
-}
-.fuelux .datepicker-calendar-header .next {
-  float: right;
-}
-.fuelux .datepicker-calendar-header .next span.glyphicon {
-  line-height: 28px;
-}
-.fuelux .datepicker-calendar-footer {
-  background: #e3e2e1;
-  background-clip: padding-box;
-  border-radius: 0 0 4px 4px;
-  border-top: 1px solid #cccaca;
-  height: 30px;
-  margin: 0 -16px;
-  padding: 4px 14px;
-}
-.fuelux .datepicker-calendar-footer .datepicker-today {
-  color: #231f20;
-  font-size: 14px;
-  text-decoration: underline;
-}
-.fuelux .datepicker-calendar-footer .datepicker-today:hover {
-  color: #1b75bb;
-  text-decoration: underline;
-}
-.fuelux .datepicker-calendar-footer .datepicker-today.disabled {
-  color: #8b8c8e;
-  cursor: default;
-  pointer-events: none;
-}
-.fuelux .datepicker-calendar-footer .datepicker-today.disabled:hover {
-  color: #8b8c8e;
-}
-.fuelux .datepicker-calendar-wrapper {
-  border: 1px solid #6e6f71;
-  min-height: 20px;
-  padding: 0;
-  width: 300px;
-}
-.fuelux .datepicker-wheels {
-  display: none;
-}
-.fuelux .datepicker-wheels ul button {
-  border: 0;
-  padding: 0;
-  background-color: transparent;
-}
-.fuelux .datepicker-wheels-footer {
-  background: #e3e2e1;
-  border-radius: 0 0 4px 4px;
-  border-top: 1px solid #cccaca;
-  clear: both;
-}
-.fuelux .datepicker-wheels-footer .datepicker-wheels-back {
-  display: block;
-  color: #4d4d4f;
-  float: left;
-  line-height: 22px;
-  border: 0;
-  background-color: transparent;
-}
-.fuelux .datepicker-wheels-footer .datepicker-wheels-back:hover {
-  color: #1d75bb;
-}
-.fuelux .datepicker-wheels-footer .datepicker-wheels-select {
-  float: right;
-  background-color: transparent;
-  color: #049cdb;
-}
-.fuelux .datepicker-wheels-footer .datepicker-wheels-select:hover {
-  color: #1d75bb;
-}
-.fuelux .datepicker-wheels-month,
-.fuelux .datepicker-wheels-year {
-  float: left;
-  width: 50%;
-}
-.fuelux .datepicker-wheels-month ul,
-.fuelux .datepicker-wheels-year ul {
-  height: 217px;
-  list-style-type: none;
-  margin: 0;
-  overflow: auto;
-  padding: 0;
-  text-align: center;
-}
-.fuelux .datepicker-wheels-month ul li,
-.fuelux .datepicker-wheels-year ul li {
-  margin: 4px 0;
-}
-.fuelux .datepicker-wheels-month ul li button,
-.fuelux .datepicker-wheels-year ul li button {
-  width: 100%;
-  text-align: center;
-  color: #414041;
-  display: block;
-  font-size: 16px;
-  line-height: 24px;
-  text-decoration: none;
-}
-.fuelux .datepicker-wheels-month ul li button:hover,
-.fuelux .datepicker-wheels-year ul li button:hover {
-  background: #aee0f8;
-  text-decoration: none;
-}
-.fuelux .datepicker-wheels-month ul li.selected button,
-.fuelux .datepicker-wheels-year ul li.selected button {
-  background: #1d75bb;
-  color: #fff;
-}
-.fuelux .datepicker-wheels-month ul li.selected button:hover,
-.fuelux .datepicker-wheels-year ul li.selected button:hover {
-  background: #0f5f9f;
-}
-.fuelux .datepicker-wheels-month .header,
-.fuelux .datepicker-wheels-year .header {
-  background: #e3e2e1;
-  background-clip: padding-box;
-  border-bottom: 1px solid #cccaca;
-  border-radius: 4px 0 0 0;
-  color: #4d4d4f;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 30px;
-  margin-top: 0;
-  margin-bottom: 0;
-  text-align: center;
-}
-.fuelux .datepicker-wheels-month.full,
-.fuelux .datepicker-wheels-year.full {
-  border-left: 0;
-  width: 100%;
-}
-.fuelux .datepicker-wheels-month.full .header,
-.fuelux .datepicker-wheels-year.full .header {
-  border-radius: 4px 4px 0 0;
-}
-.fuelux .datepicker-wheels-year {
-  border-left: 1px solid #cccaca;
-  float: right;
-}
-.fuelux .datepicker-wheels-year .header {
-  border-radius: 0 4px 0 0;
-}
-.fuelux .infinitescroll {
-  overflow-y: auto;
-}
-.fuelux .infinitescroll .infinitescroll-end {
-  clear: both;
-  font-style: italic;
-  padding: 6px;
-  text-align: center;
-}
-.fuelux .infinitescroll .infinitescroll-load {
-  clear: both;
-  padding: 6px;
-}
-.fuelux .infinitescroll .infinitescroll-load button {
-  padding: 5px 12px;
-  width: 100%;
-}
-.fuelux .infinitescroll .infinitescroll-load .loader {
-  font-size: 32px;
-  height: 32px;
-  margin: 0 auto;
-  width: 32px;
-}
-.fuelux .dropUp {
-  -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
-}
-.fuelux .loader {
-  height: 64px;
-  font-size: 64px;
-  position: relative;
-  width: 64px;
-}
-.fuelux .loader:after,
-.fuelux .loader:before {
-  font-family: "fuelux" !important;
-  font-style: normal !important;
-  font-weight: normal !important;
-  font-variant: normal !important;
-  text-transform: none !important;
-  line-height: 1;
-  speak: none;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  bottom: 0;
-  display: block;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-}
-.fuelux .loader:before {
-  content: '\e000';
-  opacity: 0.33;
-}
-.fuelux .loader.iefix:before {
-  color: #bcbcbc;
-  opacity: 1;
-}
-.fuelux .loader[data-frame="1"]:after {
-  content: '\e001';
-}
-.fuelux .loader[data-frame="2"]:after {
-  content: '\e002';
-}
-.fuelux .loader[data-frame="3"]:after {
-  content: '\e003';
-}
-.fuelux .loader[data-frame="4"]:after {
-  content: '\e004';
-}
-.fuelux .loader[data-frame="5"]:after {
-  content: '\e005';
-}
-.fuelux .loader[data-frame="6"]:after {
-  content: '\e006';
-}
-.fuelux .loader[data-frame="7"]:after {
-  content: '\e007';
-}
-.fuelux .loader[data-frame="8"]:after {
-  content: '\e008';
-}
-.fuelux input.glass,
-.fuelux textarea.glass {
-  background: transparent;
-  border: 1px solid #fff;
-  box-shadow: none;
-}
-.fuelux input.glass:hover,
-.fuelux textarea.glass:hover {
-  background: #d9edf7;
-  border-color: #66afe9;
-  cursor: pointer;
-}
-.fuelux input.glass:hover[disabled],
-.fuelux textarea.glass:hover[disabled] {
-  background: transparent;
-  border-color: #fff;
-  cursor: not-allowed;
-}
-.fuelux input.glass:focus,
-.fuelux textarea.glass:focus {
-  background: #fff;
-  border-color: #66afe9;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
-  cursor: auto;
-}
-.fuelux input.glass:focus[disabled],
-.fuelux textarea.glass:focus[disabled] {
-  background: transparent;
-  border-color: #fff;
-  cursor: not-allowed;
-}
-.fuelux input.glass[disabled],
-.fuelux textarea.glass[disabled] {
-  cursor: not-allowed;
-}
-.fuelux [data-toggle="buttons"] > .btn > input[type="radio"],
-.fuelux [data-toggle="buttons"] > .btn > input[type="checkbox"] {
-  display: inline;
-  position: absolute;
-  left: -9999px;
-}
-.fuelux .pillbox {
-  border: 1px solid #BBBBBB;
-  border-radius: 4px;
-  cursor: text;
-  padding: 3px;
-}
-.fuelux .pillbox[data-readonly] {
-  border: 1px solid transparent;
-}
-.fuelux .pillbox[data-readonly].truncate .pillbox-input-wrap {
-  display: inline-block;
-}
-.fuelux .pillbox[data-readonly].truncate .pillbox-input-wrap.truncated {
-  display: none;
-}
-.fuelux .pillbox[data-readonly].truncate .pillbox-more {
-  display: inline;
-}
-.fuelux .pillbox[data-readonly] .pill span.glyphicon-close {
-  display: none;
-}
-.fuelux .pillbox[data-readonly] .pillbox-add-item {
-  display: none;
-}
-.fuelux .pillbox[data-readonly] .pillbox-input-wrap {
-  display: none;
-}
-.fuelux .pillbox[data-readonly] .pillbox-input-wrap button.dropdown-toggle {
-  display: none;
-}
-.fuelux .pillbox.pills-editable .pill-group .pill span {
-  cursor: text;
-}
-.fuelux .pillbox.pills-editable .pill-group .pill span.glyphicon-close {
-  cursor: pointer;
-}
-.fuelux .pillbox > .pill-group {
-  margin: 0;
-  padding: 0;
-  width: 100%;
-}
-.fuelux .pillbox > .pill-group > .pill {
-  margin: 2px;
-  cursor: default;
-  float: left;
-  word-break: break-all;
-}
-.fuelux .pillbox > .pill-group > .pill.pillbox-highlight {
-  outline: 1px dotted #999999;
-}
-.fuelux .pillbox > .pill-group > .pill.truncated {
-  display: none;
-}
-.fuelux .pillbox > .pill-group > .pill .pillbox-list-edit {
-  border: none;
-  color: #333333;
-  font-weight: normal;
-  border-radius: 2px;
-}
-.fuelux .pillbox > .pill-group > .pill .pillbox-list-edit:focus {
-  outline: none;
-  border: none;
-}
-.fuelux .pillbox > .pill-group > .pill .glyphicon-close {
-  cursor: pointer;
-  top: -1px;
-  left: 2px;
-}
-.fuelux .pillbox > .pill-group > .pill .glyphicon-close:before {
-  content: " \00d7";
-}
-.fuelux .pillbox > .pill-group > .pill .glyphicon-close:hover {
-  opacity: .4;
-}
-.fuelux .pillbox .pillbox-input-wrap {
-  position: relative;
-  margin: 4px 0 3px 3px;
-  float: left;
-}
-.fuelux .pillbox .pillbox-input-wrap.editing {
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  margin: 2px 0 3px 3px;
-}
-.fuelux .pillbox .pillbox-input-wrap.editing input.pillbox-add-item {
-  border-radius: 4px;
-  color: #333;
-  height: 32px;
-}
-.fuelux .pillbox .pillbox-add-item {
-  border: none;
-  box-shadow: none;
-}
-.fuelux .pillbox .pillbox-add-item:focus {
-  outline: none;
-  border: none;
-}
-.fuelux .pillbox .pillbox-more {
-  cursor: pointer;
-  display: none;
-  line-height: 30px;
-}
-.fuelux .pillbox .suggest {
-  max-height: 166px;
-  overflow-y: auto;
-}
-.fuelux .pillbox .suggest > li {
-  white-space: nowrap;
-  cursor: pointer;
-  padding: 3px 20px;
-}
-.fuelux .pillbox .suggest > li.pillbox-suggest-sel {
-  background-color: #eeeeee;
-}
-.fuelux .pillbox .suggest > li:hover {
-  background-color: #eeeeee;
-}
-.fuelux .placard {
-  display: inline-block;
-  position: relative;
-}
-.fuelux .placard[data-ellipsis="true"].showing input.placard-field {
-  overflow: visible;
-  text-overflow: clip;
-  white-space: normal;
-}
-.fuelux .placard[data-ellipsis="true"] input.placard-field {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.fuelux .placard[data-ellipsis="true"] textarea.placard-field[readonly] {
-  overflow: hidden;
-}
-.fuelux .placard.showing .placard-footer,
-.fuelux .placard.showing .placard-header,
-.fuelux .placard.showing .placard-popup {
-  display: block;
-  z-index: 1;
-}
-.fuelux .placard.showing input.placard-field,
-.fuelux .placard.showing textarea.placard-field {
-  background: #fff;
-  border: 1px solid #CCCCCC;
-  box-shadow: none;
-  position: relative;
-  z-index: 1;
-}
-.fuelux .placard input.placard-field,
-.fuelux .placard textarea.placard-field {
-  resize: none;
-}
-.fuelux .placard input.placard-field[readonly],
-.fuelux .placard textarea.placard-field[readonly] {
-  background: #fff;
-  cursor: auto;
-}
-.fuelux .placard input.placard-field[readonly].glass,
-.fuelux .placard textarea.placard-field[readonly].glass {
-  background: none;
-}
-.fuelux .placard input.placard-field[readonly].glass:hover,
-.fuelux .placard textarea.placard-field[readonly].glass:hover {
-  background: #d9edf7;
-  cursor: pointer;
-}
-.fuelux .placard input.placard-field:focus,
-.fuelux .placard textarea.placard-field:focus {
-  border: 1px solid #CCCCCC;
-  box-shadow: none;
-}
-.fuelux .placard-cancel {
-  font-size: 12px;
-  margin-right: 4px;
-  vertical-align: middle;
-}
-.fuelux .placard-footer,
-.fuelux .placard-header {
-  display: none;
-  left: 0;
-  line-height: 1;
-  position: absolute;
-  right: 0;
-}
-.fuelux .placard-footer {
-  padding: 4px 0 8px 0;
-  text-align: right;
-  top: 100%;
-}
-.fuelux .placard-header {
-  bottom: 100%;
-  padding: 8px 0 4px 0;
-}
-.fuelux .placard-header h1,
-.fuelux .placard-header h2,
-.fuelux .placard-header h3,
-.fuelux .placard-header h4,
-.fuelux .placard-header h5,
-.fuelux .placard-header h6 {
-  margin: 0;
-}
-.fuelux .placard-popup {
-  background: #d9edf7;
-  background-clip: padding-box;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  bottom: -8px;
-  box-shadow: 0 0 0 1px #fff inset;
-  display: none;
-  left: -8px;
-  position: absolute;
-  right: -8px;
-  top: -8px;
-}
-.fuelux .radio {
-  /* for keyboard tabbing */
-}
-.fuelux .radio.highlight {
-  padding: 4px;
-}
-.fuelux .radio.highlight.checked {
-  background: #e9e9e9;
-  border-radius: 4px;
-}
-.fuelux .radio input[type="radio"]:focus + .radio-label,
-.fuelux .radio input[type="radio"]:hover + .radio-label,
-.fuelux .radio .radio-label:hover {
-  color: #999999;
-}
-.fuelux .radio-custom {
-  position: relative;
-  /* for keyboard tabbing */
-}
-.fuelux .radio-custom:after {
-  background: transparent;
-  border-radius: 6px;
-  content: " ";
-  height: 6px;
-  left: 4px;
-  position: absolute;
-  top: 7px;
-  width: 6px;
-}
-.fuelux .radio-custom:before {
-  border: 1px solid #adadad;
-  border-radius: 14px;
-  content: " ";
-  height: 14px;
-  left: 0px;
-  position: absolute;
-  top: 3px;
-  width: 14px;
-}
-.fuelux .radio-custom.checked:after {
-  background: #fff;
-}
-.fuelux .radio-custom.checked:before {
-  background: #39b3d7;
-  border-color: #39b3d7;
-}
-.fuelux .radio-custom.disabled {
-  cursor: not-allowed;
-}
-.fuelux .radio-custom.disabled:after {
-  cursor: not-allowed;
-}
-.fuelux .radio-custom.disabled:before {
-  cursor: not-allowed;
-  opacity: .5;
-}
-.fuelux .radio-custom.radio-inline:after {
-  left: 4px;
-  top: 7px;
-}
-.fuelux .radio-custom.radio-inline:before {
-  left: 0;
-  top: 3px;
-}
-.fuelux .radio-custom.radio-inline.highlight {
-  padding: 4px 4px 4px 24px;
-}
-.fuelux .radio-custom.radio-inline.highlight:after {
-  left: 8px;
-  top: 11px;
-}
-.fuelux .radio-custom.radio-inline.highlight:before {
-  left: 4px;
-  top: 7px;
-}
-.fuelux .radio-custom.radio-inline.highlight.checked {
-  background: #e9e9e9;
-  border-radius: 4px;
-}
-.fuelux .radio-custom input[type="radio"]:focus + .radio-label {
-  color: #999999;
-}
-.fuelux .repeater {
-  border: 1px solid #ddd;
-  border-radius: 4px;
-}
-.fuelux .repeater-canvas.scrolling {
-  bottom: 0;
-  left: 0;
-  overflow-y: auto;
-  position: absolute;
-  right: 0;
-  top: 0;
-}
-.fuelux .repeater-header,
-.fuelux .repeater-footer {
-  background: #f9f9f9;
-  min-height: 50px;
-  padding: 8px;
-  *zoom: 1;
-}
-.fuelux .repeater-header:before,
-.fuelux .repeater-footer:before,
-.fuelux .repeater-header:after,
-.fuelux .repeater-footer:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .repeater-header:after,
-.fuelux .repeater-footer:after {
-  clear: both;
-}
-.fuelux .repeater-header-left,
-.fuelux .repeater-footer-left {
-  float: left;
-}
-.fuelux .repeater-header-right,
-.fuelux .repeater-footer-right {
-  float: right;
-}
-@media (max-width: 625px) {
-  .fuelux .repeater-header-left,
-  .fuelux .repeater-footer-left,
-  .fuelux .repeater-header-right,
-  .fuelux .repeater-footer-right {
-    float: none;
-    *zoom: 1;
-  }
-  .fuelux .repeater-header-left:before,
-  .fuelux .repeater-footer-left:before,
-  .fuelux .repeater-header-right:before,
-  .fuelux .repeater-footer-right:before,
-  .fuelux .repeater-header-left:after,
-  .fuelux .repeater-footer-left:after,
-  .fuelux .repeater-header-right:after,
-  .fuelux .repeater-footer-right:after {
-    display: table;
-    content: "";
-    line-height: 0;
-  }
-  .fuelux .repeater-header-left:after,
-  .fuelux .repeater-footer-left:after,
-  .fuelux .repeater-header-right:after,
-  .fuelux .repeater-footer-right:after {
-    clear: both;
-  }
-  .fuelux .repeater-header-left,
-  .fuelux .repeater-footer-left {
-    margin-bottom: 8px;
-  }
-}
-.fuelux .repeater-header {
-  border-bottom: 1px solid #ddd;
-  border-top-right-radius: 4px;
-  border-top-left-radius: 4px;
-}
-.fuelux .repeater-footer {
-  border-top: 1px solid #ddd;
-  border-bottom-right-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-.fuelux .repeater-loader {
-  display: none;
-  left: 50%;
-  position: absolute;
-  margin: -32px 0 0 -32px;
-  top: 50%;
-}
-.fuelux .repeater-viewport {
-  min-height: 80px;
-  position: relative;
-}
-.fuelux .repeater-pagination label {
-  font-weight: normal;
-}
-.fuelux .repeater-pagination .repeater-primaryPaging {
-  display: none;
-  vertical-align: middle;
-  width: 116px;
-}
-.fuelux .repeater-pagination .repeater-primaryPaging.active {
-  display: inline-block;
-}
-.fuelux .repeater-pagination .repeater-primaryPaging ul.dropdown-menu {
-  min-width: 116px;
-}
-.fuelux .repeater-pagination .repeater-secondaryPaging {
-  display: none;
-  width: 82px;
-}
-.fuelux .repeater-pagination .repeater-secondaryPaging.active {
-  display: inline-block;
-}
-.fuelux .repeater-search {
-  float: left;
-  width: 200px;
-}
-.fuelux .repeater-title {
-  display: block;
-  float: left;
-  line-height: 34px;
-  margin-right: 10px;
-}
-.fuelux .repeater[data-currentview="list"] .repeater-loader {
-  margin-top: -12px;
-}
-.fuelux .repeater[data-currentview="list"] .repeater-loader.noHeader {
-  margin-top: -32px;
-}
-.fuelux .repeater-list-check {
-  display: inline-block;
-  height: 0;
-  line-height: 0;
-  position: relative;
-  vertical-align: top;
-  width: 0;
-}
-.fuelux .repeater-list-check span.glyphicon {
-  left: -22px;
-  position: absolute;
-  top: 2px;
-}
-.fuelux .repeater-list-header,
-.fuelux .repeater-list-items {
-  margin-bottom: 0;
-  width: 100%;
-}
-.fuelux .repeater-list-header td,
-.fuelux .repeater-list-items td {
-  border-bottom: 1px solid #ddd;
-  border-left: 1px solid #ddd;
-  border-top: none;
-}
-.fuelux .repeater-list-header td:first-child,
-.fuelux .repeater-list-items td:first-child {
-  border-left: none;
-}
-.fuelux .repeater-list-header {
-  background: #F9F9F9;
-}
-.fuelux .repeater-list-header td {
-  font-weight: bold;
-}
-.fuelux .repeater-list-header td.sortable:hover,
-.fuelux .repeater-list-header td.sortable.sorted {
-  background: #F1F1F1;
-  cursor: pointer;
-  background-color: #f1f1f1;
-  background-image: -moz-linear-gradient(top, #f9f9f9, #e5e5e5);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f9), to(#e5e5e5));
-  background-image: -webkit-linear-gradient(top, #f9f9f9, #e5e5e5);
-  background-image: -o-linear-gradient(top, #f9f9f9, #e5e5e5);
-  background-image: linear-gradient(to bottom, #f9f9f9, #e5e5e5);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#ffe5e5e5', GradientType=0);
-}
-.fuelux .repeater-list-header td.sortable.sorted span.glyphicon {
-  display: block;
-}
-.fuelux .repeater-list-header td span.glyphicon {
-  display: none;
-  float: right;
-  margin-top: 2px;
-}
-.fuelux .repeater-list-items tr.empty td {
-  border-bottom: none;
-  font-style: italic;
-  padding: 20px;
-  text-align: center;
-  width: 100%;
-}
-.fuelux .repeater-list-items tr.selectable:hover {
-  background: #d9edf7;
-  cursor: pointer;
-}
-.fuelux .repeater-list-items tr.selected {
-  background: #66AFE9;
-  color: #fff;
-}
-.fuelux .repeater-list-items tr.selected:hover {
-  background: #428bca;
-}
-.fuelux .repeater-list-items tr.selected td:first-child {
-  padding-left: 30px;
-}
-.fuelux .repeater-list-wrapper {
-  overflow-y: auto;
-}
-.fuelux .repeater-thumbnail {
-  border: 1px solid #ddd;
-  color: #666;
-  float: left;
-  font-size: 12px;
-  height: 130px;
-  line-height: 36px;
-  margin: 10px 12px;
-  text-align: center;
-  width: 100px;
-  -webkit-box-shadow: 0 1px 4px 0 #ddd;
-  box-shadow: 0 1px 4px 0 #ddd;
-}
-.fuelux .repeater-thumbnail img {
-  display: block;
-  margin-top: 12px;
-}
-.fuelux .repeater-thumbnail-cont {
-  height: 100%;
-  overflow-y: auto;
-  padding: 10px;
-  width: 100%;
-}
-.fuelux .repeater-thumbnail-cont div.empty {
-  font-style: italic;
-  padding: 20px 10px;
-  text-align: center;
-}
-.fuelux .spinbox {
-  display: inline-block;
-  position: relative;
-}
-.fuelux .spinbox.digits-3 {
-  width: 60px;
-}
-.fuelux .spinbox.disabled .spinbox-buttons {
-  cursor: not-allowed;
-}
-.fuelux .spinbox .spinbox-input {
-  float: left;
-  padding-bottom: 3px;
-  /* Magic number */
-  padding: 0px 25px 0px 7px;
-}
-.fuelux .spinbox .btn {
-  position: relative;
-  width: 20px;
-  height: 13px;
-  padding-top: 0;
-  padding-right: 9px;
-  padding-left: 9px;
-}
-.fuelux .spinbox .btn.disabled {
-  cursor: not-allowed;
-}
-.fuelux .spinbox .spinbox-buttons {
-  position: absolute;
-  height: 28px;
-  width: 20px;
-  right: 2px;
-}
-.fuelux .spinbox .spinbox-up {
-  padding: 0 0 14px 1px;
-  top: 2px;
-}
-.fuelux .spinbox .spinbox-up .glyphicon-chevron-up {
-  position: relative;
-  top: 0px;
-}
-.fuelux .spinbox .btn-group > .btn.spinbox-up {
-  border-top-right-radius: 4px;
-}
-.fuelux .spinbox .spinbox-down {
-  padding: 0 0 8px 1px;
-  top: 2px;
-  height: 15px;
-  border-bottom-left-radius: 4px;
-}
-.fuelux .spinbox .spinbox-down .glyphicon-chevron-down {
-  position: relative;
-  left: -1px;
-  top: 0px;
-}
-.fuelux .scheduler {
-  /* -------------------------------
-	START DATE/TIME
-------------------------------- */
-  /* -------------------------------
-	TIMEZONE
-------------------------------- */
-  /* -------------------------------
-	REPEAT PANELS
-------------------------------- */
-  /* -------------------------------
-END
-------------------------------- */
-}
-.fuelux .scheduler .control-label {
-  min-width: 7em;
-}
-.fuelux .scheduler .inline-form-text {
-  float: left;
-  line-height: 27px;
-  margin-top: 4px;
-}
-.fuelux .scheduler .start-datetime.form-group {
-  margin-bottom: 0;
-}
-.fuelux .scheduler .start-datetime .form-group {
-  margin-left: 0;
-}
-.fuelux .scheduler .start-datetime .combobox {
-  max-width: 9em;
-}
-.fuelux .scheduler .start-datetime .combobox .dropdown-menu {
-  max-height: 200px;
-  overflow: auto;
-}
-.fuelux .scheduler .start-datetime .dropdown {
-  float: left;
-  margin: 0 10px 0 0;
-}
-.fuelux .scheduler .timezone-container .input-group {
-  max-width: 20em;
-}
-.fuelux .scheduler .timezone-container .dropdown-label {
-  height: 18px;
-  white-space: nowrap;
-  max-width: 20em;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-.fuelux .scheduler .timezone-container .dropdown-menu {
-  max-height: 200px;
-  overflow: auto;
-}
-.fuelux .scheduler .repeat-panel {
-  margin-left: 0;
-}
-.fuelux .scheduler .repeat-panel label {
-  font-weight: normal;
-}
-.fuelux .scheduler .repeat-panel .radio {
-  margin-right: 10px;
-}
-.fuelux .scheduler .repeat-panel .form-group {
-  margin-left: 0;
-}
-.fuelux .scheduler .repeat-interval {
-  margin-left: 0;
-  *zoom: 1;
-}
-.fuelux .scheduler .repeat-interval:before,
-.fuelux .scheduler .repeat-interval:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .scheduler .repeat-interval:after {
-  clear: both;
-}
-.fuelux .scheduler .repeat-interval .form-group {
-  margin-left: 0;
-}
-.fuelux .scheduler .repeat-interval .dropdown-menu {
-  max-height: 200px;
-  overflow: auto;
-}
-.fuelux .scheduler .repeat-interval .repeat-every-panel {
-  float: left;
-}
-.fuelux .scheduler .repeat-interval .repeat-every-panel .repeat-every-pretext {
-  padding: 0 10px;
-}
-.fuelux .scheduler .repeat-interval .repeat-every-panel .spinbox {
-  float: left;
-  margin-right: 10px;
-}
-.fuelux .scheduler .repeat-interval .repeat-every-panel .spinbox input {
-  margin-bottom: 0;
-}
-.fuelux .scheduler .repeat-monthly .repeat-monthly-date {
-  margin-top: 10px;
-  *zoom: 1;
-}
-.fuelux .scheduler .repeat-monthly .repeat-monthly-date:before,
-.fuelux .scheduler .repeat-monthly .repeat-monthly-date:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .scheduler .repeat-monthly .repeat-monthly-date:after {
-  clear: both;
-}
-.fuelux .scheduler .repeat-monthly .repeat-monthly-date .selectlist {
-  margin-left: 5px;
-}
-.fuelux .scheduler .repeat-monthly .repeat-monthly-day {
-  margin-top: 10px;
-  *zoom: 1;
-}
-.fuelux .scheduler .repeat-monthly .repeat-monthly-day:before,
-.fuelux .scheduler .repeat-monthly .repeat-monthly-day:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .scheduler .repeat-monthly .repeat-monthly-day:after {
-  clear: both;
-}
-.fuelux .scheduler .repeat-monthly .month-days {
-  margin-left: 10px;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-date {
-  margin-top: 10px;
-  *zoom: 1;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-date:before,
-.fuelux .scheduler .repeat-yearly .repeat-yearly-date:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-date:after {
-  clear: both;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-date .year-month-day {
-  margin-left: 10px;
-}
-.fuelux .scheduler .repeat-yearly .year-month-days {
-  margin-left: 10px;
-}
-.fuelux .scheduler .repeat-yearly .year-month {
-  margin-left: 10px;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-day {
-  margin-top: 10px;
-  *zoom: 1;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-day:before,
-.fuelux .scheduler .repeat-yearly .repeat-yearly-day:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-day:after {
-  clear: both;
-}
-.fuelux .scheduler .repeat-yearly .repeat-yearly-day .repeat-yearly-day-text {
-  margin-left: 10px;
-}
-.fuelux .scheduler .repeat-weekly button:not(.active) {
-  background-color: #fff;
-}
-.fuelux .scheduler .repeat-weekly .btn-group.disabled {
-  position: relative;
-  opacity: 0.65;
-}
-.fuelux .scheduler .repeat-weekly .btn-group.disabled:before {
-  background: transparent;
-  bottom: 0;
-  content: "";
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 5;
-}
-.fuelux .scheduler .selectlist {
-  float: left;
-}
-.fuelux .scheduler label.radio {
-  float: left;
-  line-height: 27px;
-}
-.fuelux .scheduler label.radio input {
-  margin-top: 8px;
-}
-.fuelux .scheduler .repeat-end .end-after {
-  float: left;
-  display: inline-block;
-  margin-right: 10px;
-}
-.fuelux .scheduler .repeat-end .form-group {
-  margin-left: 0;
-}
-.fuelux .search.disabled .input-group-btn {
-  cursor: not-allowed;
-}
-.fuelux .selectlist.disabled {
-  cursor: not-allowed;
-}
-.fuelux .selectlist-sizer {
-  display: inline-block;
-  position: absolute;
-  visibility: hidden;
-  top: 0;
-}
-.fuelux .selectlist .selected-label {
-  overflow: hidden;
-  min-width: 2em;
-}
-.fuelux .selectlist .btn.dropdown-toggle {
-  white-space: normal;
-}
-.fuelux .selectlist .btn.dropdown-toggle .selected-label {
-  padding-right: 10px;
-  text-align: left;
-}
-.fuelux .tree {
-  border: 1px solid #999999;
-  border-radius: 4px 4px 4px 4px;
-  padding: 10px 15px 0 15px;
-  overflow-x: auto;
-  overflow-y: auto;
-  position: relative;
-  list-style: none;
-}
-.fuelux .tree *:focus {
-  outline: none;
-}
-.fuelux .tree button:focus {
-  color: #999999;
-}
-.fuelux .tree ul {
-  padding-left: 0;
-  margin-top: 0;
-  margin-bottom: 0;
-  list-style: none;
-}
-.fuelux .tree li {
-  margin: 0;
-  margin-top: 5px;
-  margin-bottom: 5px;
-}
-.fuelux .tree .tree-loader {
-  margin-left: 45px;
-}
-.fuelux .tree .tree-open > .tree-branch-header .glyphicon-play {
-  transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -webkit-transform: rotate(90deg);
-  position: relative;
-  left: -5px;
-}
-.fuelux .tree [data-children=false] > .tree-branch-header .icon-caret:before {
-  content: '\00a0';
-}
-.fuelux .tree .tree-branch .tree-branch-header {
-  position: relative;
-  border-radius: 6px;
-}
-.fuelux .tree .tree-branch .tree-branch-header .tree-branch-name:hover {
-  color: #999999;
-}
-.fuelux .tree .tree-branch .tree-branch-header .glyphicon-play {
-  font-size: 10px;
-  padding-right: 5px;
-}
-.fuelux .tree .tree-branch .tree-branch-header .glyphicon-play:before {
-  position: relative;
-  top: -2px;
-}
-.fuelux .tree .tree-branch .tree-branch-header .tree-branch-name {
-  white-space: nowrap;
-  border-radius: 6px;
-  background-color: transparent;
-  border: 0;
-}
-.fuelux .tree .tree-branch .tree-branch-header label {
-  font-weight: normal;
-  padding-left: 3px;
-  margin-bottom: 0;
-  cursor: pointer;
-}
-.fuelux .tree .tree-branch .tree-branch-children {
-  margin-left: 14px;
-}
-.fuelux .tree .tree-item {
-  position: relative;
-  cursor: pointer;
-  border-radius: 6px;
-  margin-left: 26px;
-}
-.fuelux .tree .tree-item .tree-item-name {
-  white-space: nowrap;
-  border-radius: 6px;
-  background-color: transparent;
-  border: 0;
-}
-.fuelux .tree .tree-item .tree-item-name:hover {
-  color: #999999;
-}
-.fuelux .tree .tree-item.tree-selected .tree-item-name {
-  background-color: #4f4f4f;
-  color: #fff;
-}
-.fuelux .tree .tree-item label {
-  font-weight: normal;
-  padding-left: 7px;
-  margin-bottom: 0;
-  cursor: pointer;
-}
-.fuelux .tree .icon-caret:hover + .tree-branch-name {
-  color: #999999;
-}
-.fuelux .tree.tree-folder-select .tree-branch .icon-caret {
-  background-color: transparent;
-  border: 0;
-}
-.fuelux .tree.tree-folder-select .tree-branch .icon-caret:hover {
-  cursor: pointer;
-  color: #999999;
-}
-.fuelux .tree.tree-folder-select .tree-branch > .tree-branch-name {
-  padding: 1px 5px 0 5px;
-  border-radius: 6px;
-}
-.fuelux .tree.tree-folder-select .tree-branch > .tree-branch-name.tree-selected {
-  background-color: #4f4f4f;
-  color: #fff;
-}
-.fuelux .tree.tree-folder-select .tree-branch.tree-selected > .tree-branch-header .tree-branch-name {
-  background-color: #4f4f4f;
-  color: #fff;
-}
-.fuelux .tree.tree-folder-select .tree-branch.tree-selected > .tree-branch-header .tree-branch-name:hover {
-  background-color: #4f4f4f;
-  color: #fff;
-}
-.fuelux .wizard {
-  *zoom: 1;
-  border: 1px solid #d4d4d4;
-  border-radius: 4px;
-  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
-  background-color: #f9f9f9;
-  position: relative;
-  min-height: 48px;
-  overflow: hidden;
-}
-.fuelux .wizard:before,
-.fuelux .wizard:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.fuelux .wizard:after {
-  clear: both;
-}
-.fuelux .wizard > .steps {
-  list-style: none outside none;
-  padding: 0;
-  margin: 0;
-  width: 4000px;
-}
-.fuelux .wizard > .steps.previous-disabled li.complete {
-  cursor: default;
-}
-.fuelux .wizard > .steps.previous-disabled li.complete:hover {
-  background: #f3f4f5;
-  color: #468847;
-  cursor: default;
-}
-.fuelux .wizard > .steps.previous-disabled li.complete:hover .chevron:before {
-  border-left-color: #f3f4f5;
-}
-.fuelux .wizard > .steps li {
-  float: left;
-  margin: 0;
-  padding: 0 20px 0 30px;
-  height: 46px;
-  line-height: 46px;
-  position: relative;
-  background: #ededed;
-  color: #999999;
-  font-size: 16px;
-  cursor: not-allowed;
-}
-.fuelux .wizard > .steps li .chevron {
-  border: 24px solid transparent;
-  border-left: 14px solid #d4d4d4;
-  border-right: 0;
-  display: block;
-  position: absolute;
-  right: -14px;
-  top: 0;
-  z-index: 1;
-}
-.fuelux .wizard > .steps li .chevron:before {
-  border: 24px solid transparent;
-  border-left: 14px solid #ededed;
-  border-right: 0;
-  content: "";
-  display: block;
-  position: absolute;
-  right: 1px;
-  top: -24px;
-}
-.fuelux .wizard > .steps li.complete {
-  background: #f3f4f5;
-  color: #468847;
-}
-.fuelux .wizard > .steps li.complete:hover {
-  background: #e7eff8;
-  cursor: pointer;
-}
-.fuelux .wizard > .steps li.complete:hover .chevron:before {
-  border-left: 14px solid #e7eff8;
-}
-.fuelux .wizard > .steps li.complete .chevron:before {
-  border-left: 14px solid #f3f4f5;
-}
-.fuelux .wizard > .steps li.active {
-  background: #f1f6fc;
-  color: #3a87ad;
-  cursor: default;
-}
-.fuelux .wizard > .steps li.active .chevron:before {
-  border-left: 14px solid #f1f6fc;
-}
-.fuelux .wizard > .steps li.active .badge {
-  background-color: #3a87ad;
-}
-.fuelux .wizard > .steps li .badge {
-  margin-right: 8px;
-}
-.fuelux .wizard > .steps li .badge-success {
-  background-color: #468847;
-}
-.fuelux .wizard > .steps li:first-child {
-  border-radius: 4px 0 0 4px;
-  padding-left: 20px;
-}
-.fuelux .wizard > .actions {
-  z-index: 1000;
-  position: absolute;
-  right: 0;
-  line-height: 46px;
-  float: right;
-  padding-left: 15px;
-  padding-right: 15px;
-  vertical-align: middle;
-  background-color: #e5e5e5;
-  border-left: 1px solid #d4d4d4;
-}
-.fuelux .wizard > .actions a {
-  line-height: 45px;
-  font-size: 12px;
-  margin-right: 8px;
-}
-.fuelux .wizard > .actions .btn-prev[disabled] {
-  cursor: not-allowed;
-}
-.fuelux .wizard > .actions .btn-prev span {
-  margin-right: 5px;
-}
-.fuelux .wizard > .actions .btn-next[disabled] {
-  cursor: not-allowed;
-}
-.fuelux .wizard > .actions .btn-next span {
-  margin-left: 5px;
-}
-.fuelux .wizard .step-content {
-  border-top: 1px solid #D4D4D4;
-  padding: 10px;
-  float: left;
-  width: 100%;
-}
-.fuelux .wizard .step-content .step-pane {
-  display: none;
-}
-.fuelux .wizard .step-content > .active {
-  display: block;
-}
-.fuelux .wizard .step-content > .active .btn-group .active {
-  display: inline-block;
-}
-.fuelux .wizard.complete > .actions .glyphicon-arrow-right:before {
-  display: none;
-}
-.fuelux .wizard.complete > .actions .glyphicon-arrow-right {
-  margin-left: 0;
-}
-/*# sourceMappingURL=fuelux.css.map */
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.css.map b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.css.map
deleted file mode 100644
index ac523ca7968107388dc347cda60c40bc8ec16b9d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/fuelux.less","less/icons.less","less/mixins.less","less/checkbox.less","less/combobox.less","less/datepicker.less","less/infinite-scroll.less","less/intelligent-dropdown.less","less/loader.less","less/misc.less","less/pillbox.less","less/placard.less","less/radio.less","less/repeater.less","less/repeater-list.less","less/repeater-thumbnail.less","less/spinbox.less","less/scheduler.less","less/search.less","less/selectlist.less","less/tree.less","less/wizard.less"],"names":[],"mappings":"AAAA;;CCAA,SAAS;ADAT,OECA;EACC,QAAA;;AACA,OAFD,UAEE;AACD,OAHD,UAGE;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,OAVD,UAUE;EACA,WAAA;;ADVF;EACC,aAAa,QAAb;EACA,SAAQ,sBAAR;EACA,SAAQ,8BAAsC,OAAO,0BACjD,wBAAgC,OAAO,aACvC,uBAA+B,OAAO,iBACtC,8BAAsC,OAAO,MAHjD;EAIA,mBAAA;EACA,kBAAA;;ADVD,OCmBA,uBAAsB;ADnBtB,OCoBA,wBAAuB;ECuCtB,aAD4B,QAC5B;EACA,6BAAA;EACA,8BAAA;EACA,+BAAA;EACA,+BAAA;EACA,cAAA;EACA,WAAA;EACA,mCAAA;EACA,kCAAA;;AFnED,OCwBA,wBAAuB;EACtB,SAAS,OAAT;;ADzBD,OC4BA,qBAAoB;EACnB,SAAS,OAAT;;AD7BD,OCgCA,qBAAoB;EACnB,SAAS,OAAT;;ADjCD,OCoCA,qBAAoB;EACnB,SAAS,OAAT;;ADrCD,OCwCA,qBAAoB;EACnB,SAAS,OAAT;;ADzCD,OC4CA,qBAAoB;EACnB,SAAS,OAAT;;AD7CD,OCgDA,qBAAoB;EACnB,SAAS,OAAT;;ADjDD,OCoDA,qBAAoB;EACnB,SAAS,OAAT;;ADrDD,OCwDA,qBAAoB;EACnB,SAAS,OAAT;;ADzDD,OC8DA,mBAAkB;EAChB,SAAS,OAAT;;AD/DF,OGoFC,CApFD;;;AAEC,OAkFA,CApFD,SAEE;EACA,YAAA;;AAEA,OA+ED,CApFD,SAEE,UAGC;EACA,mBAAA;EACA,kBAAA;;AHPH,OGoFC,CApFD,SAYC,MAAK,iBAAiB,MAAO;AHZ9B,OGoFC,CApFD,SAaC,MAAK,iBAAiB,MAAO;AHb9B,OGoFC,CApFD,SAcC,gBAAe;EACd,cAAA;;AHfF,OGoBA;EACC,kBAAA;;;AAEA,OAHD,iBAGE;EDoCD,aClCiB,sBDkCjB;EACA,6BAAA;EACA,8BAAA;EACA,+BAAA;EACA,+BAAA;EACA,cAAA;EACA,WAAA;EACA,mCAAA;EACA,kCAAA;ECxCC,yBAAA;EACA,kBAAA;EACA,WAAA;EACA,SAAS,GAAT;EACA,cAAA;EACA,YAAA;EACA,SAAA;EACA,oBAAA;EACA,kBAAA;EACA,QAAA;EACA,WAAA;;AAIA,OArBF,iBAoBE,QACC;EACA,mBAAA;EACA,qBAAA;EACA,SAAS,OAAT;;AAIF,OA5BD,iBA4BE;EACA,mBAAA;;AAEA,OA/BF,iBA4BE,SAGC;EAEA,mBAAA;EACA,WAAA;;AAKD,OAvCF,iBAsCE,gBACC;EACA,OAAA;EACA,QAAA;;AAGD,OA5CF,iBAsCE,gBAMC;EACA,yBAAA;;AAEA,OA/CH,iBAsCE,gBAMC,UAGC;EACA,SAAA;EACA,QAAA;;AAGD,OApDH,iBAsCE,gBAMC,UAQC;EACA,mBAAA;EACA,kBAAA;;AH1EJ,OGoBA,iBA4DC,MAAK,iBAAiB,MAAO;EAC5B,cAAA;;AChFD,OAKA,CAND,SACE,SACA;EACC,mBAAA;;ACDF,OA6VD,CA/VA,WAEE;EACA,oBAAA;EACA,iBAAA;;AAFD,OA6VD,CA/VA,WAEE,SAIA;EACC,SAAA;EACA,UAAA;EACA,6BAAA;;AAGD,OAmVF,CA/VA,WAEE,SAUC;EACA,aAAA;EACA,mBAAA;EACA,WAAA;;;AAHD,OAmVF,CA/VA,WAEE,SAUC,KAKA;EACC,gCAAA;;AANF,OAmVF,CA/VA,WAEE,SAUC,KAUA,MAAK;EACJ,gBAAA;EACA,SAAQ,OAAR;EACA,cAAA;;AAbF,OAmVF,CA/VA,WAEE,SAUC,KAgBA;AAhBD,OAmVF,CA/VA,WAEE,SAUC,KAgBI;EACH,eAAA;EACA,YAAA;EACA,kBAAA;EACA,sBAAA;EACA,aAAA;;AArBF,OAmVF,CA/VA,WAEE,SAUC,KAwBA,GACC;EACC,cAAA;EACA,qBAAA;EACA,YAAA;EACA,qBAAA;EACA,WAAA;;AA9BH,OAmVF,CA/VA,WAEE,SAUC,KAwBA,GASC;EACC,cAAA;;AAEA,OA+SL,CA/VA,WAEE,SAUC,KAwBA,GASC,KAGE;EACA,mBAAA;EACA,qBAAA;;AAIF,OAySJ,CA/VA,WAEE,SAUC,KAwBA,GAkBE,YACA;EACC,yBAAA;;AAIF,OAmSJ,CA/VA,WAEE,SAUC,KAwBA,GAwBE;AAAa,OAmSlB,CA/VA,WAEE,SAUC,KAwBA,GAwBgB;EACd,mBAAA;;AAGD,OA+RJ,CA/VA,WAEE,SAUC,KAwBA,GA4BE,KACA;EACC,cAAA;;AAIF,OAyRJ,CA/VA,WAEE,SAUC,KAwBA,GAkCE,WACA;EACC,eAAA;EACA,kBAAA;;AAEA,OAoRN,CA/VA,WAEE,SAUC,KAwBA,GAkCE,WACA,OAIE;EACA,6BAAA;EACA,SAAA;EACA,SAAS,GAAT;EACA,cAAA;EACA,SAAA;EACA,kBAAA;EACA,UAAA;EACA,QAAA;;AAGD,OAyQN,CA/VA,WAEE,SAUC,KAwBA,GAkCE,WACA,OAeE;EACA,gBAAA;;AAKH,OAmQJ,CA/VA,WAEE,SAUC,KAwBA,GAwDE,SACA;EACC,mBAAA;;AAEA,OA+PN,CA/VA,WAEE,SAUC,KAwBA,GAwDE,SACA,KAGE;EACA,mBAAA;;AALH,OAmQJ,CA/VA,WAEE,SAUC,KAwBA,GAwDE,SAUA;EACC,WAAA;;AAGD,OAqPL,CA/VA,WAEE,SAUC,KAwBA,GAwDE,SAcC;EACA,iCAAA;;AA/FJ,OAmVF,CA/VA,WAEE,SAUC,KAoGA;EACC,iBAAA;EACA,YAAA;EACA,mBAAA;;AAIF,OAwOF,CA/VA,WAEE,SAqHC;EHrHF,QAAA;;AACA,OG4VD,CA/VA,WAEE,SAqHC,OHpHD;AACD,OG2VD,CA/VA,WAEE,SAqHC,OHnHD;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,OGoVD,CA/VA,WAEE,SAqHC,OH5GD;EACA,WAAA;;AG2GA,OAwOF,CA/VA,WAEE,SAqHC,OAGA;EACC,SAAA;EACA,UAAA;EACA,6BAAA;;AANF,OAwOF,CA/VA,WAEE,SAqHC,OASA;EACC,cAAA;EACA,kBAAA;EACA,cAAA;EACA,YAAA;EACA,cAAA;EACA,eAAA;EACA,iBAAA;EACA,0BAAA;EACA,sBAAA;;AAEC,OAoNL,CA/VA,WAEE,SAqHC,OASA,OAWG;EACA,cAAA;EACA,0BAAA;;AAGD,OA+ML,CA/VA,WAEE,SAqHC,OASA,OAgBG;EACA,eAAA;EACA,oBAAA;EACA,qBAAA;;AA5BJ,OAwOF,CA/VA,WAEE,SAqHC,OASA,OAsBE;EACC,eAAA;EACA,SAAA;EACA,UAAA;;AAlCJ,OAwOF,CA/VA,WAEE,SAqHC,OASA,OAsBE,OAKC;EACC,aAAA;;AAEA,OAiMP,CA/VA,WAEE,SAqHC,OASA,OAsBE,OAKC,KAGE;EACA,eAAA;;AAxCN,OAwOF,CA/VA,WAEE,SAqHC,OA8CA;AA9CD,OAwOF,CA/VA,WAEE,SAqHC,OA8CO;EACN,mBAAA;EACA,4BAAA;EACA,mBAAA;EACA,eAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,WAAA;;AAtDF,OAwOF,CA/VA,WAEE,SAqHC,OA8CA,MAUC,KAAI;AAxDN,OAwOF,CA/VA,WAEE,SAqHC,OA8CO,MAUN,KAAI;EACH,WAAA;EACA,eAAA;EACA,iBAAA;;AAGD,OA0KJ,CA/VA,WAEE,SAqHC,OA8CA,MAgBE;AAAD,OA0KJ,CA/VA,WAEE,SAqHC,OA8CO,MAgBL;EACA,mBAAA;;AA/DH,OAwOF,CA/VA,WAEE,SAqHC,OAmEA;EACC,YAAA;;AApEF,OAwOF,CA/VA,WAEE,SAqHC,OAmEA,MAGC,KAAI;EACH,iBAAA;;AAKH,OA4JF,CA/VA,WAEE,SAiMC;EACA,mBAAA;EACA,4BAAA;EACA,0BAAA;EACA,6BAAA;EACA,YAAA;EACA,eAAA;EACA,iBAAA;;AAPD,OA4JF,CA/VA,WAEE,SAiMC,OASA;EACC,cAAA;EACA,eAAA;EACA,0BAAA;;AAEA,OA8IJ,CA/VA,WAEE,SAiMC,OASA,kBAKE;EACA,cAAA;EACA,0BAAA;;AAGD,OAyIJ,CA/VA,WAEE,SAiMC,OASA,kBAUE;EACA,cAAA;EACA,eAAA;EACA,oBAAA;;AAEA,OAoIL,CA/VA,WAEE,SAiMC,OASA,kBAUE,SAKC;EACA,cAAA;;AAOL,OA4HD,CA/VA,WAmOE;EACA,yBAAA;EACA,gBAAA;EACA,UAAA;EACA,YAAA;;AAGD,OAqHD,CA/VA,WA0OE;EACA,aAAA;;AADD,OAqHD,CA/VA,WA0OE,OAGA,GAAG;EACF,SAAA;EACA,UAAA;EACA,6BAAA;;AAGD,OA4GF,CA/VA,WA0OE,OASC;EACA,mBAAA;EACA,0BAAA;EACA,6BAAA;EACA,WAAA;;AAJD,OA4GF,CA/VA,WA0OE,OASC,OAMA;EACC,cAAA;EACA,cAAA;EACA,WAAA;EACA,iBAAA;EACA,SAAA;EACA,6BAAA;;AAEA,OA8FJ,CA/VA,WA0OE,OASC,OAMA,wBAQE;EACA,cAAA;;AAfH,OA4GF,CA/VA,WA0OE,OASC,OAmBA;EACC,YAAA;EACA,6BAAA;EACA,cAAA;;AAEA,OAoFJ,CA/VA,WA0OE,OASC,OAmBA,0BAKE;EACA,cAAA;;AAKH,OA8EF,CA/VA,WA0OE,OAuCC;AAAQ,OA8EX,CA/VA,WA0OE,OAuCU;EACT,WAAA;EACA,UAAA;;AAFD,OA8EF,CA/VA,WA0OE,OAuCC,MAIA;AAJQ,OA8EX,CA/VA,WA0OE,OAuCU,KAIT;EACC,aAAA;EACA,qBAAA;EACA,SAAA;EACA,cAAA;EACA,UAAA;EACA,kBAAA;;AAVF,OA8EF,CA/VA,WA0OE,OAuCC,MAIA,GAQC;AAZO,OA8EX,CA/VA,WA0OE,OAuCU,KAIT,GAQC;EACC,aAAA;;AAbH,OA8EF,CA/VA,WA0OE,OAuCC,MAIA,GAQC,GAGC;AAfM,OA8EX,CA/VA,WA0OE,OAuCU,KAIT,GAQC,GAGC;EAEC,WAAA;EACA,kBAAA;EACA,cAAA;EACA,cAAA;EACA,eAAA;EACA,iBAAA;EACA,qBAAA;;AAEA,OAqDN,CA/VA,WA0OE,OAuCC,MAIA,GAQC,GAGC,OAUE;AAAD,OAqDN,CA/VA,WA0OE,OAuCU,KAIT,GAQC,GAGC,OAUE;EACA,mBAAA;EACA,qBAAA;;AAIF,OA+CL,CA/VA,WA0OE,OAuCC,MAIA,GAQC,GAmBE,SACA;AADD,OA+CL,CA/VA,WA0OE,OAuCU,KAIT,GAQC,GAmBE,SACA;EACC,mBAAA;EACA,WAAA;;AAEA,OA0CP,CA/VA,WA0OE,OAuCC,MAIA,GAQC,GAmBE,SACA,OAIE;AAAD,OA0CP,CA/VA,WA0OE,OAuCU,KAIT,GAQC,GAmBE,SACA,OAIE;EACA,mBAAA;;AArCN,OA8EF,CA/VA,WA0OE,OAuCC,MA4CA;AA5CQ,OA8EX,CA/VA,WA0OE,OAuCU,KA4CT;EACC,mBAAA;EACA,4BAAA;EACA,gCAAA;EACA,wBAAA;EACA,cAAA;EACA,eAAA;EACA,iBAAA;EACA,iBAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;;AAGD,OAoBH,CA/VA,WA0OE,OAuCC,MA0DC;AAAD,OAoBH,CA/VA,WA0OE,OAuCU,KA0DR;EACA,cAAA;EACA,WAAA;;AAFD,OAoBH,CA/VA,WA0OE,OAuCC,MA0DC,KAIA;AAJD,OAoBH,CA/VA,WA0OE,OAuCU,KA0DR,KAIA;EACC,0BAAA;;AAKH,OAUF,CA/VA,WA0OE,OA2GC;EACA,8BAAA;EACA,YAAA;;AAFD,OAUF,CA/VA,WA0OE,OA2GC,KAIA;EACC,wBAAA;;AL1VJ,OM0BC,CA1BD;EACC,gBAAA;;ANDD,OM0BC,CA1BD,eAGC;EACC,WAAA;EACA,kBAAA;EACA,YAAA;EACA,kBAAA;;ANPF,OM0BC,CA1BD,eAUC;EACC,WAAA;EACA,YAAA;;ANZF,OM0BC,CA1BD,eAUC,qBAIC;EACC,iBAAA;EACA,WAAA;;ANhBH,OM0BC,CA1BD,eAUC,qBASC;EACC,eAAA;EACA,YAAA;EACA,cAAA;EACA,WAAA;;ANvBH,OOIC,CAJD;EACC,+CAAA;EACA,4CAAA;EACA,uCAAA;;APHD,OQ0DC,CA1DD;EACI,YAAA;EACA,eAAA;EACA,kBAAA;EACA,WAAA;;AAEH,OAoDA,CA1DD,OAME;AAAQ,OAoDT,CA1DD,OAMW;ENqDV,aAD4B,QAC5B;EACA,6BAAA;EACA,8BAAA;EACA,+BAAA;EACA,+BAAA;EACA,cAAA;EACA,WAAA;EACA,mCAAA;EACA,kCAAA;EM1DC,SAAA;EACA,cAAA;EACA,OAAA;EACA,kBAAA;EACA,QAAA;EACA,MAAA;;AAGD,OAyCA,CA1DD,OAiBE;EACA,SAAS,OAAT;EACA,aAAA;;AAGD,OAoCA,CA1DD,OAsBE,MAAM;EACN,cAAA;EACA,UAAA;;AAGD,OA+BA,CA1DD,OA2BE,gBAAgB;EAChB,SAAS,OAAT;;AAGD,OA2BA,CA1DD,OA+BE,gBAAgB;EAChB,SAAS,OAAT;;AAGD,OAuBA,CA1DD,OAmCE,gBAAgB;EAChB,SAAS,OAAT;;AAGD,OAmBA,CA1DD,OAuCE,gBAAgB;EAChB,SAAS,OAAT;;AAGD,OAeA,CA1DD,OA2CE,gBAAgB;EAChB,SAAS,OAAT;;AAGD,OAWA,CA1DD,OA+CE,gBAAgB;EAChB,SAAS,OAAT;;AAGD,OAOA,CA1DD,OAmDE,gBAAgB;EAChB,SAAS,OAAT;;AAGD,OAGA,CA1DD,OAuDE,gBAAgB;EAChB,SAAS,OAAT;;ACvDD,OA0CA,CA3CD,KACE;AAAD,OADM,SACL;EACA,uBAAA;EACA,sBAAA;EACA,gBAAA;;AAEA,OAqCD,CA3CD,KACE,MAKC;AAAD,OANK,SACL,MAKC;EACA,mBAAA;EACA,qBAAA;EACA,eAAA;;AAEA,OAgCF,CA3CD,KACE,MAKC,MAKC;AAAD,OAXI,SACL,MAKC,MAKC;EACA,uBAAA;EACA,kBAAA;EACA,mBAAA;;AAIF,OAyBD,CA3CD,KACE,MAiBC;AAAD,OAlBK,SACL,MAiBC;EACA,gBAAA;EACA,qBAAA;EACA,kFAAA;EACA,YAAA;;AAEA,OAmBF,CA3CD,KACE,MAiBC,MAMC;AAAD,OAxBI,SACL,MAiBC,MAMC;EACA,uBAAA;EACA,kBAAA;EACA,mBAAA;;AAIF,OAYD,CA3CD,KACE,MA8BC;AAAD,OA/BK,SACL,MA8BC;EACA,mBAAA;;AThCH,OSsCA,wBAAwB,OAAO,QAAO;ATtCtC,OSuCA,wBAAwB,OAAO,QAAO;EACrC,eAAA;EACA,kBAAA;EACA,aAAA;;AT1CD,OU6JA,CA7JA;EACC,yBAAA;EACA,kBAAA;EACA,YAAA;EACA,YAAA;;AAEA,OAuJD,CA7JA,QAME;EACA,6BAAA;;AAEA,OAoJF,CA7JA,QAME,eAGC,SACA;EACC,qBAAA;;AAEA,OAgJJ,CA7JA,QAME,eAGC,SACA,oBAGE;EACA,aAAA;;AALH,OAoJF,CA7JA,QAME,eAGC,SASA;EACC,eAAA;;AAbH,OAuJD,CA7JA,QAME,eAiBA,MACC,KAAI;EACH,aAAA;;AAnBH,OAuJD,CA7JA,QAME,eAuBA;EACC,aAAA;;AAxBF,OAuJD,CA7JA,QAME,eA2BA;EACC,aAAA;;AA5BF,OAuJD,CA7JA,QAME,eA2BA,oBAGC,OAAM;EACL,aAAA;;AAKH,OAmHD,CA7JA,QA0CE,eACA,YACC,MACC;EACC,YAAA;;AAEA,OA6GL,CA7JA,QA0CE,eACA,YACC,MACC,KAGE;EACA,eAAA;;AVjDN,OU6JA,CA7JA,QAwDC;EACC,SAAA;EACA,UAAA;EACA,WAAA;;AV3DF,OU6JA,CA7JA,QAwDC,cAKC;EACC,WAAA;EACA,eAAA;EACA,WAAA;EACA,qBAAA;;AAEA,OA0FH,CA7JA,QAwDC,cAKC,QAME;EACA,2BAAA;;AAGD,OAsFH,CA7JA,QAwDC,cAKC,QAUE;EACA,aAAA;;AVxEJ,OU6JA,CA7JA,QAwDC,cAKC,QAcC;EACC,YAAA;EACA,cAAA;EACA,mBAAA;EACA,kBAAA;;AAEA,OA4EJ,CA7JA,QAwDC,cAKC,QAcC,mBAME;EACA,aAAA;EACA,YAAA;;AVnFL,OU6JA,CA7JA,QAwDC,cAKC,QA0BC;EACC,eAAA;EACA,SAAA;EACA,SAAA;;AAEA,OAiEJ,CA7JA,QAwDC,cAKC,QA0BC,iBAKE;EACA,SAAS,QAAT;;AAGD,OA6DJ,CA7JA,QAwDC,cAKC,QA0BC,iBASE;EACA,WAAA;;AVjGL,OU6JA,CA7JA,QAwGC;EACC,kBAAA;EACA,qBAAA;EACA,WAAA;;AAEA,OAgDF,CA7JA,QAwGC,oBAKE;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;;AAHD,OAgDF,CA7JA,QAwGC,oBAKE,QAKA,MAAK;EACJ,kBAAA;EACA,WAAA;EACA,YAAA;;AVrHJ,OU6JA,CA7JA,QA0HC;EACC,YAAA;EACA,gBAAA;;AAEA,OA+BF,CA7JA,QA0HC,kBAIE;EACA,aAAA;EACA,YAAA;;AVhIH,OU6JA,CA7JA,QAoIC;EACC,eAAA;EACA,aAAA;EACA,iBAAA;;AVvIF,OU6JA,CA7JA,QA0IC;EACC,iBAAA;EACA,gBAAA;;AV5IF,OU6JA,CA7JA,QA0IC,SAIC;EACC,mBAAA;EACA,eAAA;EACA,iBAAA;;AAEA,OAUH,CA7JA,QA0IC,SAIC,KAKE;EACA,yBAAA;;AAGD,OAMH,CA7JA,QA0IC,SAIC,KASE;EACA,yBAAA;;AVxJJ,OW8GA,CA9GA;EACC,qBAAA;EACA,kBAAA;;AAGC,OAyGF,CA9GA,QAIE,sBACC,QACA,MAAK;EACJ,iBAAA;EACA,mBAAA;EACA,mBAAA;;AALH,OA0GD,CA9GA,QAIE,sBASA,MAAK;EACJ,gBAAA;EACA,uBAAA;EACA,mBAAA;;AAIA,OA0FH,CA9GA,QAIE,sBAeA,SAAQ,cACN;EACA,gBAAA;;AAKH,OAoFD,CA9GA,QA0BE,QACA;AADD,OAoFD,CA9GA,QA0BE,QAEA;AAFD,OAoFD,CA9GA,QA0BE,QAGA;EACC,cAAA;EACA,UAAA;;AALF,OAoFD,CA9GA,QA0BE,QAQA,MAAK;AARN,OAoFD,CA9GA,QA0BE,QAQqB,SAAQ;EAC5B,gBAAA;EACA,yBAAA;EACA,gBAAA;EACA,kBAAA;EACA,UAAA;;AXvCH,OW8GA,CA9GA,QA2CC,MAAK;AX3CN,OW8GA,CA9GA,QA2CsB,SAAQ;EAC5B,YAAA;;AAEA,OAgEF,CA9GA,QA2CC,MAAK,cAGH;AAAD,OAgEF,CA9GA,QA2CsB,SAAQ,cAG3B;EACA,gBAAA;EACA,YAAA;;AAEA,OA4DH,CA9GA,QA2CC,MAAK,cAGH,UAIC;AAAD,OA4DH,CA9GA,QA2CsB,SAAQ,cAG3B,UAIC;EACA,gBAAA;;AAEA,OAyDJ,CA9GA,QA2CC,MAAK,cAGH,UAIC,MAGC;AAAD,OAyDJ,CA9GA,QA2CsB,SAAQ,cAG3B,UAIC,MAGC;EACA,mBAAA;EACA,eAAA;;AAKH,OAkDF,CA9GA,QA2CC,MAAK,cAiBH;AAAD,OAkDF,CA9GA,QA2CsB,SAAQ,cAiB3B;EACA,yBAAA;EACA,gBAAA;;AAIF,OA4CD,CA9GA,QAkEE;EACA,eAAA;EACA,iBAAA;EACA,sBAAA;;AAGD,OAsCD,CA9GA,QAwEE;AACD,OAqCD,CA9GA,QAyEE;EACA,aAAA;EACA,OAAA;EACA,cAAA;EACA,kBAAA;EACA,QAAA;;AAGD,OA6BD,CA9GA,QAiFE;EACA,oBAAA;EACA,iBAAA;EACA,SAAA;;AAGD,OAuBD,CA9GA,QAuFE;EACA,YAAA;EACA,oBAAA;;AAFD,OAuBD,CA9GA,QAuFE,OAIA;AAJD,OAuBD,CA9GA,QAuFE,OAII;AAJL,OAuBD,CA9GA,QAuFE,OAIQ;AAJT,OAuBD,CA9GA,QAuFE,OAIY;AAJb,OAuBD,CA9GA,QAuFE,OAIgB;AAJjB,OAuBD,CA9GA,QAuFE,OAIoB;EACnB,SAAA;;AAIF,OAcD,CA9GA,QAgGE;EACA,mBAAA;EACA,4BAAA;EACA,sBAAA;EACA,kBAAA;EACA,YAAA;EACA,gCAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;EACA,SAAA;;AX3GF,OY0GA,CA1GA;;;AACC,OAyGD,CA1GA,MACE;EACA,YAAA;;AAEA,OAsGF,CA1GA,MACE,UAGC;EACA,mBAAA;EACA,kBAAA;;AZNH,OY0GA,CA1GA,MAWC,MAAK,cAAc,MAAO;AZX3B,OY0GA,CA1GA,MAYC,MAAK,cAAc,MAAO;AZZ3B,OY0GA,CA1GA,MAaC,aAAY;EACX,cAAA;;AZdF,OYmBA;EACC,kBAAA;;;AAEA,OAHD,cAGE;EACA,uBAAA;EACA,kBAAA;EACA,SAAS,GAAT;EACA,WAAA;EACA,SAAA;EACA,kBAAA;EACA,QAAA;EACA,UAAA;;AAGD,OAdD,cAcE;EAEA,yBAAA;EACA,mBAAA;EACA,SAAS,GAAT;EACA,YAAA;EACA,SAAA;EACA,kBAAA;EACA,QAAA;EACA,WAAA;;AAIA,OA3BF,cA0BE,QACC;EACA,gBAAA;;AAGD,OA/BF,cA0BE,QAKC;EACA,mBAAA;EACA,qBAAA;;AAIF,OArCD,cAqCE;EACA,mBAAA;;AAEA,OAxCF,cAqCE,SAGC;EACA,mBAAA;;AAGD,OA5CF,cAqCE,SAOC;EACA,mBAAA;EACA,WAAA;;AAKD,OAnDF,cAkDE,aACC;EACA,SAAA;EACA,QAAA;;AAGD,OAxDF,cAkDE,aAMC;EACA,OAAA;EACA,QAAA;;AAGD,OA7DF,cAkDE,aAWC;EACA,yBAAA;;AAEA,OAhEH,cAkDE,aAWC,UAGC;EACA,SAAA;EACA,SAAA;;AAGD,OArEH,cAkDE,aAWC,UAQC;EACA,SAAA;EACA,QAAA;;AAGD,OA1EH,cAkDE,aAWC,UAaC;EACA,mBAAA;EACA,kBAAA;;AZ/FJ,OYmBA,cAkFC,MAAK,cAAc,MAAO;EACzB,cAAA;;AZtGF,Oa4GC,CA5GD;EACC,sBAAA;EACA,kBAAA;;AAGC,OAuGD,CA5GD,SAIE,OACC;EACA,SAAA;EACA,OAAA;EACA,gBAAA;EACA,kBAAA;EACA,QAAA;EACA,MAAA;;AAIF,OA6FA,CA5GD,SAeE;AACD,OA4FA,CA5GD,SAgBE;EAEA,mBAAA;EACA,gBAAA;EACA,YAAA;EXlBD,QAAA;;AACA,OWyGA,CA5GD,SAeE,OXZA;AAAD,OWyGA,CA5GD,SAgBE,OXbA;AACD,OWwGA,CA5GD,SAeE,OXXA;AAAD,OWwGA,CA5GD,SAgBE,OXZA;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,OWiGA,CA5GD,SAeE,OXJA;AAAD,OWiGA,CA5GD,SAgBE,OXLA;EACA,WAAA;;AWWA,OAqFD,CA5GD,SAeE,OAQC;AAAD,OAqFD,CA5GD,SAgBE,OAOC;EACA,WAAA;;AAGD,OAiFD,CA5GD,SAeE,OAYC;AAAD,OAiFD,CA5GD,SAgBE,OAWC;EACA,YAAA;;AAcF,QAX2B;EACzB,OA4EF,CA5GD,SAeE,OAiBE;EAAD,OA4EF,CA5GD,SAgBE,OAgBE;EACD,OA2EF,CA5GD,SAeE,OAkBE;EAAD,OA2EF,CA5GD,SAgBE,OAiBE;IACA,WAAA;IXhCH,QAAA;;EACA,OWyGA,CA5GD,SAeE,OAiBE,KX7BF;EAAD,OWyGA,CA5GD,SAgBE,OAgBE,KX7BF;EAAD,OWyGA,CA5GD,SAeE,OAkBE,MX9BF;EAAD,OWyGA,CA5GD,SAgBE,OAiBE,MX9BF;EACD,OWwGA,CA5GD,SAeE,OAiBE,KX5BF;EAAD,OWwGA,CA5GD,SAgBE,OAgBE,KX5BF;EAAD,OWwGA,CA5GD,SAeE,OAkBE,MX7BF;EAAD,OWwGA,CA5GD,SAgBE,OAiBE,MX7BF;IACA,cAAA;IACA,SAAS,EAAT;IAGA,cAAA;;EAED,OWiGA,CA5GD,SAeE,OAiBE,KXrBF;EAAD,OWiGA,CA5GD,SAgBE,OAgBE,KXrBF;EAAD,OWiGA,CA5GD,SAeE,OAkBE,MXtBF;EAAD,OWiGA,CA5GD,SAgBE,OAiBE,MXtBF;IACA,WAAA;;EW0BC,OAsEF,CA5GD,SAeE,OAuBE;EAAD,OAsEF,CA5GD,SAgBE,OAsBE;IACA,kBAAA;;;AAKH,OAgEA,CA5GD,SA4CE;EACA,6BAAA;EX3BD,4BAAA;EACA,2BAAA;;AW8BA,OA2DA,CA5GD,SAiDE;EACA,0BAAA;EXxBD,+BAAA;EACA,8BAAA;;AW2BA,OAsDA,CA5GD,SAsDE;EACA,aAAA;EACA,SAAA;EACA,kBAAA;EACA,uBAAA;EACA,QAAA;;AAGD,OA8CA,CA5GD,SA8DE;EACA,gBAAA;EACA,kBAAA;;AAGD,OAyCA,CA5GD,SAmEE,WAEA;EACC,mBAAA;;AAHF,OAyCA,CA5GD,SAmEE,WAMA;EACC,aAAA;EACA,sBAAA;EACA,YAAA;;AAEA,OA8BF,CA5GD,SAmEE,WAMA,wBAKE;EACA,qBAAA;;AAZH,OAyCA,CA5GD,SAmEE,WAMA,wBASC,GAAE;EACD,gBAAA;;AAhBH,OAyCA,CA5GD,SAmEE,WAoBA;EACC,aAAA;EACA,WAAA;;AAEA,OAiBF,CA5GD,SAmEE,WAoBA,0BAIE;EACA,qBAAA;;AAKH,OAWA,CA5GD,SAiGE;EACA,WAAA;EACA,YAAA;;AAGD,OAMA,CA5GD,SAsGE;EACA,cAAA;EACA,WAAA;EACA,iBAAA;EACA,kBAAA;;Ab1GF,Oc6GC,CA7GD,SAAS,yBACR;EACC,iBAAA;;AAEA,OAyGD,CA7GD,SAAS,yBACR,iBAGE;EACA,iBAAA;;AAMF,OADD,eACE;EACA,qBAAA;EACA,SAAA;EACA,cAAA;EACA,kBAAA;EACA,mBAAA;EACA,QAAA;;AAND,OADD,eACE,MAQA,KAAI;EACH,WAAA;EACA,kBAAA;EACA,QAAA;;AAIF,OAhBD,eAgBE;AACD,OAjBD,eAiBE;EACA,gBAAA;EACA,WAAA;;AAHD,OAhBD,eAgBE,OAKA;AAJD,OAjBD,eAiBE,MAIA;EACC,6BAAA;EACA,2BAAA;EACA,gBAAA;;AAEA,OA1BH,eAgBE,OAKA,GAKE;AAAD,OA1BH,eAiBE,MAIA,GAKE;EACA,iBAAA;;AAKH,OAhCD,eAgCE;EACA,mBAAA;;AADD,OAhCD,eAgCE,OAGA;EACC,iBAAA;;AAGC,OAvCJ,eAgCE,OAGA,GAGE,SACC;AACD,OAxCJ,eAgCE,OAGA,GAGE,SAEC;EAEA,mBAAA;EACA,eAAA;EZPH,yBAAA;EACA,kBAAkB,2CAAlB;EACA,kBAAkB,sCAAsC,eAAmB,YAA3E;EACA,kBAAkB,8CAAlB;EACA,kBAAkB,yCAAlB;EACA,kBAAkB,4CAAlB;EACA,2BAAA;EACA,sHAAA;;AYIE,OA/CJ,eAgCE,OAGA,GAGE,SASC,OACA,KAAI;EACH,cAAA;;AAjBL,OAhCD,eAgCE,OAGA,GAmBC,KAAI;EACH,aAAA;EACA,YAAA;EACA,eAAA;;AAOD,OAhEH,eA8DE,MACA,GACE,MACA;EACC,mBAAA;EACA,kBAAA;EACA,aAAA;EACA,kBAAA;EACA,WAAA;;AAKD,OA3EJ,eA8DE,MACA,GAWE,WACC;EACA,mBAAA;EACA,eAAA;;AAIF,OAjFH,eA8DE,MACA,GAkBE;EACA,mBAAA;EACA,WAAA;;AAEA,OArFJ,eA8DE,MACA,GAkBE,SAIC;EACA,mBAAA;;AALF,OAjFH,eA8DE,MACA,GAkBE,SAQA,GAAE;EACD,kBAAA;;AAMJ,OAhGD,eAgGE;EACA,gBAAA;;Ad3GF,Oe+BC,CA/BD;EACC,sBAAA;EACA,WAAA;EACA,WAAA;EACA,eAAA;EACA,aAAA;EACA,iBAAA;EACA,iBAAA;EACA,kBAAA;EACA,YAAA;EAEA,oCAAA;EACA,4BAAA;;AfZD,Oe+BC,CA/BD,mBAcC;EACC,cAAA;EACA,gBAAA;;AAGD,OAYA,CA/BD,mBAmBE;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,WAAA;;AAJD,OAYA,CA/BD,mBAmBE,KAMA,IAAG;EACF,kBAAA;EACA,kBAAA;EACA,kBAAA;;Af5BH,OgBmEC,CAnED;EACC,qBAAA;EACA,kBAAA;;AAEA,OA+DA,CAnED,QAIE;EACA,WAAA;;AAGD,OA2DA,CAnED,QAQE,SACA;EACC,mBAAA;;AhBVH,OgBmEC,CAnED,QAcC;EACC,WAAA;EACA,mBAAA;;EACA,yBAAA;;AhBjBF,OgBmEC,CAnED,QAoBC;EACC,kBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,kBAAA;EACA,iBAAA;;AAEA,OAuCD,CAnED,QAoBC,KAQE;EACA,mBAAA;;AhB7BH,OgBmEC,CAnED,QAiCC;EACC,kBAAA;EACA,YAAA;EACA,WAAA;EACA,UAAA;;AhBrCF,OgBmEC,CAnED,QAwCC;EACC,qBAAA;EACA,QAAA;;AhB1CF,OgBmEC,CAnED,QAwCC,YAIC;EACC,kBAAA;EACA,QAAA;;AhB9CH,OgBmEC,CAnED,QAmDC,WAAW,OAAM;EAChB,4BAAA;;AhBpDF,OgBmEC,CAnED,QAuDC;EACC,oBAAA;EACA,QAAA;EACA,YAAA;EACA,8BAAA;;AhB3DF,OgBmEC,CAnED,QAuDC,cAMC;EACC,kBAAA;EACA,UAAA;EACA,QAAA;;AhBhEH,OiBqPC,CArPD;;;;;;;;;;;;;;AjBAA,OiBqPC,CArPD,UAEC;EACC,cAAA;;AjBHF,OiBqPC,CArPD,UAMC;EACC,WAAA;EACA,iBAAA;EACA,eAAA;;AASA,OAmOD,CArPD,UAgBC,gBAEE;EACA,gBAAA;;AjBnBH,OiBqPC,CArPD,UAgBC,gBAMC;EACC,cAAA;;AjBvBH,OiBqPC,CArPD,UAgBC,gBAUC;EACC,cAAA;;AjB3BH,OiBqPC,CArPD,UAgBC,gBAUC,UAGC;EACC,iBAAA;EACA,cAAA;;AjB/BJ,OiBqPC,CArPD,UAgBC,gBAoBC;EACC,WAAA;EACA,kBAAA;;AjBtCH,OiBqPC,CArPD,UA+CC,oBACC;EACC,eAAA;;AjBjDH,OiBqPC,CArPD,UA+CC,oBAKC;EACC,YAAA;EACA,mBAAA;EACA,eAAA;EACA,gBAAA;EACA,uBAAA;;AjBzDH,OiBqPC,CArPD,UA+CC,oBAaC;EACC,iBAAA;EACA,cAAA;;AjB9DH,OiBqPC,CArPD,UAuEC;EACC,cAAA;;AjBxEF,OiBqPC,CArPD,UAuEC,cAGC;EACC,mBAAA;;AjB3EH,OiBqPC,CArPD,UAuEC,cAOC;EACC,kBAAA;;AjB/EH,OiBqPC,CArPD,UAuEC,cAWC;EACC,cAAA;;AjBnFH,OiBqPC,CArPD,UA0FC;EACC,cAAA;EfzFD,QAAA;;AACA,OekPA,CArPD,UA0FC,iBfvFC;AACD,OeiPA,CArPD,UA0FC,iBftFC;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,Oe0OA,CArPD,UA0FC,iBf/EC;EACA,WAAA;;AFZF,OiBqPC,CArPD,UA0FC,iBAKC;EACC,cAAA;;AjBhGH,OiBqPC,CArPD,UA0FC,iBASC;EACC,iBAAA;EACA,cAAA;;AjBrGH,OiBqPC,CArPD,UA0FC,iBAcC;EACC,WAAA;;AjBzGH,OiBqPC,CArPD,UA0FC,iBAcC,oBAGC;EACC,eAAA;;AjB5GJ,OiBqPC,CArPD,UA0FC,iBAcC,oBAOC;EACC,WAAA;EACA,kBAAA;;AjBjHJ,OiBqPC,CArPD,UA0FC,iBAcC,oBAOC,SAIC;EACC,gBAAA;;AjBpHL,OiBqPC,CArPD,UA8HE,gBAEC;EACC,gBAAA;Ef/HH,QAAA;;AACA,OekPA,CArPD,UA8HE,gBAEC,qBf7HD;AACD,OeiPA,CArPD,UA8HE,gBAEC,qBf5HD;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,Oe0OA,CArPD,UA8HE,gBAEC,qBfrHD;EACA,WAAA;;AFZF,OiBqPC,CArPD,UA8HE,gBAEC,qBAIC;EACC,gBAAA;;AjBrIL,OiBqPC,CArPD,UA8HE,gBAWC;EACC,gBAAA;EfxIH,QAAA;;AACA,OekPA,CArPD,UA8HE,gBAWC,oBftID;AACD,OeiPA,CArPD,UA8HE,gBAWC,oBfrID;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,Oe0OA,CArPD,UA8HE,gBAWC,oBf9HD;EACA,WAAA;;AFZF,OiBqPC,CArPD,UA8HE,gBAgBC;EACC,iBAAA;;AjB/IJ,OiBqPC,CArPD,UAsJE,eAEC;EACC,gBAAA;EfvJH,QAAA;;AACA,OekPA,CArPD,UAsJE,eAEC,oBfrJD;AACD,OeiPA,CArPD,UAsJE,eAEC,oBfpJD;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,Oe0OA,CArPD,UAsJE,eAEC,oBf7ID;EACA,WAAA;;AFZF,OiBqPC,CArPD,UAsJE,eAEC,oBAIC;EACC,iBAAA;;AjB7JL,OiBqPC,CArPD,UAsJE,eAWC;EACC,iBAAA;;AjBlKJ,OiBqPC,CArPD,UAsJE,eAeC;EACC,iBAAA;;AjBtKJ,OiBqPC,CArPD,UAsJE,eAoBC;EACC,gBAAA;EfzKH,QAAA;;AACA,OekPA,CArPD,UAsJE,eAoBC,mBfvKD;AACD,OeiPA,CArPD,UAsJE,eAoBC,mBftKD;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,Oe0OA,CArPD,UAsJE,eAoBC,mBf/JD;EACA,WAAA;;AFZF,OiBqPC,CArPD,UAsJE,eAoBC,mBAIC;EACC,iBAAA;;AjB/KL,OiBqPC,CArPD,UAwLE,eAEC,OAAM,IAAI;EACT,sBAAA;;AAIA,OAsDH,CArPD,UAwLE,eAMC,WACE;EACA,kBAAA;EACA,aAAA;;AAEA,OAkDJ,CArPD,UAwLE,eAMC,WACE,SAIC;EACA,uBAAA;EACA,SAAA;EACA,SAAS,EAAT;EACA,OAAA;EACA,kBAAA;EACA,QAAA;EACA,MAAA;EACA,UAAA;;AjB3MN,OiBqPC,CArPD,UAiNE;EACC,WAAA;;AjBlNH,OiBqPC,CArPD,UAqNE,MAAK;EACJ,WAAA;EACA,iBAAA;;AjBvNH,OiBqPC,CArPD,UAqNE,MAAK,MAIJ;EACC,eAAA;;AjB1NJ,OiBqPC,CArPD,UAkOC,YAEC;EACC,WAAA;EACA,qBAAA;EACA,kBAAA;;AjBvOH,OiBqPC,CArPD,UAkOC,YAQC;EACC,cAAA;;AC1OF,OAKA,CAND,OACE,SACA;EACC,mBAAA;;ACDF,OAwBA,CA1BD,WAEE;EACA,mBAAA;;AAGD,OAoBA,CA1BD,WAME;EACA,qBAAA;EACA,kBAAA;EACA,kBAAA;EACA,MAAA;;AnBVF,OmB0BC,CA1BD,WAaC;EACC,gBAAA;EACA,cAAA;;AnBfF,OmB0BC,CA1BD,WAkBC,KAAI;EACH,mBAAA;;AnBnBF,OmB0BC,CA1BD,WAkBC,KAAI,gBAGH;EACC,mBAAA;EACA,gBAAA;;AnBvBH,OoBqKC,CArKD;EACC,yBAAA;EACA,8BAAA;EACA,yBAAA;EACA,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,gBAAA;;ApBPD,OoBqKC,CArKD,KASC,EAAC;EACA,aAAA;;ApBVF,OoBqKC,CArKD,KAaC,OAAM;EACL,cAAA;;ApBdF,OoBqKC,CArKD,KAiBC;EACC,eAAA;EACA,aAAA;EACA,gBAAA;EACA,gBAAA;;ApBrBF,OoBqKC,CArKD,KAwBC;EACC,SAAA;EACA,eAAA;EACA,kBAAA;;ApB3BF,OoBqKC,CArKD,KA8BC;EAEC,iBAAA;;ApBhCF,OoBqKC,CArKD,KAmCC,WAAW,sBAAsB;EAChC,WAAU,aAAV;EACA,eAAc,aAAd;EACA,mBAAkB,aAAlB;EACA,kBAAA;EACA,UAAA;;ApBxCF,OoBqKC,CArKD,KA2CC,sBAAsB,sBAAsB,YAAW;EACtD,SAAS,OAAT;;ApB5CF,OoBqKC,CArKD,KA+CC,aAEC;EACC,kBAAA;EACA,kBAAA;;ApBnDH,OoBqKC,CArKD,KA+CC,aAEC,oBAIC,kBAAiB;EAChB,cAAA;;ApBtDJ,OoBqKC,CArKD,KA+CC,aAEC,oBAQC;EACC,eAAA;EACA,kBAAA;;AAEA,OAwGH,CArKD,KA+CC,aAEC,oBAQC,gBAIE;EACA,kBAAA;EACA,SAAA;;ApB/DL,OoBqKC,CArKD,KA+CC,aAEC,oBAmBC;EACC,mBAAA;EACA,kBAAA;EACA,6BAAA;EACA,SAAA;;ApBxEJ,OoBqKC,CArKD,KA+CC,aAEC,oBA0BC;EACC,mBAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;;ApB/EJ,OoBqKC,CArKD,KA+CC,aAqCC;EACC,iBAAA;;ApBrFH,OoBqKC,CArKD,KA0FC;EACC,kBAAA;EACA,eAAA;EACA,kBAAA;EACA,iBAAA;;ApB9FF,OoBqKC,CArKD,KA0FC,WAMC;EACC,mBAAA;EACA,kBAAA;EACA,6BAAA;EACA,SAAA;;ApBpGH,OoBqKC,CArKD,KA0FC,WAaC,gBAAe;EACd,cAAA;;AAGD,OA0DD,CArKD,KA0FC,WAiBE,cAAe;EACf,yBAAA;EACA,WAAA;;ApB7GH,OoBqKC,CArKD,KA0FC,WAsBC;EACC,mBAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;;ApBpHH,OoBqKC,CArKD,KAyHC,YAAW,MAAO;EACjB,cAAA;;AAID,OAuCA,CArKD,KA8HE,mBAEA,aAEC;EACC,6BAAA;EACA,SAAA;;AANH,OAuCA,CArKD,KA8HE,mBAEA,aAOC,YAAW;EACV,eAAA;EACA,cAAA;;AAXH,OAuCA,CArKD,KA8HE,mBAEA,aAYC;EACC,sBAAA;EACA,kBAAA;;AAGA,OAoBH,CArKD,KA8HE,mBAEA,aAYC,oBAKE;EACA,yBAAA;EACA,WAAA;;AArBJ,OAuCA,CArKD,KA8HE,mBA2BA,aAAY,cAAe,sBAAsB;EAChD,yBAAA;EACA,WAAA;;AAEA,OAQF,CArKD,KA8HE,mBA2BA,aAAY,cAAe,sBAAsB,kBAI/C;EACA,yBAAA;EACA,WAAA;;ApB/JJ,OqByLC,CAzLD;EnBEC,QAAA;EmBEA,yBAAA;EACA,kBAAA;EACA,0CAAA;EACA,yBAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;;AnBPA,OmBsLA,CAzLD,OnBGE;AACD,OmBqLA,CAzLD,OnBIE;EACA,cAAA;EACA,SAAS,EAAT;EAGA,cAAA;;AAED,OmB8KA,CAzLD,OnBWE;EACA,WAAA;;AFZF,OqByLC,CAzLD,OAYC;EACC,6BAAA;EACA,UAAA;EACA,SAAA;EACA,aAAA;;AAIE,OAqKH,CAzLD,OAYC,SAME,kBACA,GACE;EACA,eAAA;;AAEA,OAkKJ,CAzLD,OAYC,SAME,kBACA,GACE,SAGC;EACA,mBAAA;EACA,cAAA;EACA,eAAA;;AAHD,OAkKJ,CAzLD,OAYC,SAME,kBACA,GACE,SAGC,MAKA,SAAQ;EACP,0BAAA;;ArB7BP,OqByLC,CAzLD,OAYC,SAwBC;EACC,WAAA;EACA,SAAA;EACA,sBAAA;EACA,YAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,cAAA;EACA,eAAA;EACA,mBAAA;;ArB9CH,OqByLC,CAzLD,OAYC,SAwBC,GAYC;EACC,8BAAA;EACA,+BAAA;EACA,eAAA;EACA,cAAA;EACA,kBAAA;EACA,YAAA;EACA,MAAA;EACA,UAAA;;ArBxDJ,OqByLC,CAzLD,OAYC,SAwBC,GAuBC,SAAQ;EACP,8BAAA;EACA,+BAAA;EACA,eAAA;EACA,SAAS,EAAT;EACA,cAAA;EACA,kBAAA;EACA,UAAA;EACA,UAAA;;AAGD,OAmHF,CAzLD,OAYC,SAwBC,GAkCE;EACA,mBAAA;EACA,cAAA;;AAEA,OA+GH,CAzLD,OAYC,SAwBC,GAkCE,SAIC;EACA,mBAAA;EACA,eAAA;;AAFD,OA+GH,CAzLD,OAYC,SAwBC,GAkCE,SAIC,MAIA,SAAQ;EACP,+BAAA;;AATH,OAmHF,CAzLD,OAYC,SAwBC,GAkCE,SAaA,SAAQ;EACP,+BAAA;;AAGF,OAkGF,CAzLD,OAYC,SAwBC,GAmDE;EACA,mBAAA;EACA,cAAA;EACA,eAAA;;AAHD,OAkGF,CAzLD,OAYC,SAwBC,GAmDE,OAKA,SAAQ;EACP,+BAAA;;AANF,OAkGF,CAzLD,OAYC,SAwBC,GAmDE,OASA;EACC,yBAAA;;ArBjGL,OqByLC,CAzLD,OAYC,SAwBC,GAiEC;EACC,iBAAA;;ArBtGJ,OqByLC,CAzLD,OAYC,SAwBC,GAqEC;EACC,yBAAA;;ArB1GJ,OqByLC,CAzLD,OAYC,SAkGC,GAAE;EACD,0BAAA;EACA,kBAAA;;ArBhHH,OqByLC,CAzLD,OAoHC;EACC,aAAA;EACA,kBAAA;EACA,QAAA;EACA,iBAAA;EACA,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EACA,yBAAA;EACA,8BAAA;;ArB9HF,OqByLC,CAzLD,OAoHC,WAYC;EACC,iBAAA;EACA,eAAA;EACA,iBAAA;;AAIA,OAkDF,CAzLD,OAoHC,WAkBC,UACE;EACA,mBAAA;;ArBxIJ,OqByLC,CAzLD,OAoHC,WAkBC,UAKC;EACC,iBAAA;;AAKD,OAwCF,CAzLD,OAoHC,WA4BC,UACE;EACA,mBAAA;;ArBlJJ,OqByLC,CAzLD,OAoHC,WA4BC,UAKC;EACC,gBAAA;;ArBtJJ,OqByLC,CAzLD,OA2JC;EACC,6BAAA;EACA,aAAA;EACA,WAAA;EACA,WAAA;;ArB/JF,OqByLC,CAzLD,OA2JC,cAMC;EACC,aAAA;;ArBlKH,OqByLC,CAzLD,OA2JC,cAUC;EACC,cAAA;;ArBtKH,OqByLC,CAzLD,OA2JC,cAUC,UAGC,WACC;EACC,qBAAA;;AAOJ,OAQA,CAzLD,OAiLE,SACA,WAAW,uBAAsB;EAChC,aAAA;;AAFF,OAQA,CAzLD,OAiLE,SAIA,WAAW;EACV,cAAA","sourcesContent":[".fuelux {\n\n\t// Core variables, mixins, and icons\n\t@import \"variables.less\";\t// Modify this for custom colors, font-sizes, etc\n\t@import \"mixins.less\";\n\t@import \"icons.less\";\n\n\t// Fuel UX controls\n\t@import \"checkbox.less\";\n\t@import \"combobox.less\";\n\t@import \"datepicker.less\";\n\t@import \"infinite-scroll.less\";\n\t@import \"intelligent-dropdown.less\";\n\t@import \"loader.less\";\n\t@import \"misc.less\";\n\t@import \"pillbox.less\";\n\t@import \"placard.less\";\n\t@import \"radio.less\";\n\t@import \"repeater.less\";\n\t@import \"repeater-list.less\";\n\t@import \"repeater-thumbnail.less\";\n\t@import \"spinbox.less\";\n    @import \"scheduler.less\";\n\t@import \"search.less\";\n\t@import \"selectlist.less\";\n\t@import \"tree.less\";\n\t@import \"wizard.less\";\n\n}\n","@charset \"UTF-8\";\n\n@font-face {\n\tfont-family: \"fuelux\";\n\tsrc:url(\"@{fueluxFontPath}fuelux.eot\");\n\tsrc:url(\"@{fueluxFontPath}fuelux.eot?#iefix\") format(\"embedded-opentype\"),\n\turl(\"@{fueluxFontPath}fuelux.woff\") format(\"woff\"),\n\turl(\"@{fueluxFontPath}fuelux.ttf\") format(\"truetype\"),\n\turl(\"@{fueluxFontPath}fuelux.svg#fuelux\") format(\"svg\");\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n\n//This could be an interesting addition...\n//[data-icon]:before {\n//\t.iconBaseStyles();\n//\tcontent: attr(data-icon);\n//}\n\n[class^=\"fueluxicon-\"]:before,\n[class*=\" fueluxicon-\"]:before {\n\t.iconBaseStyles();\n}\n\n.fueluxicon-loader-full:before {\n\tcontent: \"\\e000\";\n}\n\n.fueluxicon-loader-1:before {\n\tcontent: \"\\e001\";\n}\n\n.fueluxicon-loader-2:before {\n\tcontent: \"\\e002\";\n}\n\n.fueluxicon-loader-3:before {\n\tcontent: \"\\e003\";\n}\n\n.fueluxicon-loader-4:before {\n\tcontent: \"\\e004\";\n}\n\n.fueluxicon-loader-5:before {\n\tcontent: \"\\e005\";\n}\n\n.fueluxicon-loader-6:before {\n\tcontent: \"\\e006\";\n}\n\n.fueluxicon-loader-7:before {\n\tcontent: \"\\e007\";\n}\n\n.fueluxicon-loader-8:before {\n\tcontent: \"\\e008\";\n}\n\n//tree\n\n.fueluxicon-bullet:before {\n  content: \"\\e009\";\n}","// For clearing floats\n.clearfix {\n\t*zoom: 1;\n\t&:before,\n\t&:after {\n\t\tdisplay: table;\n\t\tcontent: \"\";\n\t\t// Fixes Opera/contenteditable bug:\n\t\t// http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952\n\t\tline-height: 0;\n\t}\n\t&:after {\n\t\tclear: both;\n\t}\n}\n\n// Single side border-radius\n.border-top-radius(@radius) {\n\tborder-top-right-radius: @radius;\n\tborder-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n\tborder-bottom-right-radius: @radius;\n \tborder-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n\tborder-bottom-right-radius: @radius;\n\tborder-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n\tborder-bottom-left-radius: @radius;\n\tborder-top-left-radius: @radius;\n}\n\n// Gradient Bar Colors for buttons and alerts\n.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {\n\tcolor: @textColor;\n\ttext-shadow: @textShadow;\n\t#gradient > .vertical(@primaryColor, @secondaryColor);\n\tborder-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);\n\tborder-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);\n}\n\n// Gradients\n#gradient {\n\t.vertical(@startColor: #555, @endColor: #333) {\n\t\tbackground-color: mix(@startColor, @endColor, 60%);\n\t\tbackground-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+\n\t\tbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+\n\t\tbackground-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+\n\t\tbackground-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10\n\t\tbackground-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10\n\t\tbackground-repeat: repeat-x;\n\t\tfilter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@startColor),argb(@endColor))); // IE9 and down\n\t}\n}\n\n// Icon Base Styles\n.iconBaseStyles(@fontFamily: \"fuelux\"){\n\tfont-family: @fontFamily !important;\n\tfont-style: normal !important;\n\tfont-weight: normal !important;\n\tfont-variant: normal !important;\n\ttext-transform: none !important;\n\tline-height: 1;\n\tspeak: none;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n// Opacity\n.opacity(@opacity) {\n\topacity: @opacity / 100;\n\tfilter: ~\"alpha(opacity=@{opacity})\";\n}",".checkbox {\n\n\t&.highlight {\n\t\tpadding: 4px;\n\n\t\t&.checked {\n\t\t\tbackground: #e9e9e9;\n\t\t\tborder-radius: @baseBorderRadius;\n\t\t}\n\t}\n\n\t/* for keyboard tabbing */\n\tinput[type=\"checkbox\"]:focus + .checkbox-label,\n\tinput[type=\"checkbox\"]:hover + .checkbox-label,\n\t.checkbox-label:hover {\n\t\tcolor: @grayLight;\n\t}\n\n}\n\n.checkbox-custom {\n\tposition: relative;\n\n\t&:before\n\t{\n\t\t.iconBaseStyles(\"Glyphicons Halflings\");\n\n\t\tborder: 1px solid #adadad;\n\t\tborder-radius: @baseBorderRadius;\n\t\tcolor: #fff;\n\t\tcontent: \" \";\n\t\tfont-size: 9px;\n\t\theight: 14px;\n\t\tleft: 0px;\n\t\tpadding: 1px 0 0 1px;\n\t\tposition: absolute;\n\t\ttop: 3px;\n\t\twidth: 14px;\n\t}\n\n\t&.checked {\n\t\t&:before {\n\t\t\tbackground: #39b3d7;\n\t\t\tborder-color: #39b3d7;\n\t\t\tcontent: \"\\e013\";\n\t\t}\n\t}\n\n\t&.disabled {\n\t\tcursor: not-allowed;\n\n\t\t&:before\n\t\t{\n\t\t\tcursor: not-allowed;\n\t\t\topacity: .5;\n\t\t}\n\t}\n\n\t&.checkbox-inline {\n\t\t&:before {\n\t\t\tleft: 0;\n\t\t\ttop: 3px;\n\t\t}\n\n\t\t&.highlight {\n\t\t\tpadding: 4px 4px 4px 24px;\n\n\t\t\t&:before {\n\t\t\t\tleft: 4px;\n\t\t\t\ttop: 7px;\n\t\t\t}\n\n\t\t\t&.checked {\n\t\t\t\tbackground: #e9e9e9;\n\t\t\t\tborder-radius: @baseBorderRadius;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* for keyboard tabbing */\n\tinput[type=\"checkbox\"]:focus + .checkbox-label {\n\t\tcolor: @grayLight;\n\t}\n\n}",".combobox {\n\t&.disabled {\n\t\t.input-group-btn {\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n}",".datepicker {\n\n\t&-calendar {\n\t\tpadding: 16px 16px 0;\n\t\tmin-height: 262px;\n\n\t\tbutton {\n\t\t\tborder: 0;\n\t\t\tpadding: 0;\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t&-days {\n\t\t\theight: 182px;\n\t\t\tmargin: 10px 0 12px;\n\t\t\twidth: 100%;\n\n\t\t\tthead {\n\t\t\t\tborder-bottom: 1px solid #cccaca;\n\t\t\t}\n\n\t\t\t/* for spacing */\n\t\t\ttbody:before {\n\t\t\t\tline-height:3px;\n\t\t\t\tcontent:\"\\200C\";\n\t\t\t\tdisplay:block;\n\t\t\t}\n\n\t\t\ttd, th {\n\t\t\t\tfont-size: 14px;\n\t\t\t\theight: 32px;\n\t\t\t\ttext-align: center;\n\t\t\t\tvertical-align: middle;\n\t\t\t\twidth: 14.29%;\n\t\t\t}\n\n\t\t\ttd {\n\t\t\t\tbutton {\n\t\t\t\t\tcolor: #231f20;\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\theight: 30px;\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\twidth: 30px;\n\t\t\t\t}\n\n\t\t\t\tspan {\n\t\t\t\t\tdisplay: block;\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\tbackground: #b7e3f8;\n\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.current-day {\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder: 1px solid #1d75bb;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.last-month, &.next-month {\n\t\t\t\t\tbackground: #e3e2e1;\n\t\t\t\t}\n\n\t\t\t\t&.past {\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tcolor: #8d8787;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.restricted {\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tcursor: no-drop;\n\t\t\t\t\t\tposition: relative;\n\n\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\tborder-top: 1px solid #a94442;\n\t\t\t\t\t\t\tbottom: 0;\n\t\t\t\t\t\t\tcontent: \" \";\n\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\tleft: 5px;\n\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\tright: 5px;\n\t\t\t\t\t\t\ttop: 50%;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground: none;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.selected {\n\t\t\t\t\tspan {\n\t\t\t\t\t\tbackground: #1d75bb;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground: #0f5f9f;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tcolor: #fff;\n\t\t\t\t\t}\n\n\t\t\t\t\t&.current-day {\n\t\t\t\t\t\tbox-shadow: 0 0 0 1px #fff offset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tth {\n\t\t\t\tfont-weight: bold;\n\t\t\t\theight: 22px;\n\t\t\t\tvertical-align: top;\n\t\t\t}\n\t\t}\n\n\t\t&-header {\n\t\t\t.clearfix;\n\n\t\t\tbutton {\n\t\t\t\tborder: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n\t\t\t.title {\n\t\t\t\tmargin: 0 auto;\n\t\t\t\ttext-align: center;\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: 174px;\n\t\t\t\tcolor: #4d4d4f;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tline-height: 30px;\n\t\t\t\ttext-decoration: underline;\n\t\t\t\tvertical-align: middle;\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\tcolor: #1d75bb;\n\t\t\t\t\t\ttext-decoration: underline;\n\t\t\t\t\t}\n\n\t\t\t\t\t&.disabled {\n\t\t\t\t\t\tcursor: default;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t}\n\n\t\t\t\t\t.month {\n\t\t\t\t\t\tdisplay: inline;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t\tpadding: 0;\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tdisplay: none;\n\n\t\t\t\t\t\t\t&.current {\n\t\t\t\t\t\t\t\tdisplay: inline;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t.next, .prev {\n\t\t\t\tbackground: #666669;\n\t\t\t\tbackground-clip: padding-box;\n\t\t\t\tborder-radius: 30px;\n\t\t\t\tcursor: pointer;\n\t\t\t\tfloat: left;\n\t\t\t\theight: 30px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 30px;\n\n\t\t\t\tspan.glyphicon {\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t\tline-height: 30px;\n\t\t\t\t}\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #1d75bb;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.next {\n\t\t\t\tfloat: right;\n\n\t\t\t\tspan.glyphicon {\n\t\t\t\t\tline-height: 28px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-footer {\n\t\t\tbackground: #e3e2e1;\n\t\t\tbackground-clip: padding-box;\n\t\t\tborder-radius: 0 0 4px 4px;\n\t\t\tborder-top: 1px solid #cccaca;\n\t\t\theight: 30px;\n\t\t\tmargin: 0 -16px;\n\t\t\tpadding: 4px 14px;\n\n\t\t\t.datepicker-today {\n\t\t\t\tcolor: #231f20;\n\t\t\t\tfont-size: 14px;\n\t\t\t\ttext-decoration: underline;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcolor: #1b75bb;\n\t\t\t\t\ttext-decoration: underline;\n\t\t\t\t}\n\n\t\t\t\t&.disabled {\n\t\t\t\t\tcolor: #8b8c8e;\n\t\t\t\t\tcursor: default;\n\t\t\t\t\tpointer-events: none;\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\tcolor: #8b8c8e\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&-calendar-wrapper {\n\t\tborder: 1px solid #6e6f71;\n\t\tmin-height: 20px;\n\t\tpadding: 0;\n\t\twidth: 300px;\n\t}\n\n\t&-wheels {\n\t\tdisplay: none;\n\n\t\tul button {\n\t\t\tborder: 0;\n\t\t\tpadding: 0;\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t&-footer {\n\t\t\tbackground: #e3e2e1;\n\t\t\tborder-radius: 0 0 4px 4px;\n\t\t\tborder-top: 1px solid #cccaca;\n\t\t\tclear: both;\n\n\t\t\t.datepicker-wheels-back {\n\t\t\t\tdisplay: block;\n\t\t\t\tcolor: #4d4d4f;\n\t\t\t\tfloat: left;\n\t\t\t\tline-height: 22px;\n\t\t\t\tborder: 0;\n\t\t\t\tbackground-color: transparent;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcolor: #1d75bb;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.datepicker-wheels-select {\n\t\t\t\tfloat: right;\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tcolor: @blue;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcolor: #1d75bb;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-month, &-year {\n\t\t\tfloat: left;\n\t\t\twidth: 50%;\n\n\t\t\tul {\n\t\t\t\theight: 217px;\n\t\t\t\tlist-style-type: none;\n\t\t\t\tmargin: 0;\n\t\t\t\toverflow: auto;\n\t\t\t\tpadding: 0;\n\t\t\t\ttext-align: center;\n\n\t\t\t\tli {\n\t\t\t\t\tmargin: 4px 0;\n\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\tcolor: #414041;\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\tfont-size: 16px;\n\t\t\t\t\t\tline-height: 24px;\n\t\t\t\t\t\ttext-decoration: none;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground: #aee0f8;\n\t\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t&.selected {\n\t\t\t\t\t\tbutton {\n\t\t\t\t\t\t\tbackground: #1d75bb;\n\t\t\t\t\t\t\tcolor: #fff;\n\n\t\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\t\tbackground: #0f5f9f;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.header {\n\t\t\t\tbackground: #e3e2e1;\n\t\t\t\tbackground-clip: padding-box;\n\t\t\t\tborder-bottom: 1px solid #cccaca;\n\t\t\t\tborder-radius: 4px 0 0 0;\n\t\t\t\tcolor: #4d4d4f;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tline-height: 30px;\n\t\t\t\tmargin-top: 0;\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\n\t\t\t&.full {\n\t\t\t\tborder-left: 0;\n\t\t\t\twidth: 100%;\n\n\t\t\t\t.header {\n\t\t\t\t\tborder-radius: 4px 4px 0 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-year {\n\t\t\tborder-left: 1px solid #cccaca;\n\t\t\tfloat: right;\n\n\t\t\t.header {\n\t\t\t\tborder-radius: 0 4px 0 0;\n\t\t\t}\n\t\t}\n\t}\n}\n",".infinitescroll {\n\toverflow-y: auto;\n\n\t.infinitescroll-end {\n\t\tclear: both;\n\t\tfont-style: italic;\n\t\tpadding: 6px;\n\t\ttext-align: center;\n\t}\n\n\t.infinitescroll-load {\n\t\tclear: both;\n\t\tpadding: 6px;\n\n\t\tbutton {\n\t\t\tpadding: 5px 12px;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.loader {\n\t\t\tfont-size: 32px;\n\t\t\theight: 32px;\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 32px;\n\t\t}\n\t}\n}",".dropUp {\n\t-webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n\t-moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n\tbox-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n}",".loader {\n    height: 64px;\n    font-size: 64px;\n    position: relative;\n    width: 64px;\n\n\t&:after, &:before {\n\t\t.iconBaseStyles();\n\n\t\tbottom: 0;\n\t\tdisplay: block;\n\t\tleft: 0;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttop: 0;\n\t}\n\n\t&:before {\n\t\tcontent: '\\e000';\n\t\topacity: 0.33;\n\t}\n\n\t&.iefix:before{\n\t\tcolor: #bcbcbc;\n\t\topacity: 1;\n\t}\n\n\t&[data-frame=\"1\"]:after {\n\t\tcontent: '\\e001';\n\t}\n\n\t&[data-frame=\"2\"]:after {\n\t\tcontent: '\\e002';\n\t}\n\n\t&[data-frame=\"3\"]:after {\n\t\tcontent: '\\e003';\n\t}\n\n\t&[data-frame=\"4\"]:after {\n\t\tcontent: '\\e004';\n\t}\n\n\t&[data-frame=\"5\"]:after {\n\t\tcontent: '\\e005';\n\t}\n\n\t&[data-frame=\"6\"]:after {\n\t\tcontent: '\\e006';\n\t}\n\n\t&[data-frame=\"7\"]:after {\n\t\tcontent: '\\e007';\n\t}\n\n\t&[data-frame=\"8\"]:after {\n\t\tcontent: '\\e008';\n\t}\n}","input, textarea {\n\t&.glass {\n\t\tbackground: transparent;\n\t\tborder: 1px solid #fff;\n\t\tbox-shadow: none;\n\n\t\t&:hover {\n\t\t\tbackground: #d9edf7;\n\t\t\tborder-color: #66afe9;\n\t\t\tcursor: pointer;\n\n\t\t\t&[disabled] {\n\t\t\t\tbackground: transparent;\n\t\t\t\tborder-color: #fff;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\t\t}\n\n\t\t&:focus {\n\t\t\tbackground: #fff;\n\t\t\tborder-color: #66afe9;\n\t\t\tbox-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6);\n\t\t\tcursor: auto;\n\n\t\t\t&[disabled] {\n\t\t\t\tbackground: transparent;\n\t\t\t\tborder-color: #fff;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\t\t}\n\n\t\t&[disabled] {\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n}\n\n// makes radios and checkboxes that use Bootstrap button plugin accessible (tabbable)  \n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n\tdisplay:inline;\n\tposition:absolute;\n\tleft:-9999px;\n}",".pillbox {\n\tborder: 1px solid #BBBBBB;\n\tborder-radius: 4px;\n\tcursor: text;\n\tpadding: 3px;\n\n\t&[data-readonly] {\n\t\tborder: 1px solid transparent;\n\n\t\t&.truncate {\n\t\t\t.pillbox-input-wrap {\n\t\t\t\tdisplay: inline-block;\n\n\t\t\t\t&.truncated {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.pillbox-more {\n\t\t\t\tdisplay: inline;\n\t\t\t}\n\t\t}\n\n\t\t.pill {\n\t\t\tspan.glyphicon-close {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t.pillbox-add-item {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.pillbox-input-wrap {\n\t\t\tdisplay: none;\n\n\t\t\tbutton.dropdown-toggle {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.pills-editable {\n\t\t.pill-group {\n\t\t\t.pill {\n\t\t\t\tspan {\n\t\t\t\t\tcursor: text;\n\n\t\t\t\t\t&.glyphicon-close {\n\t\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t> .pill-group {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\n\t\t> .pill {\n\t\t\tmargin: 2px;\n\t\t\tcursor: default;\n\t\t\tfloat:left;\n\t\t\tword-break: break-all;\n\n\t\t\t&.pillbox-highlight {\n\t\t\t\toutline: 1px dotted @grayLight;\n\t\t\t}\n\n\t\t\t&.truncated {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t.pillbox-list-edit {\n\t\t\t\tborder: none;\n\t\t\t\tcolor: @grayDark;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tborder-radius: 2px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\toutline: none;\n\t\t\t\t\tborder: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.glyphicon-close {\n\t\t\t\tcursor: pointer;\n\t\t\t\ttop: -1px;\n\t\t\t\tleft: 2px;\n\n\t\t\t\t&:before {\n\t\t\t\t\tcontent: \" \\00d7\";\n\t\t\t\t}\n\n\t\t\t\t&:hover {\n\t\t\t\t\topacity: .4;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\n\t.pillbox-input-wrap {\n\t\tposition: relative;\n\t\tmargin: 4px 0 3px 3px;\n\t\tfloat: left;\n\n\t\t&.editing {\n\t\t\tborder: 1px solid #ccc;\n\t\t\tborder-radius: 4px;\n\t\t\tmargin: 2px 0 3px 3px;\n\n\t\t\tinput.pillbox-add-item {\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tcolor: #333;\n\t\t\t\theight: 32px;\n\t\t\t}\n\t\t}\n\t}\n\n\t.pillbox-add-item {\n\t\tborder: none;\n\t\tbox-shadow: none;\n\n\t\t&:focus {\n\t\t\toutline: none;\n\t\t\tborder: none;\n\t\t}\n\t}\n\n\t.pillbox-more {\n\t\tcursor: pointer;\n\t\tdisplay: none;\n\t\tline-height: 30px;\n\t}\n\n\t.suggest {\n\t\tmax-height: 166px; // arbitrary number\n\t\toverflow-y: auto;\n\n\t\t> li {\n\t\t\twhite-space: nowrap;\n\t\t\tcursor: pointer;\n\t\t\tpadding: 3px 20px;\n\n\t\t\t&.pillbox-suggest-sel {\n\t\t\t\tbackground-color: @grayLighter;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: @grayLighter;\n\t\t\t}\n\t\t}\n\t}\n}\n",".placard {\n\tdisplay: inline-block;\n\tposition: relative;\n\n\t&[data-ellipsis=\"true\"] {\n\t\t&.showing {\n\t\t\tinput.placard-field {\n\t\t\t\toverflow: visible;\n\t\t\t\ttext-overflow: clip;\n\t\t\t\twhite-space: normal;\n\t\t\t}\n\t\t}\n\n\t\tinput.placard-field {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\n\t\ttextarea.placard-field {\n\t\t\t&[readonly] {\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.showing {\n\t\t.placard-footer,\n\t\t.placard-header,\n\t\t.placard-popup {\n\t\t\tdisplay: block;\n\t\t\tz-index: 1;\n\t\t}\n\n\t\tinput.placard-field, textarea.placard-field {\n\t\t\tbackground: #fff;\n\t\t\tborder: 1px solid #CCCCCC;\n\t\t\tbox-shadow: none;\n\t\t\tposition: relative;\n\t\t\tz-index: 1;\n\t\t}\n\t}\n\n\tinput.placard-field, textarea.placard-field {\n\t\tresize: none;\n\n\t\t&[readonly] {\n\t\t\tbackground: #fff;\n\t\t\tcursor: auto;\n\n\t\t\t&.glass {\n\t\t\t\tbackground: none;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #d9edf7;\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&:focus {\n\t\t\tborder: 1px solid #CCCCCC;\n\t\t\tbox-shadow: none;\n\t\t}\n\t}\n\n\t&-cancel {\n\t\tfont-size: 12px;\n\t\tmargin-right: 4px;\n\t\tvertical-align: middle;\n\t}\n\n\t&-footer,\n\t&-header {\n\t\tdisplay: none;\n\t\tleft: 0;\n\t\tline-height: 1;\n\t\tposition: absolute;\n\t\tright: 0;\n\t}\n\n\t&-footer {\n\t\tpadding: 4px 0 8px 0;\n\t\ttext-align: right;\n\t\ttop: 100%;\n\t}\n\n\t&-header {\n\t\tbottom: 100%;\n\t\tpadding: 8px 0 4px 0;\n\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\n\t&-popup {\n\t\tbackground: #d9edf7;\n\t\tbackground-clip: padding-box;\n\t\tborder: 1px solid #ccc;\n\t\tborder-radius: 4px;\n\t\tbottom: -8px;\n\t\tbox-shadow: 0 0 0 1px #fff inset;\n\t\tdisplay: none;\n\t\tleft: -8px;\n\t\tposition: absolute;\n\t\tright: -8px;\n\t\ttop: -8px;\n\t}\n}\n",".radio {\n\t&.highlight {\n\t\tpadding: 4px;\n\n\t\t&.checked {\n\t\t\tbackground: #e9e9e9;\n\t\t\tborder-radius: @baseBorderRadius;\n\t\t}\n\t}\n\n\t/* for keyboard tabbing */\n\tinput[type=\"radio\"]:focus + .radio-label,\n\tinput[type=\"radio\"]:hover + .radio-label,\n\t.radio-label:hover {\n\t\tcolor: @grayLight;\n\t}\n\n}\n\n.radio-custom {\n\tposition: relative;\n\n\t&:after {\n\t\tbackground: transparent;\n\t\tborder-radius: 6px;\n\t\tcontent: \" \";\n\t\theight: 6px;\n\t\tleft: 4px;\n\t\tposition: absolute;\n\t\ttop: 7px;\n\t\twidth: 6px;\n\t}\n\n\t&:before\n\t{\n\t\tborder: 1px solid #adadad;\n\t\tborder-radius: 14px;\n\t\tcontent: \" \";\n\t\theight: 14px;\n\t\tleft: 0px;\n\t\tposition: absolute;\n\t\ttop: 3px;\n\t\twidth: 14px;\n\t}\n\n\t&.checked {\n\t\t&:after {\n\t\t\tbackground: #fff;\n\t\t}\n\n\t\t&:before {\n\t\t\tbackground: #39b3d7;\n\t\t\tborder-color: #39b3d7;\n\t\t}\n\t}\n\n\t&.disabled {\n\t\tcursor: not-allowed;\n\n\t\t&:after {\n\t\t\tcursor: not-allowed;\n\t\t}\n\t\t\n\t\t&:before {\n\t\t\tcursor: not-allowed;\n\t\t\topacity: .5;\n\t\t}\n\t}\n\n\t&.radio-inline {\n\t\t&:after {\n\t\t\tleft: 4px;\n\t\t\ttop: 7px;\n\t\t}\n\n\t\t&:before {\n\t\t\tleft: 0;\n\t\t\ttop: 3px;\n\t\t}\n\n\t\t&.highlight {\n\t\t\tpadding: 4px 4px 4px 24px;\n\n\t\t\t&:after {\n\t\t\t\tleft: 8px;\n\t\t\t\ttop: 11px;\n\t\t\t}\n\n\t\t\t&:before {\n\t\t\t\tleft: 4px;\n\t\t\t\ttop: 7px;\n\t\t\t}\n\n\t\t\t&.checked {\n\t\t\t\tbackground: #e9e9e9;\n\t\t\t\tborder-radius: @baseBorderRadius;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* for keyboard tabbing */\n\tinput[type=\"radio\"]:focus + .radio-label {\n\t\tcolor: @grayLight;\n\t}\n\n}\n",".repeater {\n\tborder: 1px solid #ddd;\n\tborder-radius: 4px;\n\n\t&-canvas {\n\t\t&.scrolling{\n\t\t\tbottom: 0;\n\t\t\tleft: 0;\n\t\t\toverflow-y: auto;\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\ttop: 0;\n\t\t}\n\t}\n\n\t&-header,\n\t&-footer\n\t{\n\t\tbackground: #f9f9f9;\n\t\tmin-height: 50px;\n\t\tpadding: 8px;\n\t\t.clearfix;\n\n\t\t&-left {\n\t\t\tfloat: left;\n\t\t}\n\n\t\t&-right {\n\t\t\tfloat: right;\n\t\t}\n\n\t\t@media (max-width: 625px) {\n\t\t\t&-left,\n\t\t\t&-right {\n\t\t\t\tfloat: none;\n\t\t\t\t.clearfix;\n\t\t\t}\n\n\t\t\t&-left {\n\t\t\t\tmargin-bottom: 8px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&-header {\n\t\tborder-bottom: 1px solid #ddd;\n\t\t.border-top-radius(4px);\n\t}\n\n\t&-footer {\n\t\tborder-top: 1px solid #ddd;\n\t\t.border-bottom-radius(4px);\n\t}\n\n\t&-loader {\n\t\tdisplay: none;\n\t\tleft: 50%;\n\t\tposition: absolute;\n\t\tmargin: -32px 0 0 -32px;\n\t\ttop: 50%;\n\t}\n\n\t&-viewport {\n\t\tmin-height: 80px;\n\t\tposition: relative;\n\t}\n\n\t&-pagination {\n\n\t\tlabel {\n\t\t\tfont-weight: normal;\n\t\t}\n\n\t\t.repeater-primaryPaging {\n\t\t\tdisplay: none;\n\t\t\tvertical-align: middle;\n\t\t\twidth: 116px;\n\n\t\t\t&.active {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\tul.dropdown-menu {\n\t\t\t\tmin-width: 116px;\n\t\t\t}\n\t\t}\n\n\t\t.repeater-secondaryPaging {\n\t\t\tdisplay: none;\n\t\t\twidth: 82px;\n\n\t\t\t&.active {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\t}\n\n\t&-search {\n\t\tfloat: left;\n\t\twidth: 200px;\n\t}\n\n\t&-title {\n\t\tdisplay: block;\n\t\tfloat: left;\n\t\tline-height: 34px;\n\t\tmargin-right: 10px;\n\t}\n}",".repeater[data-currentview=\"list\"] {\n\t.repeater-loader {\n\t\tmargin-top: -12px;\n\n\t\t&.noHeader {\n\t\t\tmargin-top: -32px;\n\t\t}\n\t}\n}\n\n.repeater-list {\n\t&-check {\n\t\tdisplay: inline-block;\n\t\theight: 0;\n\t\tline-height: 0;\n\t\tposition: relative;\n\t\tvertical-align: top;\n\t\twidth: 0;\n\n\t\tspan.glyphicon {\n\t\t\tleft: -22px;\n\t\t\tposition: absolute;\n\t\t\ttop: 2px;\n\t\t}\n\t}\n\n\t&-header,\n\t&-items {\n\t\tmargin-bottom: 0;\n\t\twidth: 100%;\n\n\t\ttd {\n\t\t\tborder-bottom: 1px solid #ddd;\n\t\t\tborder-left: 1px solid #ddd;\n\t\t\tborder-top: none;\n\n\t\t\t&:first-child {\n\t\t\t\tborder-left: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&-header {\n\t\tbackground: #F9F9F9;\n\n\t\ttd {\n\t\t\tfont-weight: bold;\n\n\t\t\t&.sortable {\n\t\t\t\t&:hover,\n\t\t\t\t&.sorted\n\t\t\t\t{\n\t\t\t\t\tbackground: #F1F1F1;\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t#gradient > .vertical(@startColor: #F9F9F9; @endColor: #E5E5E5);\n\t\t\t\t}\n\n\t\t\t\t&.sorted {\n\t\t\t\t\tspan.glyphicon {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tspan.glyphicon {\n\t\t\t\tdisplay: none;\n\t\t\t\tfloat: right;\n\t\t\t\tmargin-top: 2px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&-items {\n\t\ttr {\n\t\t\t&.empty {\n\t\t\t\ttd {\n\t\t\t\t\tborder-bottom: none;\n\t\t\t\t\tfont-style: italic;\n\t\t\t\t\tpadding: 20px;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.selectable{\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #d9edf7;\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.selected {\n\t\t\t\tbackground: #66AFE9;\n\t\t\t\tcolor: #fff;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #428bca;\n\t\t\t\t}\n\n\t\t\t\ttd:first-child {\n\t\t\t\t\tpadding-left: 30px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&-wrapper {\n\t\toverflow-y: auto;\n\t}\n}",".repeater-thumbnail {\n\tborder: 1px solid #ddd;\n\tcolor: #666;\n\tfloat: left;\n\tfont-size: 12px;\n\theight: 130px;\n\tline-height: 36px;\n\tmargin: 10px 12px;\n\ttext-align: center;\n\twidth: 100px;\n\n\t-webkit-box-shadow: 0 1px 4px 0 #ddd;\n\tbox-shadow: 0 1px 4px 0 #ddd;\n\n\timg {\n\t\tdisplay: block;\n\t\tmargin-top: 12px;\n\t}\n\n\t&-cont {\n\t\theight: 100%;\n\t\toverflow-y: auto;\n\t\tpadding: 10px;\n\t\twidth: 100%;\n\n\t\tdiv.empty {\n\t\t\tfont-style: italic;\n\t\t\tpadding: 20px 10px;\n\t\t\ttext-align: center;\n\t\t}\n\t}\n}",".spinbox {\n\tdisplay: inline-block;\n\tposition: relative;\n\n\t&.digits-3 {\n\t\twidth: 60px;\n\t}\n\n\t&.disabled {\n\t\t.spinbox-buttons {\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t.spinbox-input {\n\t\tfloat: left;\n\t\tpadding-bottom: 3px; /* Magic number */\n\t\tpadding: 0px 25px 0px 7px;\n\t}\n\n\t.btn {\n\t\tposition: relative;\n\t\twidth: 20px;\n\t\theight: 13px;\n\t\tpadding-top: 0;\n\t\tpadding-right: 9px;\n\t\tpadding-left: 9px;\n\n\t\t&.disabled {\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t.spinbox-buttons {\n\t\tposition: absolute;\n\t\theight: 28px;\n\t\twidth: 20px;\n\t\tright: 2px;\n\t}\n\n\t.spinbox-up {\n\t\tpadding: 0 0 14px 1px;\n\t\ttop: 2px;\n\n\t\t.glyphicon-chevron-up {\n\t\t\tposition:relative;\n\t\t\ttop: 0px;\n\t\t}\n\t}\n\n\t// fix radius from BS btn-group\n\t.btn-group > .btn.spinbox-up {\n\t\tborder-top-right-radius: 4px;\n\t}\n\n\t.spinbox-down {\n\t\tpadding: 0 0 8px 1px;\n\t\ttop: 2px;\n\t\theight: 15px;\n\t\tborder-bottom-left-radius: 4px;\n\n\t\t.glyphicon-chevron-down {\n\t\t\tposition: relative;\n\t\t\tleft: -1px;\n\t\t\ttop: 0px;\n\t\t}\n\t}\n}",".scheduler {\n\n\t.control-label {\n\t\tmin-width: 7em;\n\t}\n\n\t.inline-form-text {\n\t\tfloat: left;\n\t\tline-height: 27px;\n\t\tmargin-top:4px;\n\t}\n\n\t/* -------------------------------\n\tSTART DATE/TIME\n------------------------------- */\n\n\t.start-datetime {\n\n\t\t&.form-group {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t.form-group {\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.combobox {\n\t\t\tmax-width: 9em;\n\n\t\t\t.dropdown-menu {\n\t\t\t\tmax-height: 200px;\n\t\t\t\toverflow: auto;\n\t\t\t}\n\n\t\t}\n\n\t\t.dropdown {\n\t\t\tfloat: left;\n\t\t\tmargin: 0 10px 0 0;\n\t\t}\n\n\t}\n\n\t/* -------------------------------\n\tTIMEZONE\n------------------------------- */\n\n\t.timezone-container {\n\t\t.input-group {\n\t\t\tmax-width: 20em;\n\t\t}\n\n\t\t.dropdown-label {\n\t\t\theight: 18px;\n\t\t\twhite-space: nowrap;\n\t\t\tmax-width: 20em;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\n\t\t.dropdown-menu {\n\t\t\tmax-height: 200px;\n\t\t\toverflow: auto;\n\t\t}\n\n\t}\n\n/* -------------------------------\n\tREPEAT PANELS\n------------------------------- */\n\n\t.repeat-panel {\n\t\tmargin-left: 0;\n\n\t\tlabel {\n\t\t\tfont-weight: normal;\n\t\t}\n\t\t\n\t\t.radio {\n\t\t\tmargin-right: 10px;\n\t\t}\n\n\t\t.form-group {\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t}\n\n// EVERY\n\n\t.repeat-interval {\n\t\tmargin-left: 0;\n\n\t\t.clearfix;\n\n\t\t.form-group {\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.dropdown-menu {\n\t\t\tmax-height: 200px;\n\t\t\toverflow: auto;\n\t\t}\n\n\t\t.repeat-every-panel {\n\t\t\tfloat: left;\n\n\t\t\t.repeat-every-pretext {\n\t\t\t\tpadding: 0 10px;\n\t\t\t}\n\n\t\t\t.spinbox {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-right: 10px;\n\n\t\t\t\tinput {\n\t\t\t\t\tmargin-bottom: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// MONTHLY\n\n\t\t.repeat-monthly {\n\n\t\t\t.repeat-monthly-date {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\t.clearfix;\n\n\t\t\t\t.selectlist {\n\t\t\t\t\tmargin-left: 5px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.repeat-monthly-day {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\t.clearfix;\n\t\t\t}\n\n\t\t\t.month-days {\n\t\t\t\tmargin-left: 10px;\n\t\t\t}\n\n\t\t}\n\n// YEARLY\n\n\t\t.repeat-yearly {\n\n\t\t\t.repeat-yearly-date {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\t.clearfix;\n\n\t\t\t\t.year-month-day {\n\t\t\t\t\tmargin-left: 10px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.year-month-days {\n\t\t\t\tmargin-left: 10px;\n\t\t\t}\n\n\t\t\t.year-month {\n\t\t\t\tmargin-left: 10px;\n\n\t\t\t}\n\n\t\t\t.repeat-yearly-day {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\t.clearfix;\n\n\t\t\t\t.repeat-yearly-day-text {\n\t\t\t\t\tmargin-left: 10px;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n// WEEKLY\n\n\t\t.repeat-weekly {\n\n\t\t\tbutton:not(.active) {\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\n\t\t\t.btn-group {\n\t\t\t\t&.disabled {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\topacity: 0.65;\n\n\t\t\t\t\t&:before {\n\t\t\t\t\t\tbackground: transparent;\n\t\t\t\t\t\tbottom: 0;\n\t\t\t\t\t\tcontent: \"\";\n\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tright: 0;\n\t\t\t\t\t\ttop: 0;\n\t\t\t\t\t\tz-index: 5;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.selectlist {\n\t\t\tfloat: left;\n\t\t}\n\n\t\tlabel.radio {\n\t\t\tfloat: left;\n\t\t\tline-height: 27px;\n\n\t\t\tinput {\n\t\t\t\tmargin-top: 8px;\n\t\t\t}\n\t\t}\n\n/* -------------------------------\nEND\n------------------------------- */\n\n\t.repeat-end {\n\n\t\t.end-after {\n\t\t\tfloat: left;\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-right: 10px;\n\t\t}\n\t\t\n\t\t.form-group {\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.end-option-panel {\n\n\t\t}\n\n\t}\n\n\n}",".search {\n\t&.disabled {\n\t\t.input-group-btn {\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n}",".selectlist {\n\n\t&.disabled {\n\t\tcursor: not-allowed;\n\t}\n\n\t&-sizer {\n\t\tdisplay: inline-block;\n\t\tposition: absolute;\n\t\tvisibility: hidden;\n\t\ttop: 0;\n\t}\n\n\t.selected-label {\n\t\toverflow: hidden;\t// helps with text flow on small screens\n\t\tmin-width: 2em;\n\t}\n\n\t.btn.dropdown-toggle {\n\t\twhite-space: normal;\n\n\t\t.selected-label {\n\t\t\tpadding-right: 10px;\n\t\t\ttext-align: left;\n\t\t}\n\t}\n}",".tree {\n\tborder: 1px solid @grayLight;\n\tborder-radius: 4px 4px 4px 4px;\n\tpadding: 10px 15px 0 15px;\n\toverflow-x: auto;\n\toverflow-y: auto;\n\tposition: relative;\n\tlist-style: none;\n\n\t*:focus {\n\t\toutline: none;\n\t}\n\n\tbutton:focus {\n\t\tcolor: @treeHoverText;\n\t}\n\n\tul {\n\t\tpadding-left: 0;\n\t\tmargin-top: 0;\n\t\tmargin-bottom: 0;\n\t\tlist-style: none;\n\t}\n\n\tli {\n\t\tmargin: 0;\n\t\tmargin-top: 5px;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.tree-loader {\n\t\t// make even with tree-branch-children\n\t\tmargin-left: 45px;\n\t}\n\n\t.tree-open > .tree-branch-header .glyphicon-play {\n\t\ttransform:rotate(90deg);\n\t\t-ms-transform:rotate(90deg);\n\t\t-webkit-transform:rotate(90deg);\n\t\tposition: relative;\n\t\tleft: -5px;\n\t}\n\n\t[data-children=false] > .tree-branch-header .icon-caret:before {\n\t\tcontent: '\\00a0'; //space\n\t}\n\n\t.tree-branch {\n\n\t\t.tree-branch-header {\n\t\t\tposition: relative;\n\t\t\tborder-radius: 6px;\n\n\t\t\t.tree-branch-name:hover {\n\t\t\t\tcolor: @treeHoverText;\n\t\t\t}\n\n\t\t\t.glyphicon-play {\n\t\t\t\tfont-size: 10px;\n\t\t\t\tpadding-right: 5px;\n\n\t\t\t\t&:before {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\ttop: -2px;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t.tree-branch-name {\n\t\t\t\twhite-space: nowrap;\n\t\t\t\tborder-radius: 6px;\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tborder: 0;\n\t\t\t}\n\n\t\t\tlabel {\n\t\t\t\tfont-weight: normal;\n\t\t\t\tpadding-left: 3px;\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t}\n\n\t\t.tree-branch-children {\n\t\t\tmargin-left: 14px;\n\t\t}\n\n\t}\n\n\t.tree-item {\n\t\tposition: relative;\n\t\tcursor: pointer;\n\t\tborder-radius: 6px;\n\t\tmargin-left: 26px;\n\n\t\t.tree-item-name {\n\t\t\twhite-space: nowrap;\n\t\t\tborder-radius: 6px;\n\t\t\tbackground-color: transparent;\n\t\t\tborder: 0;\n\t\t}\n\n\t\t.tree-item-name:hover {\n\t\t\tcolor: @treeHoverText;\n\t\t}\n\n\t\t&.tree-selected .tree-item-name {\n\t\t\tbackground-color: @treeSelectBackground;\n\t\t\tcolor: #fff;\n\t\t}\n\n\t\tlabel {\n\t\t\tfont-weight: normal;\n\t\t\tpadding-left: 7px;\n\t\t\tmargin-bottom: 0;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t}\n\n\t.icon-caret:hover + .tree-branch-name {\n\t\tcolor: @treeHoverText;\n\t}\n\n\t// folder selectable\n\t&.tree-folder-select {\n\n\t\t.tree-branch {\n\n\t\t\t.icon-caret {\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tborder: 0;\n\t\t\t}\n\n\t\t\t.icon-caret:hover {\n\t\t\t\tcursor: pointer;\n\t\t\t\tcolor: @treeHoverText;\n\t\t\t}\n\n\t\t\t> .tree-branch-name {\n\t\t\t\tpadding: 1px 5px 0 5px;\n\t\t\t\tborder-radius: 6px;\n\n\n\t\t\t\t&.tree-selected {\n\t\t\t\t\tbackground-color: @treeSelectBackground;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t.tree-branch.tree-selected > .tree-branch-header .tree-branch-name {\n\t\t\tbackground-color: @treeSelectBackground;\n\t\t\tcolor: #fff;\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: @treeSelectBackground;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t}\n\n\t}\n\n}",".wizard {\n\n\t.clearfix;\n\n\tborder: 1px solid @navbarBorder;\n\tborder-radius: @baseBorderRadius;\n\tbox-shadow: 0 1px 4px rgba(0,0,0,.065);\n\tbackground-color: @tableBackgroundAccent;\n\tposition: relative;\n\tmin-height: 48px;\n\toverflow: hidden;\n\n\t> .steps {\n\t\tlist-style: none outside none;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\twidth: 4000px;\n\n\t\t&.previous-disabled {\n\t\t\tli {\n\t\t\t\t&.complete {\n\t\t\t\t\tcursor: default;\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\tbackground: #f3f4f5;\n\t\t\t\t\t\tcolor: @successText;\n\t\t\t\t\t\tcursor: default;\n\n\t\t\t\t\t\t.chevron:before {\n\t\t\t\t\t\t\tborder-left-color: #f3f4f5;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tli {\n\t\t\tfloat: left;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0 20px 0 30px;\n\t\t\theight: 46px;\n\t\t\tline-height: 46px;\n\t\t\tposition: relative;\n\t\t\tbackground: #ededed;\n\t\t\tcolor: @grayLight;\n\t\t\tfont-size: 16px;\n\t\t\tcursor: not-allowed;\n\n\t\t\t.chevron {\n\t\t\t\tborder: 24px solid transparent;\n\t\t\t\tborder-left: 14px solid @navbarBorder;\n\t\t\t\tborder-right: 0;\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tright: -14px;\n\t\t\t\ttop: 0;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\n\t\t\t.chevron:before {\n\t\t\t\tborder: 24px solid transparent;\n\t\t\t\tborder-left: 14px solid #ededed;\n\t\t\t\tborder-right: 0;\n\t\t\t\tcontent: \"\";\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tright: 1px;\n\t\t\t\ttop: -24px;\n\t\t\t}\n\n\t\t\t&.complete {\n\t\t\t\tbackground: #f3f4f5;\n\t\t\t\tcolor: @successText;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #e7eff8;\n\t\t\t\t\tcursor: pointer;\n\n\t\t\t\t\t.chevron:before {\n\t\t\t\t\t\tborder-left: 14px solid #e7eff8;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.chevron:before {\n\t\t\t\t\tborder-left: 14px solid #f3f4f5;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&.active {\n\t\t\t\tbackground: #f1f6fc;\n\t\t\t\tcolor: @infoText;\n\t\t\t\tcursor: default;\n\n\t\t\t\t.chevron:before {\n\t\t\t\t\tborder-left: 14px solid #f1f6fc;\n\t\t\t\t}\n\n\t\t\t\t.badge {\n\t\t\t\t\tbackground-color: @infoText;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.badge {\n\t\t\t\tmargin-right: 8px;\n\t\t\t}\n\n\t\t\t.badge-success {\n\t\t\t\tbackground-color: @successText;\n\t\t\t}\n\t\t}\n\n\t\tli:first-child {\n\t\t\tborder-radius: 4px 0 0 4px;\n\t\t\tpadding-left: 20px;\n\t\t}\n\t}\n\n\t> .actions {\n\t\tz-index: 1000;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\tline-height: 46px;\n\t\tfloat: right;\n\t\tpadding-left: 15px;\n\t\tpadding-right: 15px;\n\t\tvertical-align: middle;\n\t\tbackground-color: #e5e5e5;\n\t\tborder-left: 1px solid @navbarBorder;\n\n\t\ta {\n\t\t\tline-height: 45px;\n\t\t\tfont-size: 12px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t\t.btn-prev {\n\t\t\t&[disabled] {\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\tspan {\n\t\t\t\tmargin-right: 5px;\n\t\t\t}\n\t\t}\n\n\t\t.btn-next {\n\t\t\t&[disabled] {\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\tspan {\n\t\t\t\tmargin-left: 5px;\n\t\t\t}\n\t\t}\n\t}\n\n\t.step-content {\n\t\tborder-top: 1px solid #D4D4D4;\n\t\tpadding: 10px;\n\t\tfloat: left;\n\t\twidth: 100%;\n\n\t\t.step-pane {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t> .active {\n\t\t\tdisplay: block;\n\n\t\t\t.btn-group {\n\t\t\t\t.active {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// when complete\n\t&.complete {\n\t\t> .actions .glyphicon-arrow-right:before {\n\t\t\tdisplay: none;\n\t\t}\n\t\t> .actions .glyphicon-arrow-right {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n}"]}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.min.css b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.min.css
deleted file mode 100644
index 758a7b824caed8f5487e2d10f51b5bebac32d7fa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/css/fuelux.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Fuel UX v3.0.2 
- * Copyright 2012-2014 ExactTarget
- * Licensed under the BSD-3-Clause license ()
- */
-
-@charset "UTF-8";.fuelux .clearfix{*zoom:1}.fuelux .clearfix:before,.fuelux .clearfix:after{display:table;content:"";line-height:0}.fuelux .clearfix:after{clear:both}@font-face{font-family:fuelux;src:url(../fonts/fuelux.eot);src:url(../fonts/fuelux.eot?#iefix) format("embedded-opentype"),url(../fonts/fuelux.woff) format("woff"),url(../fonts/fuelux.ttf) format("truetype"),url(../fonts/fuelux.svg#fuelux) format("svg");font-weight:400;font-style:normal}.fuelux [class^=fueluxicon-]:before,.fuelux [class*=" fueluxicon-"]:before{font-family:fuelux!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;line-height:1;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fuelux .fueluxicon-loader-full:before{content:"\e000"}.fuelux .fueluxicon-loader-1:before{content:"\e001"}.fuelux .fueluxicon-loader-2:before{content:"\e002"}.fuelux .fueluxicon-loader-3:before{content:"\e003"}.fuelux .fueluxicon-loader-4:before{content:"\e004"}.fuelux .fueluxicon-loader-5:before{content:"\e005"}.fuelux .fueluxicon-loader-6:before{content:"\e006"}.fuelux .fueluxicon-loader-7:before{content:"\e007"}.fuelux .fueluxicon-loader-8:before{content:"\e008"}.fuelux .fueluxicon-bullet:before{content:"\e009"}.fuelux .checkbox.highlight{padding:4px}.fuelux .checkbox.highlight.checked{background:#e9e9e9;border-radius:4px}.fuelux .checkbox input[type=checkbox]:focus+.checkbox-label,.fuelux .checkbox input[type=checkbox]:hover+.checkbox-label,.fuelux .checkbox .checkbox-label:hover{color:#999}.fuelux .checkbox-custom{position:relative}.fuelux .checkbox-custom:before{font-family:"Glyphicons Halflings"!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;line-height:1;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;border:1px solid #adadad;border-radius:4px;color:#fff;content:" ";font-size:9px;height:14px;left:0;padding:1px 0 0 1px;position:absolute;top:3px;width:14px}.fuelux .checkbox-custom.checked:before{background:#39b3d7;border-color:#39b3d7;content:"\e013"}.fuelux .checkbox-custom.disabled{cursor:not-allowed}.fuelux .checkbox-custom.disabled:before{cursor:not-allowed;opacity:.5}.fuelux .checkbox-custom.checkbox-inline:before{left:0;top:3px}.fuelux .checkbox-custom.checkbox-inline.highlight{padding:4px 4px 4px 24px}.fuelux .checkbox-custom.checkbox-inline.highlight:before{left:4px;top:7px}.fuelux .checkbox-custom.checkbox-inline.highlight.checked{background:#e9e9e9;border-radius:4px}.fuelux .checkbox-custom input[type=checkbox]:focus+.checkbox-label{color:#999}.fuelux .combobox.disabled .input-group-btn{cursor:not-allowed}.fuelux .datepicker-calendar{padding:16px 16px 0;min-height:262px}.fuelux .datepicker-calendar button{border:0;padding:0;background-color:transparent}.fuelux .datepicker-calendar-days{height:182px;margin:10px 0 12px;width:100%}.fuelux .datepicker-calendar-days thead{border-bottom:1px solid #cccaca}.fuelux .datepicker-calendar-days tbody:before{line-height:3px;content:"\200C";display:block}.fuelux .datepicker-calendar-days td,.fuelux .datepicker-calendar-days th{font-size:14px;height:32px;text-align:center;vertical-align:middle;width:14.29%}.fuelux .datepicker-calendar-days td button{color:#231f20;display:inline-block;height:30px;text-decoration:none;width:30px}.fuelux .datepicker-calendar-days td span{display:block}.fuelux .datepicker-calendar-days td span:hover{background:#b7e3f8;text-decoration:none}.fuelux .datepicker-calendar-days td.current-day button{border:1px solid #1d75bb}.fuelux .datepicker-calendar-days td.last-month,.fuelux .datepicker-calendar-days td.next-month{background:#e3e2e1}.fuelux .datepicker-calendar-days td.past button{color:#8d8787}.fuelux .datepicker-calendar-days td.restricted button{cursor:no-drop;position:relative}.fuelux .datepicker-calendar-days td.restricted button:before{border-top:1px solid #a94442;bottom:0;content:" ";display:block;left:5px;position:absolute;right:5px;top:50%}.fuelux .datepicker-calendar-days td.restricted button:hover{background:0 0}.fuelux .datepicker-calendar-days td.selected span{background:#1d75bb}.fuelux .datepicker-calendar-days td.selected span:hover{background:#0f5f9f}.fuelux .datepicker-calendar-days td.selected button{color:#fff}.fuelux .datepicker-calendar-days td.selected.current-day{box-shadow:0 0 0 1px #fff offset}.fuelux .datepicker-calendar-days th{font-weight:700;height:22px;vertical-align:top}.fuelux .datepicker-calendar-header{*zoom:1}.fuelux .datepicker-calendar-header:before,.fuelux .datepicker-calendar-header:after{display:table;content:"";line-height:0}.fuelux .datepicker-calendar-header:after{clear:both}.fuelux .datepicker-calendar-header button{border:0;padding:0;background-color:transparent}.fuelux .datepicker-calendar-header .title{margin:0 auto;text-align:center;display:block;width:174px;color:#4d4d4f;font-size:20px;line-height:30px;text-decoration:underline;vertical-align:middle}.fuelux .datepicker-calendar-header .title:hover{color:#1d75bb;text-decoration:underline}.fuelux .datepicker-calendar-header .title.disabled{cursor:default;pointer-events:none;text-decoration:none}.fuelux .datepicker-calendar-header .title .month{display:inline;margin:0;padding:0}.fuelux .datepicker-calendar-header .title .month span{display:none}.fuelux .datepicker-calendar-header .title .month span.current{display:inline}.fuelux .datepicker-calendar-header .next,.fuelux .datepicker-calendar-header .prev{background:#666669;background-clip:padding-box;border-radius:30px;cursor:pointer;float:left;height:30px;text-align:center;width:30px}.fuelux .datepicker-calendar-header .next span.glyphicon,.fuelux .datepicker-calendar-header .prev span.glyphicon{color:#fff;font-size:16px;line-height:30px}.fuelux .datepicker-calendar-header .next:hover,.fuelux .datepicker-calendar-header .prev:hover{background:#1d75bb}.fuelux .datepicker-calendar-header .next{float:right}.fuelux .datepicker-calendar-header .next span.glyphicon{line-height:28px}.fuelux .datepicker-calendar-footer{background:#e3e2e1;background-clip:padding-box;border-radius:0 0 4px 4px;border-top:1px solid #cccaca;height:30px;margin:0 -16px;padding:4px 14px}.fuelux .datepicker-calendar-footer .datepicker-today{color:#231f20;font-size:14px;text-decoration:underline}.fuelux .datepicker-calendar-footer .datepicker-today:hover{color:#1b75bb;text-decoration:underline}.fuelux .datepicker-calendar-footer .datepicker-today.disabled{color:#8b8c8e;cursor:default;pointer-events:none}.fuelux .datepicker-calendar-footer .datepicker-today.disabled:hover{color:#8b8c8e}.fuelux .datepicker-calendar-wrapper{border:1px solid #6e6f71;min-height:20px;padding:0;width:300px}.fuelux .datepicker-wheels{display:none}.fuelux .datepicker-wheels ul button{border:0;padding:0;background-color:transparent}.fuelux .datepicker-wheels-footer{background:#e3e2e1;border-radius:0 0 4px 4px;border-top:1px solid #cccaca;clear:both}.fuelux .datepicker-wheels-footer .datepicker-wheels-back{display:block;color:#4d4d4f;float:left;line-height:22px;border:0;background-color:transparent}.fuelux .datepicker-wheels-footer .datepicker-wheels-back:hover{color:#1d75bb}.fuelux .datepicker-wheels-footer .datepicker-wheels-select{float:right;background-color:transparent;color:#049cdb}.fuelux .datepicker-wheels-footer .datepicker-wheels-select:hover{color:#1d75bb}.fuelux .datepicker-wheels-month,.fuelux .datepicker-wheels-year{float:left;width:50%}.fuelux .datepicker-wheels-month ul,.fuelux .datepicker-wheels-year ul{height:217px;list-style-type:none;margin:0;overflow:auto;padding:0;text-align:center}.fuelux .datepicker-wheels-month ul li,.fuelux .datepicker-wheels-year ul li{margin:4px 0}.fuelux .datepicker-wheels-month ul li button,.fuelux .datepicker-wheels-year ul li button{width:100%;text-align:center;color:#414041;display:block;font-size:16px;line-height:24px;text-decoration:none}.fuelux .datepicker-wheels-month ul li button:hover,.fuelux .datepicker-wheels-year ul li button:hover{background:#aee0f8;text-decoration:none}.fuelux .datepicker-wheels-month ul li.selected button,.fuelux .datepicker-wheels-year ul li.selected button{background:#1d75bb;color:#fff}.fuelux .datepicker-wheels-month ul li.selected button:hover,.fuelux .datepicker-wheels-year ul li.selected button:hover{background:#0f5f9f}.fuelux .datepicker-wheels-month .header,.fuelux .datepicker-wheels-year .header{background:#e3e2e1;background-clip:padding-box;border-bottom:1px solid #cccaca;border-radius:4px 0 0;color:#4d4d4f;font-size:20px;font-weight:700;line-height:30px;margin-top:0;margin-bottom:0;text-align:center}.fuelux .datepicker-wheels-month.full,.fuelux .datepicker-wheels-year.full{border-left:0;width:100%}.fuelux .datepicker-wheels-month.full .header,.fuelux .datepicker-wheels-year.full .header{border-radius:4px 4px 0 0}.fuelux .datepicker-wheels-year{border-left:1px solid #cccaca;float:right}.fuelux .datepicker-wheels-year .header{border-radius:0 4px 0 0}.fuelux .infinitescroll{overflow-y:auto}.fuelux .infinitescroll .infinitescroll-end{clear:both;font-style:italic;padding:6px;text-align:center}.fuelux .infinitescroll .infinitescroll-load{clear:both;padding:6px}.fuelux .infinitescroll .infinitescroll-load button{padding:5px 12px;width:100%}.fuelux .infinitescroll .infinitescroll-load .loader{font-size:32px;height:32px;margin:0 auto;width:32px}.fuelux .dropUp{-webkit-box-shadow:0 0 10px rgba(0,0,0,.2);-moz-box-shadow:0 0 10px rgba(0,0,0,.2);box-shadow:0 0 10px rgba(0,0,0,.2)}.fuelux .loader{height:64px;font-size:64px;position:relative;width:64px}.fuelux .loader:after,.fuelux .loader:before{font-family:fuelux!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;line-height:1;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;bottom:0;display:block;left:0;position:absolute;right:0;top:0}.fuelux .loader:before{content:'\e000';opacity:.33}.fuelux .loader.iefix:before{color:#bcbcbc;opacity:1}.fuelux .loader[data-frame="1"]:after{content:'\e001'}.fuelux .loader[data-frame="2"]:after{content:'\e002'}.fuelux .loader[data-frame="3"]:after{content:'\e003'}.fuelux .loader[data-frame="4"]:after{content:'\e004'}.fuelux .loader[data-frame="5"]:after{content:'\e005'}.fuelux .loader[data-frame="6"]:after{content:'\e006'}.fuelux .loader[data-frame="7"]:after{content:'\e007'}.fuelux .loader[data-frame="8"]:after{content:'\e008'}.fuelux input.glass,.fuelux textarea.glass{background:0 0;border:1px solid #fff;box-shadow:none}.fuelux input.glass:hover,.fuelux textarea.glass:hover{background:#d9edf7;border-color:#66afe9;cursor:pointer}.fuelux input.glass:hover[disabled],.fuelux textarea.glass:hover[disabled]{background:0 0;border-color:#fff;cursor:not-allowed}.fuelux input.glass:focus,.fuelux textarea.glass:focus{background:#fff;border-color:#66afe9;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);cursor:auto}.fuelux input.glass:focus[disabled],.fuelux textarea.glass:focus[disabled]{background:0 0;border-color:#fff;cursor:not-allowed}.fuelux input.glass[disabled],.fuelux textarea.glass[disabled]{cursor:not-allowed}.fuelux [data-toggle=buttons]>.btn>input[type=radio],.fuelux [data-toggle=buttons]>.btn>input[type=checkbox]{display:inline;position:absolute;left:-9999px}.fuelux .pillbox{border:1px solid #BBB;border-radius:4px;cursor:text;padding:3px}.fuelux .pillbox[data-readonly]{border:1px solid transparent}.fuelux .pillbox[data-readonly].truncate .pillbox-input-wrap{display:inline-block}.fuelux .pillbox[data-readonly].truncate .pillbox-input-wrap.truncated{display:none}.fuelux .pillbox[data-readonly].truncate .pillbox-more{display:inline}.fuelux .pillbox[data-readonly] .pill span.glyphicon-close{display:none}.fuelux .pillbox[data-readonly] .pillbox-add-item{display:none}.fuelux .pillbox[data-readonly] .pillbox-input-wrap{display:none}.fuelux .pillbox[data-readonly] .pillbox-input-wrap button.dropdown-toggle{display:none}.fuelux .pillbox.pills-editable .pill-group .pill span{cursor:text}.fuelux .pillbox.pills-editable .pill-group .pill span.glyphicon-close{cursor:pointer}.fuelux .pillbox>.pill-group{margin:0;padding:0;width:100%}.fuelux .pillbox>.pill-group>.pill{margin:2px;cursor:default;float:left;word-break:break-all}.fuelux .pillbox>.pill-group>.pill.pillbox-highlight{outline:1px dotted #999}.fuelux .pillbox>.pill-group>.pill.truncated{display:none}.fuelux .pillbox>.pill-group>.pill .pillbox-list-edit{border:0;color:#333;font-weight:400;border-radius:2px}.fuelux .pillbox>.pill-group>.pill .pillbox-list-edit:focus{outline:0;border:0}.fuelux .pillbox>.pill-group>.pill .glyphicon-close{cursor:pointer;top:-1px;left:2px}.fuelux .pillbox>.pill-group>.pill .glyphicon-close:before{content:" \00d7"}.fuelux .pillbox>.pill-group>.pill .glyphicon-close:hover{opacity:.4}.fuelux .pillbox .pillbox-input-wrap{position:relative;margin:4px 0 3px 3px;float:left}.fuelux .pillbox .pillbox-input-wrap.editing{border:1px solid #ccc;border-radius:4px;margin:2px 0 3px 3px}.fuelux .pillbox .pillbox-input-wrap.editing input.pillbox-add-item{border-radius:4px;color:#333;height:32px}.fuelux .pillbox .pillbox-add-item{border:0;box-shadow:none}.fuelux .pillbox .pillbox-add-item:focus{outline:0;border:0}.fuelux .pillbox .pillbox-more{cursor:pointer;display:none;line-height:30px}.fuelux .pillbox .suggest{max-height:166px;overflow-y:auto}.fuelux .pillbox .suggest>li{white-space:nowrap;cursor:pointer;padding:3px 20px}.fuelux .pillbox .suggest>li.pillbox-suggest-sel{background-color:#eee}.fuelux .pillbox .suggest>li:hover{background-color:#eee}.fuelux .placard{display:inline-block;position:relative}.fuelux .placard[data-ellipsis=true].showing input.placard-field{overflow:visible;text-overflow:clip;white-space:normal}.fuelux .placard[data-ellipsis=true] input.placard-field{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fuelux .placard[data-ellipsis=true] textarea.placard-field[readonly]{overflow:hidden}.fuelux .placard.showing .placard-footer,.fuelux .placard.showing .placard-header,.fuelux .placard.showing .placard-popup{display:block;z-index:1}.fuelux .placard.showing input.placard-field,.fuelux .placard.showing textarea.placard-field{background:#fff;border:1px solid #CCC;box-shadow:none;position:relative;z-index:1}.fuelux .placard input.placard-field,.fuelux .placard textarea.placard-field{resize:none}.fuelux .placard input.placard-field[readonly],.fuelux .placard textarea.placard-field[readonly]{background:#fff;cursor:auto}.fuelux .placard input.placard-field[readonly].glass,.fuelux .placard textarea.placard-field[readonly].glass{background:0 0}.fuelux .placard input.placard-field[readonly].glass:hover,.fuelux .placard textarea.placard-field[readonly].glass:hover{background:#d9edf7;cursor:pointer}.fuelux .placard input.placard-field:focus,.fuelux .placard textarea.placard-field:focus{border:1px solid #CCC;box-shadow:none}.fuelux .placard-cancel{font-size:12px;margin-right:4px;vertical-align:middle}.fuelux .placard-footer,.fuelux .placard-header{display:none;left:0;line-height:1;position:absolute;right:0}.fuelux .placard-footer{padding:4px 0 8px;text-align:right;top:100%}.fuelux .placard-header{bottom:100%;padding:8px 0 4px}.fuelux .placard-header h1,.fuelux .placard-header h2,.fuelux .placard-header h3,.fuelux .placard-header h4,.fuelux .placard-header h5,.fuelux .placard-header h6{margin:0}.fuelux .placard-popup{background:#d9edf7;background-clip:padding-box;border:1px solid #ccc;border-radius:4px;bottom:-8px;box-shadow:0 0 0 1px #fff inset;display:none;left:-8px;position:absolute;right:-8px;top:-8px}.fuelux .radio.highlight{padding:4px}.fuelux .radio.highlight.checked{background:#e9e9e9;border-radius:4px}.fuelux .radio input[type=radio]:focus+.radio-label,.fuelux .radio input[type=radio]:hover+.radio-label,.fuelux .radio .radio-label:hover{color:#999}.fuelux .radio-custom{position:relative}.fuelux .radio-custom:after{background:0 0;border-radius:6px;content:" ";height:6px;left:4px;position:absolute;top:7px;width:6px}.fuelux .radio-custom:before{border:1px solid #adadad;border-radius:14px;content:" ";height:14px;left:0;position:absolute;top:3px;width:14px}.fuelux .radio-custom.checked:after{background:#fff}.fuelux .radio-custom.checked:before{background:#39b3d7;border-color:#39b3d7}.fuelux .radio-custom.disabled{cursor:not-allowed}.fuelux .radio-custom.disabled:after{cursor:not-allowed}.fuelux .radio-custom.disabled:before{cursor:not-allowed;opacity:.5}.fuelux .radio-custom.radio-inline:after{left:4px;top:7px}.fuelux .radio-custom.radio-inline:before{left:0;top:3px}.fuelux .radio-custom.radio-inline.highlight{padding:4px 4px 4px 24px}.fuelux .radio-custom.radio-inline.highlight:after{left:8px;top:11px}.fuelux .radio-custom.radio-inline.highlight:before{left:4px;top:7px}.fuelux .radio-custom.radio-inline.highlight.checked{background:#e9e9e9;border-radius:4px}.fuelux .radio-custom input[type=radio]:focus+.radio-label{color:#999}.fuelux .repeater{border:1px solid #ddd;border-radius:4px}.fuelux .repeater-canvas.scrolling{bottom:0;left:0;overflow-y:auto;position:absolute;right:0;top:0}.fuelux .repeater-header,.fuelux .repeater-footer{background:#f9f9f9;min-height:50px;padding:8px;*zoom:1}.fuelux .repeater-header:before,.fuelux .repeater-footer:before,.fuelux .repeater-header:after,.fuelux .repeater-footer:after{display:table;content:"";line-height:0}.fuelux .repeater-header:after,.fuelux .repeater-footer:after{clear:both}.fuelux .repeater-header-left,.fuelux .repeater-footer-left{float:left}.fuelux .repeater-header-right,.fuelux .repeater-footer-right{float:right}@media (max-width:625px){.fuelux .repeater-header-left,.fuelux .repeater-footer-left,.fuelux .repeater-header-right,.fuelux .repeater-footer-right{float:none;*zoom:1}.fuelux .repeater-header-left:before,.fuelux .repeater-footer-left:before,.fuelux .repeater-header-right:before,.fuelux .repeater-footer-right:before,.fuelux .repeater-header-left:after,.fuelux .repeater-footer-left:after,.fuelux .repeater-header-right:after,.fuelux .repeater-footer-right:after{display:table;content:"";line-height:0}.fuelux .repeater-header-left:after,.fuelux .repeater-footer-left:after,.fuelux .repeater-header-right:after,.fuelux .repeater-footer-right:after{clear:both}.fuelux .repeater-header-left,.fuelux .repeater-footer-left{margin-bottom:8px}}.fuelux .repeater-header{border-bottom:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px}.fuelux .repeater-footer{border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.fuelux .repeater-loader{display:none;left:50%;position:absolute;margin:-32px 0 0 -32px;top:50%}.fuelux .repeater-viewport{min-height:80px;position:relative}.fuelux .repeater-pagination label{font-weight:400}.fuelux .repeater-pagination .repeater-primaryPaging{display:none;vertical-align:middle;width:116px}.fuelux .repeater-pagination .repeater-primaryPaging.active{display:inline-block}.fuelux .repeater-pagination .repeater-primaryPaging ul.dropdown-menu{min-width:116px}.fuelux .repeater-pagination .repeater-secondaryPaging{display:none;width:82px}.fuelux .repeater-pagination .repeater-secondaryPaging.active{display:inline-block}.fuelux .repeater-search{float:left;width:200px}.fuelux .repeater-title{display:block;float:left;line-height:34px;margin-right:10px}.fuelux .repeater[data-currentview=list] .repeater-loader{margin-top:-12px}.fuelux .repeater[data-currentview=list] .repeater-loader.noHeader{margin-top:-32px}.fuelux .repeater-list-check{display:inline-block;height:0;line-height:0;position:relative;vertical-align:top;width:0}.fuelux .repeater-list-check span.glyphicon{left:-22px;position:absolute;top:2px}.fuelux .repeater-list-header,.fuelux .repeater-list-items{margin-bottom:0;width:100%}.fuelux .repeater-list-header td,.fuelux .repeater-list-items td{border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:0}.fuelux .repeater-list-header td:first-child,.fuelux .repeater-list-items td:first-child{border-left:0}.fuelux .repeater-list-header{background:#F9F9F9}.fuelux .repeater-list-header td{font-weight:700}.fuelux .repeater-list-header td.sortable:hover,.fuelux .repeater-list-header td.sortable.sorted{background:#F1F1F1;cursor:pointer;background-color:#f1f1f1;background-image:-moz-linear-gradient(top,#f9f9f9,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f9f9),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f9f9f9,#e5e5e5);background-image:-o-linear-gradient(top,#f9f9f9,#e5e5e5);background-image:linear-gradient(to bottom,#f9f9f9,#e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#ffe5e5e5', GradientType=0)}.fuelux .repeater-list-header td.sortable.sorted span.glyphicon{display:block}.fuelux .repeater-list-header td span.glyphicon{display:none;float:right;margin-top:2px}.fuelux .repeater-list-items tr.empty td{border-bottom:0;font-style:italic;padding:20px;text-align:center;width:100%}.fuelux .repeater-list-items tr.selectable:hover{background:#d9edf7;cursor:pointer}.fuelux .repeater-list-items tr.selected{background:#66AFE9;color:#fff}.fuelux .repeater-list-items tr.selected:hover{background:#428bca}.fuelux .repeater-list-items tr.selected td:first-child{padding-left:30px}.fuelux .repeater-list-wrapper{overflow-y:auto}.fuelux .repeater-thumbnail{border:1px solid #ddd;color:#666;float:left;font-size:12px;height:130px;line-height:36px;margin:10px 12px;text-align:center;width:100px;-webkit-box-shadow:0 1px 4px 0 #ddd;box-shadow:0 1px 4px 0 #ddd}.fuelux .repeater-thumbnail img{display:block;margin-top:12px}.fuelux .repeater-thumbnail-cont{height:100%;overflow-y:auto;padding:10px;width:100%}.fuelux .repeater-thumbnail-cont div.empty{font-style:italic;padding:20px 10px;text-align:center}.fuelux .spinbox{display:inline-block;position:relative}.fuelux .spinbox.digits-3{width:60px}.fuelux .spinbox.disabled .spinbox-buttons{cursor:not-allowed}.fuelux .spinbox .spinbox-input{float:left;padding-bottom:3px;padding:0 25px 0 7px}.fuelux .spinbox .btn{position:relative;width:20px;height:13px;padding-top:0;padding-right:9px;padding-left:9px}.fuelux .spinbox .btn.disabled{cursor:not-allowed}.fuelux .spinbox .spinbox-buttons{position:absolute;height:28px;width:20px;right:2px}.fuelux .spinbox .spinbox-up{padding:0 0 14px 1px;top:2px}.fuelux .spinbox .spinbox-up .glyphicon-chevron-up{position:relative;top:0}.fuelux .spinbox .btn-group>.btn.spinbox-up{border-top-right-radius:4px}.fuelux .spinbox .spinbox-down{padding:0 0 8px 1px;top:2px;height:15px;border-bottom-left-radius:4px}.fuelux .spinbox .spinbox-down .glyphicon-chevron-down{position:relative;left:-1px;top:0}.fuelux .scheduler .control-label{min-width:7em}.fuelux .scheduler .inline-form-text{float:left;line-height:27px;margin-top:4px}.fuelux .scheduler .start-datetime.form-group{margin-bottom:0}.fuelux .scheduler .start-datetime .form-group{margin-left:0}.fuelux .scheduler .start-datetime .combobox{max-width:9em}.fuelux .scheduler .start-datetime .combobox .dropdown-menu{max-height:200px;overflow:auto}.fuelux .scheduler .start-datetime .dropdown{float:left;margin:0 10px 0 0}.fuelux .scheduler .timezone-container .input-group{max-width:20em}.fuelux .scheduler .timezone-container .dropdown-label{height:18px;white-space:nowrap;max-width:20em;overflow:hidden;text-overflow:ellipsis}.fuelux .scheduler .timezone-container .dropdown-menu{max-height:200px;overflow:auto}.fuelux .scheduler .repeat-panel{margin-left:0}.fuelux .scheduler .repeat-panel label{font-weight:400}.fuelux .scheduler .repeat-panel .radio{margin-right:10px}.fuelux .scheduler .repeat-panel .form-group{margin-left:0}.fuelux .scheduler .repeat-interval{margin-left:0;*zoom:1}.fuelux .scheduler .repeat-interval:before,.fuelux .scheduler .repeat-interval:after{display:table;content:"";line-height:0}.fuelux .scheduler .repeat-interval:after{clear:both}.fuelux .scheduler .repeat-interval .form-group{margin-left:0}.fuelux .scheduler .repeat-interval .dropdown-menu{max-height:200px;overflow:auto}.fuelux .scheduler .repeat-interval .repeat-every-panel{float:left}.fuelux .scheduler .repeat-interval .repeat-every-panel .repeat-every-pretext{padding:0 10px}.fuelux .scheduler .repeat-interval .repeat-every-panel .spinbox{float:left;margin-right:10px}.fuelux .scheduler .repeat-interval .repeat-every-panel .spinbox input{margin-bottom:0}.fuelux .scheduler .repeat-monthly .repeat-monthly-date{margin-top:10px;*zoom:1}.fuelux .scheduler .repeat-monthly .repeat-monthly-date:before,.fuelux .scheduler .repeat-monthly .repeat-monthly-date:after{display:table;content:"";line-height:0}.fuelux .scheduler .repeat-monthly .repeat-monthly-date:after{clear:both}.fuelux .scheduler .repeat-monthly .repeat-monthly-date .selectlist{margin-left:5px}.fuelux .scheduler .repeat-monthly .repeat-monthly-day{margin-top:10px;*zoom:1}.fuelux .scheduler .repeat-monthly .repeat-monthly-day:before,.fuelux .scheduler .repeat-monthly .repeat-monthly-day:after{display:table;content:"";line-height:0}.fuelux .scheduler .repeat-monthly .repeat-monthly-day:after{clear:both}.fuelux .scheduler .repeat-monthly .month-days{margin-left:10px}.fuelux .scheduler .repeat-yearly .repeat-yearly-date{margin-top:10px;*zoom:1}.fuelux .scheduler .repeat-yearly .repeat-yearly-date:before,.fuelux .scheduler .repeat-yearly .repeat-yearly-date:after{display:table;content:"";line-height:0}.fuelux .scheduler .repeat-yearly .repeat-yearly-date:after{clear:both}.fuelux .scheduler .repeat-yearly .repeat-yearly-date .year-month-day{margin-left:10px}.fuelux .scheduler .repeat-yearly .year-month-days{margin-left:10px}.fuelux .scheduler .repeat-yearly .year-month{margin-left:10px}.fuelux .scheduler .repeat-yearly .repeat-yearly-day{margin-top:10px;*zoom:1}.fuelux .scheduler .repeat-yearly .repeat-yearly-day:before,.fuelux .scheduler .repeat-yearly .repeat-yearly-day:after{display:table;content:"";line-height:0}.fuelux .scheduler .repeat-yearly .repeat-yearly-day:after{clear:both}.fuelux .scheduler .repeat-yearly .repeat-yearly-day .repeat-yearly-day-text{margin-left:10px}.fuelux .scheduler .repeat-weekly button:not(.active){background-color:#fff}.fuelux .scheduler .repeat-weekly .btn-group.disabled{position:relative;opacity:.65}.fuelux .scheduler .repeat-weekly .btn-group.disabled:before{background:0 0;bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:5}.fuelux .scheduler .selectlist{float:left}.fuelux .scheduler label.radio{float:left;line-height:27px}.fuelux .scheduler label.radio input{margin-top:8px}.fuelux .scheduler .repeat-end .end-after{float:left;display:inline-block;margin-right:10px}.fuelux .scheduler .repeat-end .form-group{margin-left:0}.fuelux .search.disabled .input-group-btn{cursor:not-allowed}.fuelux .selectlist.disabled{cursor:not-allowed}.fuelux .selectlist-sizer{display:inline-block;position:absolute;visibility:hidden;top:0}.fuelux .selectlist .selected-label{overflow:hidden;min-width:2em}.fuelux .selectlist .btn.dropdown-toggle{white-space:normal}.fuelux .selectlist .btn.dropdown-toggle .selected-label{padding-right:10px;text-align:left}.fuelux .tree{border:1px solid #999;border-radius:4px;padding:10px 15px 0;overflow-x:auto;overflow-y:auto;position:relative;list-style:none}.fuelux .tree :focus{outline:0}.fuelux .tree button:focus{color:#999}.fuelux .tree ul{padding-left:0;margin-top:0;margin-bottom:0;list-style:none}.fuelux .tree li{margin:0;margin-top:5px;margin-bottom:5px}.fuelux .tree .tree-loader{margin-left:45px}.fuelux .tree .tree-open>.tree-branch-header .glyphicon-play{transform:rotate(90deg);-ms-transform:rotate(90deg);-webkit-transform:rotate(90deg);position:relative;left:-5px}.fuelux .tree [data-children=false]>.tree-branch-header .icon-caret:before{content:'\00a0'}.fuelux .tree .tree-branch .tree-branch-header{position:relative;border-radius:6px}.fuelux .tree .tree-branch .tree-branch-header .tree-branch-name:hover{color:#999}.fuelux .tree .tree-branch .tree-branch-header .glyphicon-play{font-size:10px;padding-right:5px}.fuelux .tree .tree-branch .tree-branch-header .glyphicon-play:before{position:relative;top:-2px}.fuelux .tree .tree-branch .tree-branch-header .tree-branch-name{white-space:nowrap;border-radius:6px;background-color:transparent;border:0}.fuelux .tree .tree-branch .tree-branch-header label{font-weight:400;padding-left:3px;margin-bottom:0;cursor:pointer}.fuelux .tree .tree-branch .tree-branch-children{margin-left:14px}.fuelux .tree .tree-item{position:relative;cursor:pointer;border-radius:6px;margin-left:26px}.fuelux .tree .tree-item .tree-item-name{white-space:nowrap;border-radius:6px;background-color:transparent;border:0}.fuelux .tree .tree-item .tree-item-name:hover{color:#999}.fuelux .tree .tree-item.tree-selected .tree-item-name{background-color:#4f4f4f;color:#fff}.fuelux .tree .tree-item label{font-weight:400;padding-left:7px;margin-bottom:0;cursor:pointer}.fuelux .tree .icon-caret:hover+.tree-branch-name{color:#999}.fuelux .tree.tree-folder-select .tree-branch .icon-caret{background-color:transparent;border:0}.fuelux .tree.tree-folder-select .tree-branch .icon-caret:hover{cursor:pointer;color:#999}.fuelux .tree.tree-folder-select .tree-branch>.tree-branch-name{padding:1px 5px 0;border-radius:6px}.fuelux .tree.tree-folder-select .tree-branch>.tree-branch-name.tree-selected{background-color:#4f4f4f;color:#fff}.fuelux .tree.tree-folder-select .tree-branch.tree-selected>.tree-branch-header .tree-branch-name{background-color:#4f4f4f;color:#fff}.fuelux .tree.tree-folder-select .tree-branch.tree-selected>.tree-branch-header .tree-branch-name:hover{background-color:#4f4f4f;color:#fff}.fuelux .wizard{*zoom:1;border:1px solid #d4d4d4;border-radius:4px;box-shadow:0 1px 4px rgba(0,0,0,.065);background-color:#f9f9f9;position:relative;min-height:48px;overflow:hidden}.fuelux .wizard:before,.fuelux .wizard:after{display:table;content:"";line-height:0}.fuelux .wizard:after{clear:both}.fuelux .wizard>.steps{list-style:none outside none;padding:0;margin:0;width:4000px}.fuelux .wizard>.steps.previous-disabled li.complete{cursor:default}.fuelux .wizard>.steps.previous-disabled li.complete:hover{background:#f3f4f5;color:#468847;cursor:default}.fuelux .wizard>.steps.previous-disabled li.complete:hover .chevron:before{border-left-color:#f3f4f5}.fuelux .wizard>.steps li{float:left;margin:0;padding:0 20px 0 30px;height:46px;line-height:46px;position:relative;background:#ededed;color:#999;font-size:16px;cursor:not-allowed}.fuelux .wizard>.steps li .chevron{border:24px solid transparent;border-left:14px solid #d4d4d4;border-right:0;display:block;position:absolute;right:-14px;top:0;z-index:1}.fuelux .wizard>.steps li .chevron:before{border:24px solid transparent;border-left:14px solid #ededed;border-right:0;content:"";display:block;position:absolute;right:1px;top:-24px}.fuelux .wizard>.steps li.complete{background:#f3f4f5;color:#468847}.fuelux .wizard>.steps li.complete:hover{background:#e7eff8;cursor:pointer}.fuelux .wizard>.steps li.complete:hover .chevron:before{border-left:14px solid #e7eff8}.fuelux .wizard>.steps li.complete .chevron:before{border-left:14px solid #f3f4f5}.fuelux .wizard>.steps li.active{background:#f1f6fc;color:#3a87ad;cursor:default}.fuelux .wizard>.steps li.active .chevron:before{border-left:14px solid #f1f6fc}.fuelux .wizard>.steps li.active .badge{background-color:#3a87ad}.fuelux .wizard>.steps li .badge{margin-right:8px}.fuelux .wizard>.steps li .badge-success{background-color:#468847}.fuelux .wizard>.steps li:first-child{border-radius:4px 0 0 4px;padding-left:20px}.fuelux .wizard>.actions{z-index:1000;position:absolute;right:0;line-height:46px;float:right;padding-left:15px;padding-right:15px;vertical-align:middle;background-color:#e5e5e5;border-left:1px solid #d4d4d4}.fuelux .wizard>.actions a{line-height:45px;font-size:12px;margin-right:8px}.fuelux .wizard>.actions .btn-prev[disabled]{cursor:not-allowed}.fuelux .wizard>.actions .btn-prev span{margin-right:5px}.fuelux .wizard>.actions .btn-next[disabled]{cursor:not-allowed}.fuelux .wizard>.actions .btn-next span{margin-left:5px}.fuelux .wizard .step-content{border-top:1px solid #D4D4D4;padding:10px;float:left;width:100%}.fuelux .wizard .step-content .step-pane{display:none}.fuelux .wizard .step-content>.active{display:block}.fuelux .wizard .step-content>.active .btn-group .active{display:inline-block}.fuelux .wizard.complete>.actions .glyphicon-arrow-right:before{display:none}.fuelux .wizard.complete>.actions .glyphicon-arrow-right{margin-left:0}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.eot b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.eot
deleted file mode 100644
index 36f005ee9819158bf4dbb3e0cf3b94949c755d26..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.eot and /dev/null differ
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.svg b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.svg
deleted file mode 100644
index 4f0eeb005708f4e95c9090a068d678c6cfcf7169..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by Fontastic.me</metadata>
-<defs>
-<font id="fuelux" horiz-adv-x="512">
-<font-face font-family="fuelux" units-per-em="512" ascent="480" descent="-32"/>
-<missing-glyph horiz-adv-x="512" />
-
-<glyph unicode="&#57344;" d="M151 391c26 19 56 32 90 35l0 83c-56-3-108-25-149-59z m-148-114l84 0c4 34 18 64 38 89l-58 58c-36-39-59-91-64-147z m59-185l59 59c-19 26-32 56-35 90l-83 0c3-56 25-108 59-149z m173-5c-34 4-64 18-89 38l-58-58c39-36 91-59 147-64z m126 34c-26-19-56-32-90-35l0-83c56 3 108 25 149 59z m148 114l-84 0c-4-34-18-64-38-89l58-58c36 39 59 91 64 147z m-232 190c34-4 64-18 89-38l58 58c-39 36-91 59-147 64z m173-5l-59-59c19-26 32-56 35-90l83 0c-3 56-25 108-59 149z"/>
-<glyph unicode="&#57345;" d="M277 425c34-4 64-18 89-38l58 58c-39 36-91 59-147 64z"/>
-<glyph unicode="&#57346;" d="M450 420l-59-59c19-26 32-56 35-90l83 0c-3 56-25 108-59 149z"/>
-<glyph unicode="&#57347;" d="M509 235l-84 0c-4-34-18-64-38-89l58-58c36 39 59 91 64 147z"/>
-<glyph unicode="&#57348;" d="M361 121c-26-19-56-32-90-35l0-83c56 3 108 25 149 59z"/>
-<glyph unicode="&#57349;" d="M235 87c-34 4-64 18-89 38l-58-58c39-36 91-59 147-64z"/>
-<glyph unicode="&#57350;" d="M62 92l59 59c-19 26-32 56-35 90l-83 0c3-56 25-108 59-149z"/>
-<glyph unicode="&#57351;" d="M3 277l84 0c4 34 18 64 38 89l-58 58c-36-39-59-91-64-147z"/>
-<glyph unicode="&#57352;" d="M151 391c26 19 56 32 90 35l0 83c-56-3-108-25-149-59z"/>
-<glyph unicode="&#57353;" d="M336 218c0-47-38-85-85-85-46 0-84 38-84 85 0 46 38 84 84 84 47 0 85-38 85-84z"/>
-</font></defs></svg>
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.ttf b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.ttf
deleted file mode 100644
index 100a104bf190eaae589165a04a19db27beef7d2c..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.ttf and /dev/null differ
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.woff b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.woff
deleted file mode 100644
index 4c2cd2d62cb06f7ffd09ae877a475c3887d9dc04..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/fonts/fuelux.woff and /dev/null differ
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/js/fuelux.js b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/js/fuelux.js
deleted file mode 100644
index 84b321b12d1fede074656b771d58758b7857d78e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/js/fuelux.js
+++ /dev/null
@@ -1,6226 +0,0 @@
-/*!
- * Fuel UX v3.0.2
- * Copyright 2012-2014 ExactTarget
- * Licensed under the BSD-3-Clause license ()
- */
-
-
-// For more information on UMD visit: https://github.com/umdjs/umd/
-( function( factory ) {
-	if ( typeof define === 'function' && define.amd ) {
-		define( [ 'jquery', 'bootstrap' ], factory );
-	} else {
-		factory( jQuery );
-	}
-}( function( jQuery ) {
-
-	if ( typeof jQuery === 'undefined' ) {
-		throw new Error( 'Fuel UX\'s JavaScript requires jQuery' )
-	}
-
-	if ( typeof jQuery.fn.dropdown === 'undefined' || typeof jQuery.fn.collapse === 'undefined' ) {
-		throw new Error( 'Fuel UX\'s JavaScript requires Bootstrap' )
-	}
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Checkbox
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.checkbox;
-
-		// CHECKBOX CONSTRUCTOR AND PROTOTYPE
-
-		var Checkbox = function( element, options ) {
-			this.options = $.extend( {}, $.fn.checkbox.defaults, options );
-
-			// cache elements
-			this.$element = $( element ).is( 'input[type="checkbox"]' ) ? $( element ) : $( element ).find( 'input[type="checkbox"]:first' );
-			this.$label = this.$element.parent();
-			this.$parent = this.$label.parent( '.checkbox' );
-			this.$toggleContainer = this.$element.attr( 'data-toggle' );
-			this.state = {
-				disabled: false,
-				checked: false
-			};
-
-			if ( this.$parent.length === 0 ) {
-				this.$parent = null;
-			}
-
-			if ( Boolean( this.$toggleContainer ) ) {
-				this.$toggleContainer = $( this.$toggleContainer );
-			} else {
-				this.$toggleContainer = null;
-			}
-
-			// handle events
-			this.$element.on( 'change.fu.checkbox', $.proxy( this.itemchecked, this ) );
-
-			// set default state
-			this.setState();
-		};
-
-		Checkbox.prototype = {
-
-			constructor: Checkbox,
-
-			setState: function( $chk ) {
-				$chk = $chk || this.$element;
-
-				this.state.disabled = Boolean( $chk.prop( 'disabled' ) );
-				this.state.checked = Boolean( $chk.is( ':checked' ) );
-
-				this._resetClasses();
-
-				// set state of checkbox
-				this._toggleCheckedState();
-				this._toggleDisabledState();
-
-				//toggle container
-				this.toggleContainer();
-			},
-
-			enable: function() {
-				this.state.disabled = false;
-				this.$element.attr( 'disabled', false );
-				this._resetClasses();
-				this.$element.trigger( 'enabled.fu.checkbox' );
-			},
-
-			disable: function() {
-				this.state.disabled = true;
-				this.$element.attr( 'disabled', true );
-				this._setDisabledClass();
-				this.$element.trigger( 'disabled.fu.checkbox' );
-			},
-
-			check: function() {
-				this.state.checked = true;
-				this.$element.prop( 'checked', true );
-				this._setCheckedClass();
-				this.$element.trigger( 'checked.fu.checkbox' );
-			},
-
-			uncheck: function() {
-				this.state.checked = false;
-				this.$element.prop( 'checked', false );
-				this._resetClasses();
-				this.$element.trigger( 'unchecked.fu.checkbox' );
-			},
-
-			isChecked: function() {
-				return this.state.checked;
-			},
-
-			toggle: function() {
-				this.state.checked = !this.state.checked;
-
-				this._toggleCheckedState();
-			},
-
-			toggleContainer: function() {
-				if ( Boolean( this.$toggleContainer ) ) {
-					if ( this.state.checked ) {
-						this.$toggleContainer.removeClass( 'hide' );
-						this.$toggleContainer.attr( 'aria-hidden', 'false' );
-					} else {
-						this.$toggleContainer.addClass( 'hide' );
-						this.$toggleContainer.attr( 'aria-hidden', 'true' );
-					}
-				}
-			},
-
-			itemchecked: function( element ) {
-				this.setState( $( element.target ) );
-			},
-
-			destroy: function() {
-				this.$parent.remove();
-				// remove any external bindings
-				// [none]
-				// empty elements to return to original markup
-				// [none]
-				return this.$parent[ 0 ].outerHTML;
-			},
-
-			_resetClasses: function() {
-				var classesToRemove = [];
-
-				if ( !this.state.checked ) {
-					classesToRemove.push( 'checked' );
-				}
-
-				if ( !this.state.disabled ) {
-					classesToRemove.push( 'disabled' );
-				}
-
-				classesToRemove = classesToRemove.join( ' ' );
-
-				this.$label.removeClass( classesToRemove );
-
-				if ( this.$parent ) {
-					this.$parent.removeClass( classesToRemove );
-				}
-			},
-
-			_toggleCheckedState: function() {
-				if ( this.state.checked ) {
-					this.check();
-				} else {
-					this.uncheck();
-				}
-			},
-
-			_toggleDisabledState: function() {
-				if ( this.state.disabled ) {
-					this.disable();
-				} else {
-					this.enable();
-				}
-			},
-
-			_setCheckedClass: function() {
-				this.$label.addClass( 'checked' );
-
-				if ( this.$parent ) {
-					this.$parent.addClass( 'checked' );
-				}
-			},
-
-			_setDisabledClass: function() {
-				this.$label.addClass( 'disabled' );
-
-				if ( this.$parent ) {
-					this.$parent.addClass( 'disabled' );
-				}
-			}
-		};
-
-
-		// CHECKBOX PLUGIN DEFINITION
-
-		$.fn.checkbox = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.checkbox' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) {
-					$this.data( 'fu.checkbox', ( data = new Checkbox( this, options ) ) );
-				}
-
-				if ( typeof option === 'string' ) {
-					methodReturn = data[ option ].apply( data, args );
-				}
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.checkbox.defaults = {};
-
-		$.fn.checkbox.Constructor = Checkbox;
-
-		$.fn.checkbox.noConflict = function() {
-			$.fn.checkbox = old;
-			return this;
-		};
-
-		// DATA-API
-
-		$( document ).on( 'mouseover.fu.checkbox.data-api', '[data-initialize=checkbox]', function( e ) {
-			var $control = $( e.target ).closest( '.checkbox' ).find( '[type=checkbox]' );
-			if ( !$control.data( 'fu.checkbox' ) ) {
-				$control.checkbox( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=checkbox] [type=checkbox]' ).each( function() {
-				var $this = $( this );
-				if ( !$this.data( 'fu.checkbox' ) ) {
-					$this.checkbox( $this.data() );
-				}
-			} );
-		} );
-
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Combobox
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.combobox;
-
-
-		// COMBOBOX CONSTRUCTOR AND PROTOTYPE
-
-		var Combobox = function( element, options ) {
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.combobox.defaults, options );
-
-			this.$dropMenu = this.$element.find( '.dropdown-menu' );
-			this.$input = this.$element.find( 'input' );
-			this.$button = this.$element.find( '.btn' );
-
-			this.$element.on( 'click.fu.combobox', 'a', $.proxy( this.itemclicked, this ) );
-			this.$element.on( 'change.fu.combobox', 'input', $.proxy( this.inputchanged, this ) );
-			this.$element.on( 'shown.bs.dropdown', $.proxy( this.menuShown, this ) );
-
-			// set default selection
-			this.setDefaultSelection();
-		};
-
-		Combobox.prototype = {
-
-			constructor: Combobox,
-
-			destroy: function() {
-				this.$element.remove();
-				// remove any external bindings
-				// [none]
-
-				// set input value attrbute in markup
-				this.$element.find( 'input' ).each( function() {
-					$( this ).attr( 'value', $( this ).val() );
-				} );
-
-				// empty elements to return to original markup
-				// [none]
-
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			doSelect: function( $item ) {
-				if ( typeof $item[ 0 ] !== 'undefined' ) {
-					this.$selectedItem = $item;
-					this.$input.val( this.$selectedItem.text() );
-				} else {
-					this.$selectedItem = null;
-				}
-			},
-
-			menuShown: function() {
-				if ( this.options.autoResizeMenu ) {
-					this.resizeMenu();
-				}
-			},
-
-			resizeMenu: function() {
-				var width = this.$element.outerWidth();
-				this.$dropMenu.outerWidth( width );
-			},
-
-			selectedItem: function() {
-				var item = this.$selectedItem;
-				var data = {};
-
-				if ( item ) {
-					var txt = this.$selectedItem.text();
-					data = $.extend( {
-						text: txt
-					}, this.$selectedItem.data() );
-				} else {
-					data = {
-						text: this.$input.val()
-					};
-				}
-
-				return data;
-			},
-
-			selectByText: function( text ) {
-				var $item = $( [] );
-				this.$element.find( 'li' ).each( function() {
-					if ( ( this.textContent || this.innerText || $( this ).text() || '' ).toLowerCase() === ( text || '' ).toLowerCase() ) {
-						$item = $( this );
-						return false;
-					}
-				} );
-				this.doSelect( $item );
-			},
-
-			selectByValue: function( value ) {
-				var selector = 'li[data-value="' + value + '"]';
-				this.selectBySelector( selector );
-			},
-
-			selectByIndex: function( index ) {
-				// zero-based index
-				var selector = 'li:eq(' + index + ')';
-				this.selectBySelector( selector );
-			},
-
-			selectBySelector: function( selector ) {
-				var $item = this.$element.find( selector );
-				this.doSelect( $item );
-			},
-
-			setDefaultSelection: function() {
-				var selector = 'li[data-selected=true]:first';
-				var item = this.$element.find( selector );
-
-				if ( item.length > 0 ) {
-					// select by data-attribute
-					this.selectBySelector( selector );
-					item.removeData( 'selected' );
-					item.removeAttr( 'data-selected' );
-				}
-			},
-
-			enable: function() {
-				this.$element.removeClass( 'disabled' );
-				this.$input.removeAttr( 'disabled' );
-				this.$button.removeClass( 'disabled' );
-			},
-
-			disable: function() {
-				this.$element.addClass( 'disabled' );
-				this.$input.attr( 'disabled', true );
-				this.$button.addClass( 'disabled' );
-			},
-
-			itemclicked: function( e ) {
-				this.$selectedItem = $( e.target ).parent();
-
-				// set input text and trigger input change event marked as synthetic
-				this.$input.val( this.$selectedItem.text() ).trigger( 'change', {
-					synthetic: true
-				} );
-
-				// pass object including text and any data-attributes
-				// to onchange event
-				var data = this.selectedItem();
-
-				// trigger changed event
-				this.$element.trigger( 'changed.fu.combobox', data );
-
-				e.preventDefault();
-
-				// return focus to control after selecting an option
-				this.$element.find( '.dropdown-toggle' ).focus();
-			},
-
-			inputchanged: function( e, extra ) {
-
-				// skip processing for internally-generated synthetic event
-				// to avoid double processing
-				if ( extra && extra.synthetic ) return;
-
-				var val = $( e.target ).val();
-				this.selectByText( val );
-
-				// find match based on input
-				// if no match, pass the input value
-				var data = this.selectedItem();
-				if ( data.text.length === 0 ) {
-					data = {
-						text: val
-					};
-				}
-
-				// trigger changed event
-				this.$element.trigger( 'changed.fu.combobox', data );
-
-			}
-
-		};
-
-
-		// COMBOBOX PLUGIN DEFINITION
-
-		$.fn.combobox = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.combobox' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.combobox', ( data = new Combobox( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.combobox.defaults = {
-			autoResizeMenu: true
-		};
-
-		$.fn.combobox.Constructor = Combobox;
-
-		$.fn.combobox.noConflict = function() {
-			$.fn.combobox = old;
-			return this;
-		};
-
-		// DATA-API
-
-		$( document ).on( 'mousedown.fu.combobox.data-api', '[data-initialize=combobox]', function( e ) {
-			var $control = $( e.target ).closest( '.combobox' );
-			if ( !$control.data( 'fu.combobox' ) ) {
-				$control.combobox( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=combobox]' ).each( function() {
-				var $this = $( this );
-				if ( !$this.data( 'fu.combobox' ) ) {
-					$this.combobox( $this.data() );
-				}
-			} );
-		} );
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Datepicker
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var INVALID_DATE = 'Invalid Date';
-		var MOMENT_NOT_AVAILABLE = 'moment.js is not available so you cannot use this function';
-
-		var datepickerStack = [];
-		var moment = false;
-		var old = $.fn.datepicker;
-		var requestedMoment = false;
-
-		var runStack = function() {
-			var i, l;
-			requestedMoment = true;
-			for ( i = 0, l = datepickerStack.length; i < l; i++ ) {
-				datepickerStack[ i ].init.call( datepickerStack[ i ].scope );
-			}
-			datepickerStack = [];
-		};
-
-		//only load moment if it's there. otherwise we'll look for it in window.moment
-		if ( typeof define === 'function' && define.amd ) { //check if AMD is available
-			require( [ 'moment' ], function( amdMoment ) {
-				moment = amdMoment;
-				runStack();
-			}, function( err ) {
-				var failedId = err.requireModules && err.requireModules[ 0 ];
-				if ( failedId === 'moment' ) {
-					runStack();
-				}
-			} );
-		} else {
-			runStack();
-		}
-
-		// DATEPICKER CONSTRUCTOR AND PROTOTYPE
-
-		var Datepicker = function( element, options ) {
-			this.$element = $( element );
-			this.options = $.extend( true, {}, $.fn.datepicker.defaults, options );
-
-			this.$calendar = this.$element.find( '.datepicker-calendar' );
-			this.$days = this.$calendar.find( '.datepicker-calendar-days' );
-			this.$header = this.$calendar.find( '.datepicker-calendar-header' );
-			this.$headerTitle = this.$header.find( '.title' );
-			this.$input = this.$element.find( 'input' );
-			this.$wheels = this.$element.find( '.datepicker-wheels' );
-			this.$wheelsMonth = this.$element.find( '.datepicker-wheels-month' );
-			this.$wheelsYear = this.$element.find( '.datepicker-wheels-year' );
-
-			this.artificialScrolling = false;
-			this.formatDate = this.options.formatDate || this.formatDate;
-			this.inputValue = null;
-			this.moment = false;
-			this.momentFormat = null;
-			this.parseDate = this.options.parseDate || this.parseDate;
-			this.preventBlurHide = false;
-			this.restricted = this.options.restricted || [];
-			this.restrictedParsed = [];
-			this.restrictedText = this.options.restrictedText;
-			this.sameYearOnly = this.options.sameYearOnly;
-			this.selectedDate = null;
-			this.yearRestriction = null;
-
-			this.$calendar.find( '.datepicker-today' ).on( 'click.fu.datepicker', $.proxy( this.todayClicked, this ) );
-			this.$days.on( 'click.fu.datepicker', 'tr td button', $.proxy( this.dateClicked, this ) );
-			this.$element.find( '.dropdown-menu' ).on( 'mousedown.fu.datepicker', $.proxy( this.dropdownMousedown, this ) );
-			this.$header.find( '.next' ).on( 'click.fu.datepicker', $.proxy( this.next, this ) );
-			this.$header.find( '.prev' ).on( 'click.fu.datepicker', $.proxy( this.prev, this ) );
-			this.$headerTitle.on( 'click.fu.datepicker', $.proxy( this.titleClicked, this ) );
-			this.$input.on( 'blur.fu.datepicker', $.proxy( this.inputBlurred, this ) );
-			this.$input.on( 'focus.fu.datepicker', $.proxy( this.inputFocused, this ) );
-			this.$wheels.find( '.datepicker-wheels-back' ).on( 'click.fu.datepicker', $.proxy( this.backClicked, this ) );
-			this.$wheels.find( '.datepicker-wheels-select' ).on( 'click.fu.datepicker', $.proxy( this.selectClicked, this ) );
-			this.$wheelsMonth.on( 'click.fu.datepicker', 'ul button', $.proxy( this.monthClicked, this ) );
-			this.$wheelsYear.on( 'click.fu.datepicker', 'ul button', $.proxy( this.yearClicked, this ) );
-			this.$wheelsYear.find( 'ul' ).on( 'scroll.fu.datepicker', $.proxy( this.onYearScroll, this ) );
-
-			var init = function() {
-				if ( this.checkForMomentJS() ) {
-					moment = moment || window.moment; // need to pull in the global moment if they didn't do it via require
-					this.moment = true;
-					this.momentFormat = this.options.momentConfig.format;
-					this.setCulture( this.options.momentConfig.culture );
-				}
-
-				this.setRestrictedDates( this.restricted );
-				if ( !this.setDate( this.options.date ) ) {
-					this.$input.val( '' );
-					this.inputValue = this.$input.val();
-				}
-				if ( this.sameYearOnly ) {
-					this.yearRestriction = ( this.selectedDate ) ? this.selectedDate.getFullYear() : new Date().getFullYear();
-				}
-			};
-
-			if ( requestedMoment ) {
-				init.call( this );
-			} else {
-				datepickerStack.push( {
-					init: init,
-					scope: this
-				} );
-			}
-		};
-
-		Datepicker.prototype = {
-
-			constructor: Datepicker,
-
-			backClicked: function() {
-				this.changeView( 'calendar' );
-			},
-
-			changeView: function( view, date ) {
-				if ( view === 'wheels' ) {
-					this.$calendar.hide().attr( 'aria-hidden', 'true' );
-					this.$wheels.show().removeAttr( 'aria-hidden', '' );
-					if ( date ) {
-						this.renderWheel( date );
-					}
-				} else {
-					this.$wheels.hide().attr( 'aria-hidden', 'true' );
-					this.$calendar.show().removeAttr( 'aria-hidden', '' );
-					if ( date ) {
-						this.renderMonth( date );
-					}
-				}
-			},
-
-			checkForMomentJS: function() {
-				if (
-					( $.isFunction( window.moment ) || ( typeof moment !== 'undefined' && $.isFunction( moment ) ) ) &&
-					$.isPlainObject( this.options.momentConfig ) &&
-					this.options.momentConfig.culture && this.options.momentConfig.format
-				) {
-					return true;
-				} else {
-					return false;
-				}
-			},
-
-			dateClicked: function( e ) {
-				var $td = $( e.currentTarget ).parents( 'td:first' );
-				var date;
-
-				if ( $td.hasClass( 'restricted' ) ) {
-					return;
-				}
-
-				this.$days.find( 'td.selected' ).removeClass( 'selected' );
-				$td.addClass( 'selected' );
-
-				date = new Date( $td.attr( 'data-year' ), $td.attr( 'data-month' ), $td.attr( 'data-date' ) );
-				this.selectedDate = date;
-				this.$input.val( this.formatDate( date ) );
-				this.inputValue = this.$input.val();
-				this.$input.focus();
-			},
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings
-				// [none]
-
-				// empty elements to return to original markup
-				this.$days.find( 'tbody' ).empty();
-				this.$wheelsYear.find( 'ul' ).empty();
-
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			disable: function() {
-				this.$element.addClass( 'disabled' );
-				this.$element.find( 'input, button' ).attr( 'disabled', 'disabled' );
-				this.$element.find( '.input-group-btn' ).removeClass( 'open' );
-			},
-
-			dropdownMousedown: function() {
-				var self = this;
-				this.preventBlurHide = true;
-				setTimeout( function() {
-					self.preventBlurHide = false;
-				}, 0 );
-			},
-
-			enable: function() {
-				this.$element.removeClass( 'disabled' );
-				this.$element.find( 'input, button' ).removeAttr( 'disabled' );
-			},
-
-			formatDate: function( date ) {
-				var padTwo = function( value ) {
-					var s = '0' + value;
-					return s.substr( s.length - 2 );
-				};
-
-				if ( this.moment ) {
-					return moment( date ).format( this.momentFormat );
-				} else {
-					return padTwo( date.getMonth() + 1 ) + '/' + padTwo( date.getDate() ) + '/' + date.getFullYear();
-				}
-			},
-
-			getCulture: function() {
-				if ( this.moment ) {
-					return moment.lang();
-				} else {
-					throw MOMENT_NOT_AVAILABLE;
-				}
-			},
-
-			getDate: function() {
-				return ( !this.selectedDate ) ? new Date( NaN ) : this.selectedDate;
-			},
-
-			getFormat: function() {
-				if ( this.moment ) {
-					return this.momentFormat;
-				} else {
-					throw MOMENT_NOT_AVAILABLE;
-				}
-			},
-
-			getFormattedDate: function() {
-				return ( !this.selectedDate ) ? INVALID_DATE : this.formatDate( this.selectedDate );
-			},
-
-			getRestrictedDates: function() {
-				return this.restricted;
-			},
-
-			inputBlurred: function( e ) {
-				var inputVal = this.$input.val();
-				var date;
-				if ( inputVal !== this.inputValue ) {
-					date = this.setDate( inputVal );
-					if ( date === null ) {
-						this.$element.trigger( 'inputParsingFailed.fu.datepicker', inputVal );
-					} else if ( date === false ) {
-						this.$element.trigger( 'inputRestrictedDate.fu.datepicker', date );
-					} else {
-						this.$element.trigger( 'changed.fu.datepicker', date );
-					}
-				}
-				if ( !this.preventBlurHide ) {
-					this.$element.find( '.input-group-btn' ).removeClass( 'open' );
-				}
-			},
-
-			inputFocused: function( e ) {
-				this.$element.find( '.input-group-btn' ).addClass( 'open' );
-			},
-
-			isInvalidDate: function( date ) {
-				var dateString = date.toString();
-				if ( dateString === INVALID_DATE || dateString === 'NaN' ) {
-					return true;
-				}
-				return false;
-			},
-
-			isRestricted: function( date, month, year ) {
-				var restricted = this.restrictedParsed;
-				var i, from, l, to;
-
-				if ( this.sameYearOnly && this.yearRestriction !== null && year !== this.yearRestriction ) {
-					return true;
-				}
-				for ( i = 0, l = restricted.length; i < l; i++ ) {
-					from = restricted[ i ].from;
-					to = restricted[ i ].to;
-					if (
-						( year > from.year || ( year === from.year && month > from.month ) || ( year === from.year && month === from.month && date >= from.date ) ) &&
-						( year < to.year || ( year === to.year && month < to.month ) || ( year === to.year && month === to.month && date <= to.date ) )
-					) {
-						return true;
-					}
-				}
-
-				return false;
-			},
-
-			monthClicked: function( e ) {
-				this.$wheelsMonth.find( '.selected' ).removeClass( 'selected' );
-				$( e.currentTarget ).parent().addClass( 'selected' );
-			},
-
-			next: function() {
-				var month = this.$headerTitle.attr( 'data-month' );
-				var year = this.$headerTitle.attr( 'data-year' );
-				month++;
-				if ( month > 11 ) {
-					if ( this.sameYearOnly ) {
-						return;
-					}
-					month = 0;
-					year++;
-				}
-				this.renderMonth( new Date( year, month, 1 ) );
-			},
-
-			onYearScroll: function( e ) {
-				if ( this.artificialScrolling ) {
-					return;
-				}
-
-				var $yearUl = $( e.currentTarget );
-				var height = ( $yearUl.css( 'box-sizing' ) === 'border-box' ) ? $yearUl.outerHeight() : $yearUl.height();
-				var scrollHeight = $yearUl.get( 0 ).scrollHeight;
-				var scrollTop = $yearUl.scrollTop();
-				var bottomPercentage = ( height / ( scrollHeight - scrollTop ) ) * 100;
-				var topPercentage = ( scrollTop / scrollHeight ) * 100;
-				var i, start;
-
-				if ( topPercentage < 5 ) {
-					start = parseInt( $yearUl.find( 'li:first' ).attr( 'data-year' ), 10 );
-					for ( i = ( start - 1 ); i > ( start - 11 ); i-- ) {
-						$yearUl.prepend( '<li data-year="' + i + '"><button type="button">' + i + '</button></li>' );
-					}
-					this.artificialScrolling = true;
-					$yearUl.scrollTop( ( $yearUl.get( 0 ).scrollHeight - scrollHeight ) + scrollTop );
-					this.artificialScrolling = false;
-				} else if ( bottomPercentage > 90 ) {
-					start = parseInt( $yearUl.find( 'li:last' ).attr( 'data-year' ), 10 );
-					for ( i = ( start + 1 ); i < ( start + 11 ); i++ ) {
-						$yearUl.append( '<li data-year="' + i + '"><button type="button">' + i + '</button></li>' );
-					}
-				}
-			},
-
-			//some code ripped from http://stackoverflow.com/questions/2182246/javascript-dates-in-ie-nan-firefox-chrome-ok
-			parseDate: function( date ) {
-				var self = this;
-				var dt, isoExp, momentParse, month, parts, use;
-
-				if ( date ) {
-					if ( this.moment ) { //if we have moment, use that to parse the dates
-						momentParse = function( type, d ) {
-							d = ( type === 'b' ) ? moment( d, self.momentFormat ) : moment( d );
-							return ( d.isValid() === true ) ? d.toDate() : new Date( NaN );
-						};
-						use = ( typeof( date ) === 'string' ) ? [ 'b', 'a' ] : [ 'a', 'b' ];
-						dt = momentParse( use[ 0 ], date );
-						if ( !this.isInvalidDate( dt ) ) {
-							return dt;
-						} else {
-							dt = momentParse( use[ 1 ], date );
-							if ( !this.isInvalidDate( dt ) ) {
-								return dt;
-							}
-						}
-					} else { //if moment isn't present, use previous date parsing strategy
-						if ( typeof( date ) === 'string' ) {
-							dt = new Date( Date.parse( date ) );
-							if ( !this.isInvalidDate( dt ) ) {
-								return dt;
-							} else {
-								date = date.split( 'T' )[ 0 ];
-								isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/;
-								parts = isoExp.exec( date );
-								if ( parts ) {
-									month = parseInt( parts[ 2 ], 10 );
-									dt = new Date( parts[ 1 ], month - 1, parts[ 3 ] );
-									if ( month === ( dt.getMonth() + 1 ) ) {
-										return dt;
-									}
-								}
-							}
-						} else {
-							dt = new Date( date );
-							if ( !this.isInvalidDate( dt ) ) {
-								return dt;
-							}
-						}
-					}
-				}
-				return new Date( NaN );
-			},
-
-			prev: function() {
-				var month = this.$headerTitle.attr( 'data-month' );
-				var year = this.$headerTitle.attr( 'data-year' );
-				month--;
-				if ( month < 0 ) {
-					if ( this.sameYearOnly ) {
-						return;
-					}
-					month = 11;
-					year--;
-				}
-				this.renderMonth( new Date( year, month, 1 ) );
-			},
-
-			renderMonth: function( date ) {
-				date = date || new Date();
-
-				var firstDay = new Date( date.getFullYear(), date.getMonth(), 1 ).getDay();
-				var lastDate = new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();
-				var lastMonthDate = new Date( date.getFullYear(), date.getMonth(), 0 ).getDate();
-				var $month = this.$headerTitle.find( '.month' );
-				var month = date.getMonth();
-				var now = new Date();
-				var nowDate = now.getDate();
-				var nowMonth = now.getMonth();
-				var nowYear = now.getFullYear();
-				var selected = this.selectedDate;
-				var $tbody = this.$days.find( 'tbody' );
-				var year = date.getFullYear();
-				var curDate, curMonth, curYear, i, j, rows, stage, $td, $tr;
-
-				if ( selected ) {
-					selected = {
-						date: selected.getDate(),
-						month: selected.getMonth(),
-						year: selected.getFullYear()
-					};
-				}
-
-				$month.find( '.current' ).removeClass( 'current' );
-				$month.find( 'span[data-month="' + month + '"]' ).addClass( 'current' );
-				this.$headerTitle.find( '.year' ).text( year );
-				this.$headerTitle.attr( {
-					'data-month': month,
-					'data-year': year
-				} );
-
-				$tbody.empty();
-				if ( firstDay !== 0 ) {
-					curDate = lastMonthDate - firstDay + 1;
-					stage = -1;
-				} else {
-					curDate = 1;
-					stage = 0;
-				}
-				rows = ( lastDate <= ( 35 - firstDay ) ) ? 5 : 6;
-				for ( i = 0; i < rows; i++ ) {
-					$tr = $( '<tr></tr>' );
-					for ( j = 0; j < 7; j++ ) {
-						$td = $( '<td><span><button type="button" class="datepicker-date">' + curDate + '</button></span></td>' );
-						if ( stage === -1 ) {
-							$td.addClass( 'last-month' );
-						} else if ( stage === 1 ) {
-							$td.addClass( 'next-month' );
-						}
-
-						curMonth = month + stage;
-						curYear = year;
-						if ( curMonth < 0 ) {
-							curMonth = 11;
-							curYear--;
-						} else if ( curMonth > 11 ) {
-							curMonth = 0;
-							curYear++;
-						}
-
-						$td.attr( {
-							'data-date': curDate,
-							'data-month': curMonth,
-							'data-year': curYear
-						} );
-						if ( curYear === nowYear && curMonth === nowMonth && curDate === nowDate ) {
-							$td.addClass( 'current-day' );
-						} else if ( curYear < nowYear || ( curYear === nowYear && curMonth < nowMonth ) ||
-							( curYear === nowYear && curMonth === nowMonth && curDate < nowDate ) ) {
-							$td.addClass( 'past' );
-							if ( !this.options.allowPastDates ) {
-								$td.addClass( 'restricted' ).attr( 'title', this.restrictedText );
-							}
-						}
-						if ( this.isRestricted( curDate, curMonth, curYear ) ) {
-							$td.addClass( 'restricted' ).attr( 'title', this.restrictedText );
-						}
-						if ( selected && curYear === selected.year && curMonth === selected.month && curDate === selected.date ) {
-							$td.addClass( 'selected' );
-						}
-
-						curDate++;
-						if ( stage === -1 && curDate > lastMonthDate ) {
-							curDate = 1;
-							stage = 0;
-						} else if ( stage === 0 && curDate > lastDate ) {
-							curDate = 1;
-							stage = 1;
-						}
-
-						$tr.append( $td );
-					}
-					$tbody.append( $tr );
-				}
-			},
-
-			renderWheel: function( date ) {
-				var month = date.getMonth();
-				var $monthUl = this.$wheelsMonth.find( 'ul' );
-				var year = date.getFullYear();
-				var $yearUl = this.$wheelsYear.find( 'ul' );
-				var i, $monthSelected, $yearSelected;
-
-				if ( this.sameYearOnly ) {
-					this.$wheelsMonth.addClass( 'full' );
-					this.$wheelsYear.addClass( 'hide' );
-				} else {
-					this.$wheelsMonth.removeClass( 'full' );
-					this.$wheelsYear.removeClass( 'hide' );
-				}
-
-				$monthUl.find( '.selected' ).removeClass( 'selected' );
-				$monthSelected = $monthUl.find( 'li[data-month="' + month + '"]' );
-				$monthSelected.addClass( 'selected' );
-				$monthUl.scrollTop( $monthUl.scrollTop() + ( $monthSelected.position().top - $monthUl.outerHeight() / 2 - $monthSelected.outerHeight( true ) / 2 ) );
-
-				$yearUl.empty();
-				for ( i = ( year - 10 ); i < ( year + 11 ); i++ ) {
-					$yearUl.append( '<li data-year="' + i + '"><button type="button">' + i + '</button></li>' );
-				}
-				$yearSelected = $yearUl.find( 'li[data-year="' + year + '"]' );
-				$yearSelected.addClass( 'selected' );
-				this.artificialScrolling = true;
-				$yearUl.scrollTop( $yearUl.scrollTop() + ( $yearSelected.position().top - $yearUl.outerHeight() / 2 - $yearSelected.outerHeight( true ) / 2 ) );
-				this.artificialScrolling = false;
-				$monthSelected.find( 'button' ).focus();
-			},
-
-			selectClicked: function() {
-				var month = this.$wheelsMonth.find( '.selected' ).attr( 'data-month' );
-				var year = this.$wheelsYear.find( '.selected' ).attr( 'data-year' );
-				this.changeView( 'calendar', new Date( year, month, 1 ) );
-			},
-
-			setCulture: function( cultureCode ) {
-				if ( !cultureCode ) {
-					return false;
-				}
-				if ( this.moment ) {
-					moment.lang( cultureCode );
-				} else {
-					throw MOMENT_NOT_AVAILABLE;
-				}
-			},
-
-			setDate: function( date ) {
-				var parsed = this.parseDate( date );
-				if ( !this.isInvalidDate( parsed ) ) {
-					if ( !this.isRestricted( parsed.getDate(), parsed.getMonth(), parsed.getFullYear() ) ) {
-						this.selectedDate = parsed;
-						this.renderMonth( parsed );
-						this.$input.val( this.formatDate( parsed ) );
-					} else {
-						this.selectedDate = false;
-						this.renderMonth();
-					}
-				} else {
-					this.selectedDate = null;
-					this.renderMonth();
-				}
-				this.inputValue = this.$input.val();
-				return this.selectedDate;
-			},
-
-			setFormat: function( format ) {
-				if ( !format ) {
-					return false;
-				}
-				if ( this.moment ) {
-					this.momentFormat = format;
-				} else {
-					throw MOMENT_NOT_AVAILABLE;
-				}
-			},
-
-			setRestrictedDates: function( restricted ) {
-				var parsed = [];
-				var self = this;
-				var i, l;
-
-				var parseItem = function( val ) {
-					if ( val === -Infinity ) {
-						return {
-							date: -Infinity,
-							month: -Infinity,
-							year: -Infinity
-						};
-					} else if ( val === Infinity ) {
-						return {
-							date: Infinity,
-							month: Infinity,
-							year: Infinity
-						};
-					} else {
-						val = self.parseDate( val );
-						return {
-							date: val.getDate(),
-							month: val.getMonth(),
-							year: val.getFullYear()
-						};
-					}
-				};
-
-				this.restricted = restricted;
-				for ( i = 0, l = restricted.length; i < l; i++ ) {
-					parsed.push( {
-						from: parseItem( restricted[ i ].from ),
-						to: parseItem( restricted[ i ].to )
-					} );
-				}
-				this.restrictedParsed = parsed;
-			},
-
-			titleClicked: function( e ) {
-				this.changeView( 'wheels', new Date( this.$headerTitle.attr( 'data-year' ), this.$headerTitle.attr( 'data-month' ), 1 ) );
-			},
-
-			todayClicked: function( e ) {
-				var date = new Date();
-
-				if ( ( date.getMonth() + '' ) !== this.$headerTitle.attr( 'data-month' ) || ( date.getFullYear() + '' ) !== this.$headerTitle.attr( 'data-year' ) ) {
-					this.renderMonth( date );
-				}
-			},
-
-			yearClicked: function( e ) {
-				this.$wheelsYear.find( '.selected' ).removeClass( 'selected' );
-				$( e.currentTarget ).parent().addClass( 'selected' );
-			}
-		};
-
-
-		// DATEPICKER PLUGIN DEFINITION
-
-		$.fn.datepicker = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.datepicker' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.datepicker', ( data = new Datepicker( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.datepicker.defaults = {
-			allowPastDates: false,
-			date: new Date(),
-			formatDate: null,
-			momentConfig: {
-				culture: 'en',
-				format: 'L' // more formats can be found here http://momentjs.com/docs/#/customization/long-date-formats/.
-			},
-			parseDate: null,
-			restricted: [], //accepts an array of objects formatted as so: { from: {{date}}, to: {{date}} }  (ex: [ { from: new Date('12/11/2014'), to: new Date('03/31/2015') } ])
-			restrictedText: 'Restricted',
-			sameYearOnly: false
-		};
-
-		$.fn.datepicker.Constructor = Datepicker;
-
-		$.fn.datepicker.noConflict = function() {
-			$.fn.datepicker = old;
-			return this;
-		};
-
-		// DATA-API
-
-		$( document ).on( 'mousedown.fu.datepicker.data-api', '[data-initialize=datepicker]', function( e ) {
-			var $control = $( e.target ).closest( '.datepicker' );
-			if ( !$control.data( 'datepicker' ) ) {
-				$control.datepicker( $control.data() );
-			}
-		} );
-
-		//used to prevent the dropdown from closing when clicking within it's bounds
-		$( document ).on( 'click.fu.datepicker.data-api', '.datepicker .dropdown-menu', function( e ) {
-			var $target = $( e.target );
-			if ( !$target.is( '.datepicker-date' ) || $target.closest( '.restricted' ).length ) {
-				e.stopPropagation();
-			}
-		} );
-
-		//used to prevent the dropdown from closing when clicking on the input
-		$( document ).on( 'click.fu.datepicker.data-api', '.datepicker input', function( e ) {
-			e.stopPropagation();
-		} );
-
-		$( function() {
-			$( '[data-initialize=datepicker]' ).each( function() {
-				var $this = $( this );
-				if ( $this.data( 'datepicker' ) ) {
-					return;
-				}
-				$this.datepicker( $this.data() );
-			} );
-		} );
-
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Dropdown Auto Flip
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		$( document.body ).on( 'click.fu.dropdown-autoflip', '[data-toggle=dropdown][data-flip]', function( event ) {
-			if ( $( this ).data().flip === "auto" ) {
-				// have the drop down decide where to place itself
-				_autoFlip( $( this ).next( '.dropdown-menu' ) );
-			}
-		} );
-
-		// For pillbox suggestions dropdown 
-		$( document.body ).on( 'suggested.fu.pillbox', function( event, element ) {
-			_autoFlip( $( element ) );
-			$( element ).parent().addClass( 'open' );
-		} );
-
-		function _autoFlip( menu ) {
-			// hide while the browser thinks
-			$( menu ).css( {
-				visibility: "hidden"
-			} );
-
-			// decide where to put menu
-			if ( dropUpCheck( menu ) ) {
-				menu.parent().addClass( "dropup" );
-			} else {
-				menu.parent().removeClass( "dropup" );
-			}
-
-			// show again
-			$( menu ).css( {
-				visibility: "visible"
-			} );
-		}
-
-		function dropUpCheck( element ) {
-			// caching container
-			var $container = _getContainer( element );
-
-			// building object with measurementsances for later use
-			var measurements = {};
-			measurements.parentHeight = element.parent().outerHeight();
-			measurements.parentOffsetTop = element.parent().offset().top;
-			measurements.dropdownHeight = element.outerHeight();
-			measurements.containerHeight = $container.overflowElement.outerHeight();
-
-			// this needs to be different if the window is the container or another element is
-			measurements.containerOffsetTop = ( !!$container.isWindow ) ? $container.overflowElement.scrollTop() : $container.overflowElement.offset().top;
-
-			// doing the calculations
-			measurements.fromTop = measurements.parentOffsetTop - measurements.containerOffsetTop;
-			measurements.fromBottom = measurements.containerHeight - measurements.parentHeight - ( measurements.parentOffsetTop - measurements.containerOffsetTop );
-
-			// actual determination of where to put menu
-			// false = drop down
-			// true = drop up
-			if ( measurements.dropdownHeight < measurements.fromBottom ) {
-				return false;
-			} else if ( measurements.dropdownHeight < measurements.fromTop ) {
-				return true;
-			} else if ( measurements.dropdownHeight >= measurements.fromTop && measurements.dropdownHeight >= measurements.fromBottom ) {
-				// decide which one is bigger and put it there
-				if ( measurements.fromTop >= measurements.fromBottom ) {
-					return true;
-				} else {
-					return false;
-				}
-			}
-		}
-
-		function _getContainer( element ) {
-			var containerElement = window;
-			var isWindow = true;
-
-			$.each( element.parents(), function( index, value ) {
-				if ( $( value ).css( 'overflow' ) !== 'visible' ) {
-					containerElement = value;
-					isWindow = false;
-					return false;
-				}
-			} );
-
-			return {
-				overflowElement: $( containerElement ),
-				isWindow: isWindow
-			};
-		}
-
-		// register empty plugin
-		$.fn.dropdownautoflip = function() { /* empty */ };
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Loader
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.loader;
-
-		// LOADER CONSTRUCTOR AND PROTOTYPE
-
-		var Loader = function( element, options ) {
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.loader.defaults, options );
-
-			this.begin = ( this.$element.is( '[data-begin]' ) ) ? parseInt( this.$element.attr( 'data-begin' ), 10 ) : 1;
-			this.delay = ( this.$element.is( '[data-delay]' ) ) ? parseFloat( this.$element.attr( 'data-delay' ) ) : 150;
-			this.end = ( this.$element.is( '[data-end]' ) ) ? parseInt( this.$element.attr( 'data-end' ), 10 ) : 8;
-			this.frame = ( this.$element.is( '[data-frame]' ) ) ? parseInt( this.$element.attr( 'data-frame' ), 10 ) : this.begin;
-			this.isIElt9 = false;
-			this.timeout = {};
-
-			var ieVer = this.msieVersion();
-			if ( ieVer !== false && ieVer < 9 ) {
-				this.$element.addClass( 'iefix' );
-				this.isIElt9 = true;
-			}
-
-			this.$element.attr( 'data-frame', this.frame + '' );
-			this.play();
-		};
-
-		Loader.prototype = {
-
-			constructor: Loader,
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings
-				// [none]
-				// empty elements to return to original markup
-				// [none]
-				// returns string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			ieRepaint: function() {
-				if ( this.isIElt9 ) {
-					this.$element.addClass( 'iefix_repaint' ).removeClass( 'iefix_repaint' );
-				}
-			},
-
-			msieVersion: function() {
-				var ua = window.navigator.userAgent;
-				var msie = ua.indexOf( 'MSIE ' );
-				if ( msie > 0 ) {
-					return parseInt( ua.substring( msie + 5, ua.indexOf( ".", msie ) ), 10 );
-				} else {
-					return false;
-				}
-			},
-
-			next: function() {
-				this.frame++;
-				if ( this.frame > this.end ) {
-					this.frame = this.begin;
-				}
-				this.$element.attr( 'data-frame', this.frame + '' );
-				this.ieRepaint();
-			},
-
-			pause: function() {
-				clearTimeout( this.timeout );
-			},
-
-			play: function() {
-				var self = this;
-				clearTimeout( this.timeout );
-				this.timeout = setTimeout( function() {
-					self.next();
-					self.play();
-				}, this.delay );
-			},
-
-			previous: function() {
-				this.frame--;
-				if ( this.frame < this.begin ) {
-					this.frame = this.end;
-				}
-				this.$element.attr( 'data-frame', this.frame + '' );
-				this.ieRepaint();
-			},
-
-			reset: function() {
-				this.frame = this.begin;
-				this.$element.attr( 'data-frame', this.frame + '' );
-				this.ieRepaint();
-			}
-
-		};
-
-		// LOADER PLUGIN DEFINITION
-
-		$.fn.loader = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.loader' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.loader', ( data = new Loader( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.loader.defaults = {};
-
-		$.fn.loader.Constructor = Loader;
-
-		$.fn.loader.noConflict = function() {
-			$.fn.loader = old;
-			return this;
-		};
-
-		// INIT LOADER ON DOMCONTENTLOADED
-
-		$( function() {
-			$( '[data-initialize=loader]' ).each( function() {
-				var $this = $( this );
-				if ( !$this.data( 'fu.loader' ) ) {
-					$this.loader( $this.data() );
-				}
-			} );
-		} );
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Placard
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.placard;
-
-		// PLACARD CONSTRUCTOR AND PROTOTYPE
-
-		var Placard = function( element, options ) {
-			var self = this;
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.placard.defaults, options );
-
-			this.$accept = this.$element.find( '.placard-accept' );
-			this.$cancel = this.$element.find( '.placard-cancel' );
-			this.$field = this.$element.find( '.placard-field' );
-			this.$footer = this.$element.find( '.placard-footer' );
-			this.$header = this.$element.find( '.placard-header' );
-			this.$popup = this.$element.find( '.placard-popup' );
-
-			this.actualValue = null;
-			this.clickStamp = '_';
-			this.previousValue = '';
-			if ( this.options.revertOnCancel === -1 ) {
-				this.options.revertOnCancel = ( this.$accept.length > 0 ) ? true : false;
-			}
-
-			this.$field.on( 'focus.fu.placard', $.proxy( this.show, this ) );
-			this.$accept.on( 'click.fu.placard', $.proxy( this.complete, this, 'accept' ) );
-			this.$cancel.on( 'click.fu.placard', function( e ) {
-				e.preventDefault();
-				self.complete( 'cancel' );
-			} );
-
-			this.ellipsis();
-		};
-
-		Placard.prototype = {
-			constructor: Placard,
-
-			complete: function( action ) {
-				var func = this.options[ 'on' + action[ 0 ].toUpperCase() + action.substring( 1 ) ];
-				var obj = {
-					previousValue: this.previousValue,
-					value: this.$field.val()
-				};
-				if ( func ) {
-					func( obj );
-					this.$element.trigger( action, obj );
-				} else {
-					if ( action === 'cancel' && this.options.revertOnCancel ) {
-						this.$field.val( this.previousValue );
-					}
-					this.$element.trigger( action, obj );
-					this.hide();
-				}
-			},
-
-			destroy: function() {
-				this.$element.remove();
-				// remove any external bindings
-				$( document ).off( 'click.fu.placard.externalClick.' + this.clickStamp );
-				// set input value attrbute
-				this.$element.find( 'input' ).each( function() {
-					$( this ).attr( 'value', $( this ).val() );
-				} );
-				// empty elements to return to original markup
-				// [none]
-				// return string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			disable: function() {
-				this.$element.addClass( 'disabled' );
-				this.$field.attr( 'disabled', 'disabled' );
-				this.hide();
-			},
-
-			ellipsis: function() {
-				var field, i, str;
-				if ( this.$element.attr( 'data-ellipsis' ) === 'true' ) {
-					field = this.$field.get( 0 );
-					if ( this.$field.is( 'input' ) ) {
-						field.scrollLeft = 0;
-					} else {
-						field.scrollTop = 0;
-						if ( field.clientHeight < field.scrollHeight ) {
-							this.actualValue = this.$field.val();
-							this.$field.val( '' );
-							str = '';
-							i = 0;
-							while ( field.clientHeight >= field.scrollHeight ) {
-								str += this.actualValue[ i ];
-								this.$field.val( str + '...' );
-								i++;
-							}
-							str = ( str.length > 0 ) ? str.substring( 0, str.length - 1 ) : '';
-							this.$field.val( str + '...' );
-						}
-					}
-				}
-			},
-
-			enable: function() {
-				this.$element.removeClass( 'disabled' );
-				this.$field.removeAttr( 'disabled' );
-			},
-
-			externalClickListener: function( e, force ) {
-				if ( force === true || this.isExternalClick( e ) ) {
-					this.complete( this.options.externalClickAction );
-				}
-			},
-
-			getValue: function() {
-				if ( this.actualValue !== null ) {
-					return this.actualValue;
-				} else {
-					return this.$field.val();
-				}
-			},
-
-			hide: function() {
-				if ( !this.$element.hasClass( 'showing' ) ) {
-					return;
-				}
-				this.$element.removeClass( 'showing' );
-				this.ellipsis();
-				$( document ).off( 'click.fu.placard.externalClick.' + this.clickStamp );
-				this.$element.trigger( 'hidden.fu.placard' );
-			},
-
-			isExternalClick: function( e ) {
-				var el = this.$element.get( 0 );
-				var exceptions = this.options.externalClickExceptions || [];
-				var $originEl = $( e.target );
-				var i, l;
-
-				if ( e.target === el || $originEl.parents( '.placard:first' ).get( 0 ) === el ) {
-					return false;
-				} else {
-					for ( i = 0, l = exceptions.length; i < l; i++ ) {
-						if ( $originEl.is( exceptions[ i ] ) || $originEl.parents( exceptions[ i ] ).length > 0 ) {
-							return false;
-						}
-					}
-				}
-				return true;
-			},
-
-			setValue: function( val ) {
-				this.$field.val( val );
-				if ( !this.$element.hasClass( 'showing' ) ) {
-					this.ellipsis();
-				}
-			},
-
-			show: function() {
-				var other;
-
-				if ( this.$element.hasClass( 'showing' ) ) {
-					return;
-				}
-				other = $( document ).find( '.placard.showing' );
-				if ( other.length > 0 ) {
-					if ( other.data( 'fu.placard' ) && other.data( 'fu.placard' ).options.explicit ) {
-						return;
-					}
-					other.placard( 'externalClickListener', {}, true );
-				}
-				this.previousValue = this.$field.val();
-
-				this.$element.addClass( 'showing' );
-				if ( this.actualValue !== null ) {
-					this.$field.val( this.actualValue );
-					this.actualValue = null;
-				}
-				if ( this.$header.length > 0 ) {
-					this.$popup.css( 'top', '-' + this.$header.outerHeight( true ) + 'px' );
-				}
-				if ( this.$footer.length > 0 ) {
-					this.$popup.css( 'bottom', '-' + this.$footer.outerHeight( true ) + 'px' );
-				}
-
-				this.$element.trigger( 'shown.fu.placard' );
-				this.clickStamp = new Date().getTime() + ( Math.floor( Math.random() * 100 ) + 1 );
-				if ( !this.options.explicit ) {
-					$( document ).on( 'click.fu.placard.externalClick.' + this.clickStamp, $.proxy( this.externalClickListener, this ) );
-				}
-			}
-		};
-
-		// PLACARD PLUGIN DEFINITION
-
-		$.fn.placard = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.placard' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.placard', ( data = new Placard( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.placard.defaults = {
-			onAccept: undefined,
-			onCancel: undefined,
-			externalClickAction: 'cancel',
-			externalClickExceptions: [],
-			explicit: false,
-			revertOnCancel: -1 //negative 1 will check for an '.placard-accept' button. Also can be set to true or false
-		};
-
-		$.fn.placard.Constructor = Placard;
-
-		$.fn.placard.noConflict = function() {
-			$.fn.placard = old;
-			return this;
-		};
-
-		// DATA-API
-
-		$( document ).on( 'focus.fu.placard.data-api', '[data-initialize=placard]', function( e ) {
-			var $control = $( e.target ).closest( '.placard' );
-			if ( !$control.data( 'fu.placard' ) ) {
-				$control.placard( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=placard]' ).each( function() {
-				var $this = $( this );
-				if ( $this.data( 'fu.placard' ) ) return;
-				$this.placard( $this.data() );
-			} );
-		} );
-
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Radio
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.radio;
-
-		// RADIO CONSTRUCTOR AND PROTOTYPE
-
-		var Radio = function( element, options ) {
-			this.options = $.extend( {}, $.fn.radio.defaults, options );
-
-			// cache elements
-			this.$radio = $( element ).is( 'input[type="radio"]' ) ? $( element ) : $( element ).find( 'input[type="radio"]:first' );
-			this.$label = this.$radio.parent();
-			this.groupName = this.$radio.attr( 'name' );
-			this.$parent = this.$label.parent( '.radio' );
-			this.$toggleContainer = null;
-
-			if ( this.$parent.length === 0 ) {
-				this.$parent = null;
-			}
-
-			var toggleSelector = this.$radio.attr( 'data-toggle' );
-			if ( toggleSelector ) {
-				this.$toggleContainer = $( toggleSelector );
-			}
-
-			// set default state
-			this.setState( this.$radio );
-
-			// handle events
-			this.$radio.on( 'change.fu.radio', $.proxy( this.itemchecked, this ) );
-		};
-
-		Radio.prototype = {
-
-			constructor: Radio,
-
-			destroy: function() {
-				this.$parent.remove();
-				// remove any external bindings
-				// [none]
-				// empty elements to return to original markup
-				// [none]
-				// return string of markup
-				return this.$parent[ 0 ].outerHTML;
-			},
-
-			setState: function( $radio ) {
-				$radio = $radio || this.$radio;
-
-				var checked = $radio.is( ':checked' );
-				var disabled = !!$radio.prop( 'disabled' );
-
-				this.$label.removeClass( 'checked' );
-				if ( this.$parent ) {
-					this.$parent.removeClass( 'checked disabled' );
-				}
-
-				// set state of radio
-				if ( checked === true ) {
-					this.$label.addClass( 'checked' );
-					if ( this.$parent ) {
-						this.$parent.addClass( 'checked' );
-					}
-				}
-				if ( disabled === true ) {
-					this.$label.addClass( 'disabled' );
-					if ( this.$parent ) {
-						this.$parent.addClass( 'disabled' );
-					}
-				}
-
-				//toggle container
-				this.toggleContainer();
-			},
-
-			resetGroup: function() {
-				var group = $( 'input[name="' + this.groupName + '"]' );
-
-				group.each( function() {
-					var lbl = $( this ).parent( 'label' );
-					lbl.removeClass( 'checked' );
-					lbl.parent( '.radio' ).removeClass( 'checked' );
-				} );
-			},
-
-			enable: function() {
-				this.$radio.attr( 'disabled', false );
-				this.$label.removeClass( 'disabled' );
-				if ( this.$parent ) {
-					this.$parent.removeClass( 'disabled' );
-				}
-			},
-
-			disable: function() {
-				this.$radio.attr( 'disabled', true );
-				this.$label.addClass( 'disabled' );
-				if ( this.$parent ) {
-					this.$parent.addClass( 'disabled' );
-				}
-			},
-
-			itemchecked: function( e ) {
-				var radio = $( e.target );
-
-				this.resetGroup();
-				this.setState( radio );
-			},
-
-			check: function() {
-				this.resetGroup();
-				this.$radio.prop( 'checked', true );
-				this.setState( this.$radio );
-			},
-
-			toggleContainer: function() {
-				var group;
-				if ( this.$toggleContainer ) {
-					// show corresponding container for currently selected radio
-					if ( this.isChecked() ) {
-						// hide containers for each item in group
-						group = $( 'input[name="' + this.groupName + '"]' );
-						group.each( function() {
-							var selector = $( this ).attr( 'data-toggle' );
-							$( selector ).addClass( 'hide' );
-							$( selector ).attr( 'aria-hidden', 'true' );
-						} );
-						this.$toggleContainer.removeClass( 'hide' );
-						this.$toggleContainer.attr( 'aria-hidden', 'false' );
-					} else {
-						this.$toggleContainer.addClass( 'hide' );
-						this.$toggleContainer.attr( 'aria-hidden', 'true' );
-					}
-
-				}
-			},
-
-			uncheck: function() {
-				this.$radio.prop( 'checked', false );
-				this.setState( this.$radio );
-			},
-
-			isChecked: function() {
-				return this.$radio.is( ':checked' );
-			}
-		};
-
-
-		// RADIO PLUGIN DEFINITION
-
-		$.fn.radio = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.radio' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.radio', ( data = new Radio( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.radio.defaults = {};
-
-		$.fn.radio.Constructor = Radio;
-
-		$.fn.radio.noConflict = function() {
-			$.fn.radio = old;
-			return this;
-		};
-
-
-		// DATA-API
-
-		$( document ).on( 'mouseover.fu.checkbox.data-api', '[data-initialize=radio]', function( e ) {
-			var $control = $( e.target ).closest( '.radio' ).find( '[type=radio]' );
-			if ( !$control.data( 'fu.radio' ) ) {
-				$control.radio( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=radio] [type=radio]' ).each( function() {
-				var $this = $( this );
-				if ( $this.data( 'fu.radio' ) ) return;
-				$this.radio( $this.data() );
-			} );
-		} );
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Search
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.search;
-
-		// SEARCH CONSTRUCTOR AND PROTOTYPE
-
-		var Search = function( element, options ) {
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.search.defaults, options );
-
-			this.$button = this.$element.find( 'button' );
-			this.$input = this.$element.find( 'input' );
-			this.$icon = this.$element.find( '.glyphicon' );
-
-			this.$button.on( 'click.fu.search', $.proxy( this.buttonclicked, this ) );
-			this.$input.on( 'keydown.fu.search', $.proxy( this.keypress, this ) );
-			this.$input.on( 'keyup.fu.search', $.proxy( this.keypressed, this ) );
-
-			this.activeSearch = '';
-		};
-
-		Search.prototype = {
-
-			constructor: Search,
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings
-				// [none]
-				// set input value attrbute
-				this.$element.find( 'input' ).each( function() {
-					$( this ).attr( 'value', $( this ).val() );
-				} );
-				// empty elements to return to original markup
-				// [none]
-				// returns string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			search: function( searchText ) {
-				if ( this.$icon.hasClass( 'glyphicon' ) ) {
-					this.$icon.removeClass( 'glyphicon-search' ).addClass( 'glyphicon-remove' );
-				}
-				this.activeSearch = searchText;
-				this.$element.addClass( 'searched' );
-				this.$element.trigger( 'searched.fu.search', searchText );
-			},
-
-			clear: function() {
-				if ( this.$icon.hasClass( 'glyphicon' ) ) {
-					this.$icon.removeClass( 'glyphicon-remove' ).addClass( 'glyphicon-search' );
-				}
-				this.activeSearch = '';
-				this.$input.val( '' );
-				this.$element.removeClass( 'searched' );
-				this.$element.trigger( 'cleared.fu.search' );
-			},
-
-			action: function() {
-				var val = this.$input.val();
-				var inputEmptyOrUnchanged = val === '' || val === this.activeSearch;
-
-				if ( this.activeSearch && inputEmptyOrUnchanged ) {
-					this.clear();
-				} else if ( val ) {
-					this.search( val );
-				}
-			},
-
-			buttonclicked: function( e ) {
-				e.preventDefault();
-				if ( $( e.currentTarget ).is( '.disabled, :disabled' ) ) return;
-				this.action();
-			},
-
-			keypress: function( e ) {
-				if ( e.which === 13 ) {
-					e.preventDefault();
-				}
-			},
-
-			keypressed: function( e ) {
-				var val, inputPresentAndUnchanged;
-
-				if ( e.which === 13 ) {
-					e.preventDefault();
-					this.action();
-				} else {
-					val = this.$input.val();
-					inputPresentAndUnchanged = val && ( val === this.activeSearch );
-					this.$icon.attr( 'class', inputPresentAndUnchanged ? 'glyphicon glyphicon-remove' : 'glyphicon glyphicon-search' );
-				}
-			},
-
-			disable: function() {
-				this.$element.addClass( 'disabled' );
-				this.$input.attr( 'disabled', 'disabled' );
-				this.$button.addClass( 'disabled' );
-			},
-
-			enable: function() {
-				this.$element.removeClass( 'disabled' );
-				this.$input.removeAttr( 'disabled' );
-				this.$button.removeClass( 'disabled' );
-			}
-
-		};
-
-
-		// SEARCH PLUGIN DEFINITION
-
-		$.fn.search = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.search' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.search', ( data = new Search( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.search.defaults = {};
-
-		$.fn.search.Constructor = Search;
-
-		$.fn.search.noConflict = function() {
-			$.fn.search = old;
-			return this;
-		};
-
-
-		// DATA-API
-
-		$( document ).on( 'mousedown.fu.search.data-api', '[data-initialize=search]', function( e ) {
-			var $control = $( e.target ).closest( '.search' );
-			if ( !$control.data( 'fu.search' ) ) {
-				$control.search( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=search]' ).each( function() {
-				var $this = $( this );
-				if ( $this.data( 'fu.search' ) ) return;
-				$this.search( $this.data() );
-			} );
-		} );
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Button Dropdown
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.selectlist;
-		// SELECT CONSTRUCTOR AND PROTOTYPE
-
-		var Selectlist = function( element, options ) {
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.selectlist.defaults, options );
-
-			this.$button = this.$element.find( '.btn.dropdown-toggle' );
-			this.$hiddenField = this.$element.find( '.hidden-field' );
-			this.$label = this.$element.find( '.selected-label' );
-
-			this.$element.on( 'click.fu.selectlist', '.dropdown-menu a', $.proxy( this.itemClicked, this ) );
-			this.setDefaultSelection();
-
-			if ( options.resize === 'auto' ) {
-				this.resize();
-			}
-		};
-
-		Selectlist.prototype = {
-
-			constructor: Selectlist,
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings
-				// [none]
-				// empty elements to return to original markup
-				// [none]
-				// returns string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			doSelect: function( $item ) {
-				var $selectedItem;
-				this.$selectedItem = $selectedItem = $item;
-
-				this.$hiddenField.val( this.$selectedItem.attr( 'data-value' ) );
-				this.$label.html( $( this.$selectedItem.children()[ 0 ] ).html() );
-
-				// clear and set selected item to allow declarative init state
-				// unlike other controls, selectlist's value is stored internal, not in an input
-				this.$element.find( 'li' ).each( function() {
-					if ( $selectedItem.is( $( this ) ) ) {
-						$( this ).attr( 'data-selected', true );
-					} else {
-						$( this ).removeData( 'selected' ).removeAttr( 'data-selected' );
-					}
-				} );
-
-			},
-
-			itemClicked: function( e ) {
-				this.$element.trigger( 'clicked.fu.selectlist', this.$selectedItem );
-
-				e.preventDefault();
-
-				// is clicked element different from currently selected element?
-				if ( !( $( e.target ).parent().is( this.$selectedItem ) ) ) {
-					this.itemChanged( e );
-				}
-
-				// return focus to control after selecting an option
-				this.$element.find( '.dropdown-toggle' ).focus();
-
-			},
-
-			itemChanged: function( e ) {
-
-				this.doSelect( $( e.target ).parent() );
-
-				// pass object including text and any data-attributes
-				// to onchange event
-				var data = this.selectedItem();
-				// trigger changed event
-				this.$element.trigger( 'changed.fu.selectlist', data );
-			},
-
-			resize: function() {
-				var newWidth = 0;
-				var sizer = $( '<div/>' ).addClass( 'selectlist-sizer' );
-				var width = 0;
-
-				if ( Boolean( $( document ).find( 'html' ).hasClass( 'fuelux' ) ) ) {
-					// default behavior for fuel ux setup. means fuelux was a class on the html tag
-					$( document.body ).append( sizer );
-				} else {
-					// fuelux is not a class on the html tag. So we'll look for the first one we find so the correct styles get applied to the sizer
-					$( '.fuelux:first' ).append( sizer );
-				}
-
-				// iterate through each item to find longest string
-				this.$element.find( 'a' ).each( function() {
-					sizer.text( $( this ).text() );
-					newWidth = sizer.outerWidth();
-					if ( newWidth > width ) {
-						width = newWidth;
-					}
-				} );
-
-				sizer.remove();
-
-				//TODO: betting this is somewhat off with box-sizing: border-box
-				this.$label.width( width );
-			},
-
-			selectedItem: function() {
-				var txt = this.$selectedItem.text();
-				return $.extend( {
-					text: txt
-				}, this.$selectedItem.data() );
-			},
-
-			selectByText: function( text ) {
-				var $item = $( [] );
-				this.$element.find( 'li' ).each( function() {
-					if ( ( this.textContent || this.innerText || $( this ).text() || '' ).toLowerCase() === ( text || '' ).toLowerCase() ) {
-						$item = $( this );
-						return false;
-					}
-				} );
-				this.doSelect( $item );
-			},
-
-			selectByValue: function( value ) {
-				var selector = 'li[data-value="' + value + '"]';
-				this.selectBySelector( selector );
-			},
-
-			selectByIndex: function( index ) {
-				// zero-based index
-				var selector = 'li:eq(' + index + ')';
-				this.selectBySelector( selector );
-			},
-
-			selectBySelector: function( selector ) {
-				var $item = this.$element.find( selector );
-				this.doSelect( $item );
-			},
-
-			setDefaultSelection: function() {
-				var $item = this.$element.find( 'li[data-selected=true]' ).eq( 0 );
-
-				if ( $item.length === 0 ) {
-					$item = this.$element.find( 'li' ).has( 'a' ).eq( 0 );
-				}
-
-				this.doSelect( $item );
-			},
-
-			enable: function() {
-				this.$element.removeClass( 'disabled' );
-				this.$button.removeClass( 'disabled' );
-			},
-
-			disable: function() {
-				this.$element.addClass( 'disabled' );
-				this.$button.addClass( 'disabled' );
-			}
-
-		};
-
-
-		// SELECT PLUGIN DEFINITION
-
-		$.fn.selectlist = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.selectlist' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.selectlist', ( data = new Selectlist( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.selectlist.defaults = {};
-
-		$.fn.selectlist.Constructor = Selectlist;
-
-		$.fn.selectlist.noConflict = function() {
-			$.fn.selectlist = old;
-			return this;
-		};
-
-
-		// DATA-API
-
-		$( document ).on( 'mousedown.fu.selectlist.data-api', '[data-initialize=selectlist]', function( e ) {
-			var $control = $( e.target ).closest( '.selectlist' );
-			if ( !$control.data( 'fu.selectlist' ) ) {
-				$control.selectlist( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=selectlist]' ).each( function() {
-				var $this = $( this );
-				if ( !$this.data( 'fu.selectlist' ) ) {
-					$this.selectlist( $this.data() );
-				}
-			} );
-		} );
-
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Spinbox
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.spinbox;
-
-		// SPINBOX CONSTRUCTOR AND PROTOTYPE
-
-		var Spinbox = function( element, options ) {
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.spinbox.defaults, options );
-			this.$input = this.$element.find( '.spinbox-input' );
-			this.$element.on( 'focusin.fu.spinbox', this.$input, $.proxy( this.changeFlag, this ) );
-			this.$element.on( 'focusout.fu.spinbox', this.$input, $.proxy( this.change, this ) );
-			this.$element.on( 'keydown.fu.spinbox', this.$input, $.proxy( this.keydown, this ) );
-			this.$element.on( 'keyup.fu.spinbox', this.$input, $.proxy( this.keyup, this ) );
-
-			this.bindMousewheelListeners();
-			this.mousewheelTimeout = {};
-
-			if ( this.options.hold ) {
-				this.$element.on( 'mousedown.fu.spinbox', '.spinbox-up', $.proxy( function() {
-					this.startSpin( true );
-				}, this ) );
-				this.$element.on( 'mouseup.fu.spinbox', '.spinbox-up, .spinbox-down', $.proxy( this.stopSpin, this ) );
-				this.$element.on( 'mouseout.fu.spinbox', '.spinbox-up, .spinbox-down', $.proxy( this.stopSpin, this ) );
-				this.$element.on( 'mousedown.fu.spinbox', '.spinbox-down', $.proxy( function() {
-					this.startSpin( false );
-				}, this ) );
-			} else {
-				this.$element.on( 'click.fu.spinbox', '.spinbox-up', $.proxy( function() {
-					this.step( true );
-				}, this ) );
-				this.$element.on( 'click.fu.spinbox', '.spinbox-down', $.proxy( function() {
-					this.step( false );
-				}, this ) );
-			}
-
-			this.switches = {
-				count: 1,
-				enabled: true
-			};
-
-			if ( this.options.speed === 'medium' ) {
-				this.switches.speed = 300;
-			} else if ( this.options.speed === 'fast' ) {
-				this.switches.speed = 100;
-			} else {
-				this.switches.speed = 500;
-			}
-
-			this.lastValue = this.options.value;
-
-			this.render();
-
-			if ( this.options.disabled ) {
-				this.disable();
-			}
-		};
-
-		Spinbox.prototype = {
-			constructor: Spinbox,
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings
-				// [none]
-				// set input value attrbute
-				this.$element.find( 'input' ).each( function() {
-					$( this ).attr( 'value', $( this ).val() );
-				} );
-				// empty elements to return to original markup
-				// [none]
-				// returns string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			render: function() {
-				var inputValue = this.parseInput( this.$input.val() );
-				var maxUnitLength = '';
-
-				// if input is empty and option value is default, 0
-				if ( inputValue !== '' && this.options.value === 0 ) {
-					this.value( inputValue );
-				} else {
-					this.output( this.options.value );
-				}
-
-				if ( this.options.units.length ) {
-					$.each( this.options.units, function( index, value ) {
-						if ( value.length > maxUnitLength.length ) {
-							maxUnitLength = value;
-						}
-					} );
-				}
-
-			},
-
-			output: function( value, updateField ) {
-				value = ( value + '' ).split( '.' ).join( this.options.decimalMark );
-				updateField = ( updateField || true );
-				if ( updateField ) {
-					this.$input.val( value );
-				}
-
-				return value;
-			},
-
-			parseInput: function( value ) {
-				value = ( value + '' ).split( this.options.decimalMark ).join( '.' );
-
-				return value;
-			},
-
-			change: function() {
-				var newVal = this.parseInput( this.$input.val() ) || '';
-
-				if ( this.options.units.length || this.options.decimalMark !== '.' ) {
-					newVal = this.parseValueWithUnit( newVal );
-				} else if ( newVal / 1 ) {
-					newVal = this.options.value = this.checkMaxMin( newVal / 1 );
-				} else {
-					newVal = this.checkMaxMin( newVal.replace( /[^0-9.-]/g, '' ) || '' );
-					this.options.value = newVal / 1;
-				}
-				this.output( newVal );
-
-				this.changeFlag = false;
-				this.triggerChangedEvent();
-			},
-
-			changeFlag: function() {
-				this.changeFlag = true;
-			},
-
-			stopSpin: function() {
-				if ( this.switches.timeout !== undefined ) {
-					clearTimeout( this.switches.timeout );
-					this.switches.count = 1;
-					this.triggerChangedEvent();
-				}
-			},
-
-			triggerChangedEvent: function() {
-				var currentValue = this.value();
-				if ( currentValue === this.lastValue ) return;
-
-				this.lastValue = currentValue;
-
-				// Primary changed event
-				this.$element.trigger( 'changed.fu.spinbox', this.output( currentValue, false ) ); // no DOM update
-			},
-
-			startSpin: function( type ) {
-
-				if ( !this.options.disabled ) {
-					var divisor = this.switches.count;
-
-					if ( divisor === 1 ) {
-						this.step( type );
-						divisor = 1;
-					} else if ( divisor < 3 ) {
-						divisor = 1.5;
-					} else if ( divisor < 8 ) {
-						divisor = 2.5;
-					} else {
-						divisor = 4;
-					}
-
-					this.switches.timeout = setTimeout( $.proxy( function() {
-						this.iterate( type );
-					}, this ), this.switches.speed / divisor );
-					this.switches.count++;
-				}
-			},
-
-			iterate: function( type ) {
-				this.step( type );
-				this.startSpin( type );
-			},
-
-			step: function( isIncrease ) {
-				// isIncrease: true is up, false is down
-
-				var digits, multiple, currentValue, limitValue;
-
-				// trigger change event
-				if ( this.changeFlag ) {
-					this.change();
-				}
-
-				// get current value and min/max options
-				currentValue = this.options.value;
-				limitValue = isIncrease ? this.options.max : this.options.min;
-
-				if ( ( isIncrease ? currentValue < limitValue : currentValue > limitValue ) ) {
-					var newVal = currentValue + ( isIncrease ? 1 : -1 ) * this.options.step;
-
-					// raise to power of 10 x number of decimal places, then round
-					if ( this.options.step % 1 !== 0 ) {
-						digits = ( this.options.step + '' ).split( '.' )[ 1 ].length;
-						multiple = Math.pow( 10, digits );
-						newVal = Math.round( newVal * multiple ) / multiple;
-					}
-
-					// if outside limits, set to limit value
-					if ( isIncrease ? newVal > limitValue : newVal < limitValue ) {
-						this.value( limitValue );
-					} else {
-						this.value( newVal );
-					}
-
-				} else if ( this.options.cycle ) {
-					var cycleVal = isIncrease ? this.options.min : this.options.max;
-					this.value( cycleVal );
-				}
-			},
-
-			value: function( value ) {
-
-				if ( value || value === 0 ) {
-					if ( this.options.units.length || this.options.decimalMark !== '.' ) {
-						this.output( this.parseValueWithUnit( value + ( this.unit || '' ) ) );
-						return this;
-
-					} else if ( !isNaN( parseFloat( value ) ) && isFinite( value ) ) {
-						this.options.value = value / 1;
-						this.output( value + ( this.unit ? this.unit : '' ) );
-						return this;
-
-					}
-				} else {
-					if ( this.changeFlag ) {
-						this.change();
-					}
-
-					if ( this.unit ) {
-						return this.options.value + this.unit;
-					} else {
-						return this.output( this.options.value, false ); // no DOM update
-					}
-				}
-			},
-
-			isUnitLegal: function( unit ) {
-				var legalUnit;
-
-				$.each( this.options.units, function( index, value ) {
-					if ( value.toLowerCase() === unit.toLowerCase() ) {
-						legalUnit = unit.toLowerCase();
-						return false;
-					}
-				} );
-
-				return legalUnit;
-			},
-
-			// strips units and add them back
-			parseValueWithUnit: function( value ) {
-				var unit = value.replace( /[^a-zA-Z]/g, '' );
-				var number = value.replace( /[^0-9.-]/g, '' );
-
-				if ( unit ) {
-					unit = this.isUnitLegal( unit );
-				}
-
-				this.options.value = this.checkMaxMin( number / 1 );
-				this.unit = unit || undefined;
-				return this.options.value + ( unit || '' );
-			},
-
-			checkMaxMin: function( value ) {
-				// if unreadable
-				if ( isNaN( parseFloat( value ) ) ) {
-					return value;
-				}
-				// if not within range return the limit
-				if ( !( value <= this.options.max && value >= this.options.min ) ) {
-					value = value >= this.options.max ? this.options.max : this.options.min;
-				}
-				return value;
-			},
-
-			disable: function() {
-				this.options.disabled = true;
-				this.$element.addClass( 'disabled' );
-				this.$input.attr( 'disabled', '' );
-				this.$element.find( 'button' ).addClass( 'disabled' );
-			},
-
-			enable: function() {
-				this.options.disabled = false;
-				this.$element.removeClass( 'disabled' );
-				this.$input.removeAttr( "disabled" );
-				this.$element.find( 'button' ).removeClass( 'disabled' );
-			},
-
-			keydown: function( event ) {
-				var keyCode = event.keyCode;
-				if ( keyCode === 38 ) {
-					this.step( true );
-				} else if ( keyCode === 40 ) {
-					this.step( false );
-				}
-			},
-
-			keyup: function( event ) {
-				var keyCode = event.keyCode;
-
-				if ( keyCode === 38 || keyCode === 40 ) {
-					this.triggerChangedEvent();
-				}
-			},
-
-			bindMousewheelListeners: function() {
-				var inputEl = this.$input.get( 0 );
-				if ( inputEl.addEventListener ) {
-					//IE 9, Chrome, Safari, Opera
-					inputEl.addEventListener( 'mousewheel', $.proxy( this.mousewheelHandler, this ), false );
-					// Firefox
-					inputEl.addEventListener( 'DOMMouseScroll', $.proxy( this.mousewheelHandler, this ), false );
-				} else {
-					// IE <9
-					inputEl.attachEvent( 'onmousewheel', $.proxy( this.mousewheelHandler, this ) );
-				}
-			},
-
-			mousewheelHandler: function( event ) {
-				var e = window.event || event; // old IE support
-				var delta = Math.max( -1, Math.min( 1, ( e.wheelDelta || -e.detail ) ) );
-				var self = this;
-
-				clearTimeout( this.mousewheelTimeout );
-				this.mousewheelTimeout = setTimeout( function() {
-					self.triggerChangedEvent();
-				}, 300 );
-
-				if ( delta < 0 ) {
-					this.step( true );
-				} else {
-					this.step( false );
-				}
-
-				if ( e.preventDefault ) {
-					e.preventDefault();
-				} else {
-					e.returnValue = false;
-				}
-				return false;
-			}
-		};
-
-
-		// SPINBOX PLUGIN DEFINITION
-
-		$.fn.spinbox = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.spinbox' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) {
-					$this.data( 'fu.spinbox', ( data = new Spinbox( this, options ) ) );
-				}
-				if ( typeof option === 'string' ) {
-					methodReturn = data[ option ].apply( data, args );
-				}
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		// value needs to be 0 for this.render();
-		$.fn.spinbox.defaults = {
-			value: 0,
-			min: 0,
-			max: 999,
-			step: 1,
-			hold: true,
-			speed: 'medium',
-			disabled: false,
-			cycle: false,
-			units: [],
-			decimalMark: '.'
-		};
-
-		$.fn.spinbox.Constructor = Spinbox;
-
-		$.fn.spinbox.noConflict = function() {
-			$.fn.spinbox = old;
-			return this;
-		};
-
-
-		// DATA-API
-
-		$( document ).on( 'mousedown.fu.spinbox.data-api', '[data-initialize=spinbox]', function( e ) {
-			var $control = $( e.target ).closest( '.spinbox' );
-			if ( !$control.data( 'fu.spinbox' ) ) {
-				$control.spinbox( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=spinbox]' ).each( function() {
-				var $this = $( this );
-				if ( !$this.data( 'fu.spinbox' ) ) {
-					$this.spinbox( $this.data() );
-				}
-			} );
-		} );
-
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Tree
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.tree;
-
-		// TREE CONSTRUCTOR AND PROTOTYPE
-
-		var Tree = function( element, options ) {
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.tree.defaults, options );
-
-			this.$element.on( 'click.fu.tree', '.tree-item', $.proxy( function( ev ) {
-				this.selectItem( ev.currentTarget );
-			}, this ) );
-			this.$element.on( 'click.fu.tree', '.tree-branch-name', $.proxy( function( ev ) {
-				this.openFolder( ev.currentTarget );
-			}, this ) );
-
-			if ( this.options.folderSelect ) {
-				this.$element.off( 'click.fu.tree', '.tree-branch-name' );
-				this.$element.on( 'click.fu.tree', '.icon-caret', $.proxy( function( ev ) {
-					this.openFolder( $( ev.currentTarget ).parent() );
-				}, this ) );
-				this.$element.on( 'click.fu.tree', '.tree-branch-name', $.proxy( function( ev ) {
-					this.selectFolder( $( ev.currentTarget ) );
-				}, this ) );
-			}
-
-			this.render();
-		};
-
-		Tree.prototype = {
-			constructor: Tree,
-
-			destroy: function() {
-				// any external bindings [none]
-				// empty elements to return to original markup
-				this.$element.find( "li:not([data-template])" ).remove();
-
-				this.$element.remove();
-				// returns string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			render: function() {
-				this.populate( this.$element );
-			},
-
-			populate: function( $el ) {
-				var self = this;
-				var $parent = ( $el.hasClass( 'tree' ) ) ? $el : $el.parent();
-				var loader = $parent.find( '.tree-loader:eq(0)' );
-
-				loader.removeClass( 'hide' );
-				this.options.dataSource( this.options.folderSelect ? $parent.data() : $el.data(), function( items ) {
-					loader.addClass( 'hide' );
-
-					$.each( items.data, function( index, value ) {
-						var $entity;
-
-						if ( value.type === 'folder' ) {
-							$entity = self.$element.find( '[data-template=treebranch]:eq(0)' ).clone().removeClass( 'hide' ).removeAttr( 'data-template' );
-							$entity.data( value );
-							$entity.find( '.tree-branch-name > .tree-label' ).html( value.name );
-						} else if ( value.type === 'item' ) {
-							$entity = self.$element.find( '[data-template=treeitem]:eq(0)' ).clone().removeClass( 'hide' ).removeAttr( 'data-template' );
-							$entity.find( '.tree-item-name > .tree-label' ).html( value.name );
-							$entity.data( value );
-						}
-
-						// Decorate $entity with data making the element
-						// easily accessable with libraries like jQuery.
-						//
-						// Values are contained within the object returned
-						// for folders and items as dataAttributes:
-						//
-						// {
-						//     name: "An Item",
-						//     type: 'item',
-						//     dataAttributes = {
-						//         'classes': 'required-item red-text',
-						//         'data-parent': parentId,
-						//         'guid': guid,
-						//         'id': guid
-						//     }
-						// };
-
-						// add attributes to tree-branch or tree-item
-						var dataAttributes = value.dataAttributes || [];
-						$.each( dataAttributes, function( key, value ) {
-							switch ( key ) {
-								case 'class':
-								case 'classes':
-								case 'className':
-									$entity.addClass( value );
-									break;
-
-									// allow custom icons
-								case 'data-icon':
-									$entity.find( '.icon-item' ).removeClass().addClass( 'icon-item ' + value );
-									$entity.attr( key, value );
-									break;
-
-									// ARIA support
-								case 'id':
-									$entity.attr( key, value );
-									$entity.attr( 'aria-labelledby', value + '-label' );
-									$entity.find( '.tree-branch-name > .tree-label' ).attr( 'id', value + '-label' );
-									break;
-
-									// id, style, data-*
-								default:
-									$entity.attr( key, value );
-									break;
-							}
-						} );
-
-						// add child nodes
-						if ( $el.hasClass( 'tree-branch-header' ) ) {
-							$parent.find( '.tree-branch-children:eq(0)' ).append( $entity );
-						} else {
-							$el.append( $entity );
-						}
-					} );
-
-					// return newly populated folder
-					self.$element.trigger( 'loaded.fu.tree', $parent );
-				} );
-			},
-
-			selectItem: function( el ) {
-				var $el = $( el );
-				var $all = this.$element.find( '.tree-selected' );
-				var data = [];
-				var $icon = $el.find( '.icon-item' );
-
-				if ( this.options.multiSelect ) {
-					$.each( $all, function( index, value ) {
-						var $val = $( value );
-						if ( $val[ 0 ] !== $el[ 0 ] ) {
-							data.push( $( value ).data() );
-						}
-					} );
-				} else if ( $all[ 0 ] !== $el[ 0 ] ) {
-					$all.removeClass( 'tree-selected' )
-						.find( '.glyphicon' ).removeClass( 'glyphicon-ok' ).addClass( 'fueluxicon-bullet' );
-					data.push( $el.data() );
-				}
-
-				var eventType = 'selected';
-				if ( $el.hasClass( 'tree-selected' ) ) {
-					eventType = 'unselected';
-					$el.removeClass( 'tree-selected' );
-					if ( $icon.hasClass( 'glyphicon-ok' ) || $icon.hasClass( 'fueluxicon-bullet' ) ) {
-						$icon.removeClass( 'glyphicon-ok' ).addClass( 'fueluxicon-bullet' );
-					}
-				} else {
-					$el.addClass( 'tree-selected' );
-					// add tree dot back in
-					if ( $icon.hasClass( 'glyphicon-ok' ) || $icon.hasClass( 'fueluxicon-bullet' ) ) {
-						$icon.removeClass( 'fueluxicon-bullet' ).addClass( 'glyphicon-ok' );
-					}
-					if ( this.options.multiSelect ) {
-						data.push( $el.data() );
-					}
-				}
-
-				if ( data.length ) {
-					this.$element.trigger( 'selected', {
-						selected: data
-					} );
-				}
-
-				// Return new list of selected items, the item
-				// clicked, and the type of event:
-				$el.trigger( 'updated.fu.tree', {
-					selected: data,
-					item: $el,
-					eventType: eventType
-				} );
-			},
-
-			openFolder: function( el ) {
-				var $el = $( el ); // tree-branch-name
-				var $branch;
-				var $treeFolderContent;
-				var $treeFolderContentFirstChild;
-
-				// if item select only
-				if ( !this.options.folderSelect ) {
-					$el = $( el ).parent(); // tree-branch, if tree-branch-name clicked
-				}
-
-				$branch = $el.closest( '.tree-branch' ); // tree branch
-				$treeFolderContent = $branch.find( '.tree-branch-children' );
-				$treeFolderContentFirstChild = $treeFolderContent.eq( 0 );
-
-				// manipulate branch/folder
-				var eventType, classToTarget, classToAdd;
-				if ( $el.find( '.glyphicon-folder-close' ).length ) {
-					eventType = 'opened';
-					classToTarget = '.glyphicon-folder-close';
-					classToAdd = 'glyphicon-folder-open';
-
-					$branch.addClass( 'tree-open' );
-					$branch.attr( 'aria-expanded', 'true' );
-
-					$treeFolderContentFirstChild.removeClass( 'hide' );
-					if ( !$treeFolderContent.children().length ) {
-						this.populate( $treeFolderContent );
-					}
-
-				} else if ( $el.find( '.glyphicon-folder-open' ) ) {
-					eventType = 'closed';
-					classToTarget = '.glyphicon-folder-open';
-					classToAdd = 'glyphicon-folder-close';
-
-					$branch.removeClass( 'tree-open' );
-					$branch.attr( 'aria-expanded', 'false' );
-					$treeFolderContentFirstChild.addClass( 'hide' );
-
-					// remove if no cache
-					if ( !this.options.cacheItems ) {
-						$treeFolderContentFirstChild.empty();
-					}
-
-				}
-
-				$branch.find( '> .tree-branch-header .icon-folder' ).eq( 0 )
-					.removeClass( 'glyphicon-folder-close glyphicon-folder-open' )
-					.addClass( classToAdd );
-
-				this.$element.trigger( eventType, $branch.data() );
-			},
-
-			selectFolder: function( clickedElement ) {
-				var $clickedElement = $( clickedElement );
-				var $clickedBranch = $clickedElement.closest( '.tree-branch' );
-				var $selectedBranch = this.$element.find( '.tree-branch.tree-selected' );
-				var selectedData = [];
-				var eventType = 'selected';
-
-				// select clicked item
-				if ( $clickedBranch.hasClass( 'tree-selected' ) ) {
-					eventType = 'unselected';
-					$clickedBranch.removeClass( 'tree-selected' );
-				} else {
-					$clickedBranch.addClass( 'tree-selected' );
-				}
-
-				if ( this.options.multiSelect ) {
-
-					// get currently selected
-					$selectedBranch = this.$element.find( '.tree-branch.tree-selected' );
-
-					$.each( $selectedBranch, function( index, value ) {
-						var $value = $( value );
-						if ( $value[ 0 ] !== $clickedElement[ 0 ] ) {
-							selectedData.push( $( value ).data() );
-						}
-					} );
-
-				} else if ( $selectedBranch[ 0 ] !== $clickedElement[ 0 ] ) {
-					$selectedBranch.removeClass( 'tree-selected' );
-
-					selectedData.push( $clickedBranch.data() );
-				}
-
-				if ( selectedData.length ) {
-					this.$element.trigger( 'selected.fu.tree', {
-						selected: selectedData
-					} );
-				}
-
-				// Return new list of selected items, the item
-				// clicked, and the type of event:
-				$clickedElement.trigger( 'updated.fu.tree', {
-					selected: selectedData,
-					item: $clickedElement,
-					eventType: eventType
-				} );
-			},
-
-			selectedItems: function() {
-				var $sel = this.$element.find( '.tree-selected' );
-				var data = [];
-
-				$.each( $sel, function( index, value ) {
-					data.push( $( value ).data() );
-				} );
-				return data;
-			},
-
-			// collapses open folders
-			collapse: function() {
-				var cacheItems = this.options.cacheItems;
-
-				// find open folders
-				this.$element.find( '.icon-folder-open' ).each( function() {
-					// update icon class
-					var $this = $( this )
-						.removeClass( 'icon-folder-close icon-folder-open' )
-						.addClass( 'icon-folder-close' );
-
-					// "close" or empty folder contents
-					var $parent = $this.parent().parent();
-					var $folder = $parent.children( '.tree-branch-children' );
-
-					$folder.addClass( 'hide' );
-					if ( !cacheItems ) {
-						$folder.empty();
-					}
-				} );
-			}
-		};
-
-
-		// TREE PLUGIN DEFINITION
-
-		$.fn.tree = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.tree' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.tree', ( data = new Tree( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.tree.defaults = {
-			dataSource: function( options, callback ) {},
-			multiSelect: false,
-			cacheItems: true,
-			folderSelect: true
-		};
-
-		$.fn.tree.Constructor = Tree;
-
-		$.fn.tree.noConflict = function() {
-			$.fn.tree = old;
-			return this;
-		};
-
-
-		// NO DATA-API DUE TO NEED OF DATA-SOURCE
-
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Wizard
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.wizard;
-
-		// WIZARD CONSTRUCTOR AND PROTOTYPE
-
-		var Wizard = function( element, options ) {
-			var kids;
-
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.wizard.defaults, options );
-			this.options.disablePreviousStep = ( this.$element.attr( 'data-restrict' ) === "previous" ) ? true : this.options.disablePreviousStep;
-			this.currentStep = this.options.selectedItem.step;
-			this.numSteps = this.$element.find( '.steps li' ).length;
-			this.$prevBtn = this.$element.find( 'button.btn-prev' );
-			this.$nextBtn = this.$element.find( 'button.btn-next' );
-
-			kids = this.$nextBtn.children().detach();
-			this.nextText = $.trim( this.$nextBtn.text() );
-			this.$nextBtn.append( kids );
-
-			// handle events
-			this.$prevBtn.on( 'click.fu.wizard', $.proxy( this.previous, this ) );
-			this.$nextBtn.on( 'click.fu.wizard', $.proxy( this.next, this ) );
-			this.$element.on( 'click.fu.wizard', 'li.complete', $.proxy( this.stepclicked, this ) );
-
-			this.selectedItem( this.options.selectedItem );
-
-			if ( this.options.disablePreviousStep ) {
-				this.$prevBtn.attr( 'disabled', true );
-				this.$element.find( '.steps' ).addClass( 'previous-disabled' );
-			}
-		};
-
-		Wizard.prototype = {
-
-			constructor: Wizard,
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings [none]
-				// empty elements to return to original markup [none]
-				// returns string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			//index is 1 based
-			//second parameter can be array of objects [{ ... }, { ... }] or you can pass n additional objects as args
-			//object structure is as follows (all params are optional): { badge: '', label: '', pane: '' }
-			addSteps: function( index ) {
-				var items = [].slice.call( arguments ).slice( 1 );
-				var $steps = this.$element.find( '.steps' );
-				var $stepContent = this.$element.find( '.step-content' );
-				var i, l, $pane, $startPane, $startStep, $step;
-
-				index = ( index === -1 || ( index > ( this.numSteps + 1 ) ) ) ? this.numSteps + 1 : index;
-				if ( items[ 0 ] instanceof Array ) {
-					items = items[ 0 ];
-				}
-
-				$startStep = $steps.find( 'li:nth-child(' + index + ')' );
-				$startPane = $stepContent.find( '.step-pane:nth-child(' + index + ')' );
-				if ( $startStep.length < 1 ) {
-					$startStep = null;
-				}
-
-				for ( i = 0, l = items.length; i < l; i++ ) {
-					$step = $( '<li data-step="' + index + '"><span class="badge badge-info"></span></li>' );
-					$step.append( items[ i ].label || '' ).append( '<span class="chevron"></span>' );
-					$step.find( '.badge' ).append( items[ i ].badge || index );
-
-					$pane = $( '<div class="step-pane" data-step="' + index + '"></div>' );
-					$pane.append( items[ i ].pane || '' );
-
-					if ( !$startStep ) {
-						$steps.append( $step );
-						$stepContent.append( $pane );
-					} else {
-						$startStep.before( $step );
-						$startPane.before( $pane );
-					}
-					index++;
-				}
-
-				this.syncSteps();
-				this.numSteps = $steps.find( 'li' ).length;
-				this.setState();
-			},
-
-			//index is 1 based, howMany is number to remove
-			removeSteps: function( index, howMany ) {
-				var action = 'nextAll';
-				var i = 0;
-				var $steps = this.$element.find( '.steps' );
-				var $stepContent = this.$element.find( '.step-content' );
-				var $start;
-
-				howMany = ( howMany !== undefined ) ? howMany : 1;
-
-				if ( index > $steps.find( 'li' ).length ) {
-					$start = $steps.find( 'li:last' );
-				} else {
-					$start = $steps.find( 'li:nth-child(' + index + ')' ).prev();
-					if ( $start.length < 1 ) {
-						action = 'children';
-						$start = $steps;
-					}
-				}
-
-				$start[ action ]().each( function() {
-					var item = $( this );
-					var step = item.attr( 'data-step' );
-					if ( i < howMany ) {
-						item.remove();
-						$stepContent.find( '.step-pane[data-step="' + step + '"]:first' ).remove();
-					} else {
-						return false;
-					}
-					i++;
-				} );
-
-				this.syncSteps();
-				this.numSteps = $steps.find( 'li' ).length;
-				this.setState();
-			},
-
-			setState: function() {
-				var canMovePrev = ( this.currentStep > 1 );
-				var firstStep = ( this.currentStep === 1 );
-				var lastStep = ( this.currentStep === this.numSteps );
-
-				// disable buttons based on current step
-				if ( !this.options.disablePreviousStep ) {
-					this.$prevBtn.attr( 'disabled', ( firstStep === true || canMovePrev === false ) );
-				}
-
-				// change button text of last step, if specified
-				var last = this.$nextBtn.attr( 'data-last' );
-				if ( last ) {
-					this.lastText = last;
-					// replace text
-					var text = this.nextText;
-					if ( lastStep === true ) {
-						text = this.lastText;
-						// add status class to wizard
-						this.$element.addClass( 'complete' );
-					} else {
-						this.$element.removeClass( 'complete' );
-					}
-					var kids = this.$nextBtn.children().detach();
-					this.$nextBtn.text( text ).append( kids );
-				}
-
-				// reset classes for all steps
-				var $steps = this.$element.find( '.steps li' );
-				$steps.removeClass( 'active' ).removeClass( 'complete' );
-				$steps.find( 'span.badge' ).removeClass( 'badge-info' ).removeClass( 'badge-success' );
-
-				// set class for all previous steps
-				var prevSelector = '.steps li:lt(' + ( this.currentStep - 1 ) + ')';
-				var $prevSteps = this.$element.find( prevSelector );
-				$prevSteps.addClass( 'complete' );
-				$prevSteps.find( 'span.badge' ).addClass( 'badge-success' );
-
-				// set class for current step
-				var currentSelector = '.steps li:eq(' + ( this.currentStep - 1 ) + ')';
-				var $currentStep = this.$element.find( currentSelector );
-				$currentStep.addClass( 'active' );
-				$currentStep.find( 'span.badge' ).addClass( 'badge-info' );
-
-				// set display of target element
-				var $stepContent = this.$element.find( '.step-content' );
-				var target = $currentStep.attr( 'data-step' );
-				$stepContent.find( '.step-pane' ).removeClass( 'active' );
-				$stepContent.find( '.step-pane[data-step="' + target + '"]:first' ).addClass( 'active' );
-
-				// reset the wizard position to the left
-				this.$element.find( '.steps' ).first().attr( 'style', 'margin-left: 0' );
-
-				// check if the steps are wider than the container div
-				var totalWidth = 0;
-				this.$element.find( '.steps > li' ).each( function() {
-					totalWidth += $( this ).outerWidth();
-				} );
-				var containerWidth = 0;
-				if ( this.$element.find( '.actions' ).length ) {
-					containerWidth = this.$element.width() - this.$element.find( '.actions' ).first().outerWidth();
-				} else {
-					containerWidth = this.$element.width();
-				}
-				if ( totalWidth > containerWidth ) {
-
-					// set the position so that the last step is on the right
-					var newMargin = totalWidth - containerWidth;
-					this.$element.find( '.steps' ).first().attr( 'style', 'margin-left: -' + newMargin + 'px' );
-
-					// set the position so that the active step is in a good
-					// position if it has been moved out of view
-					if ( this.$element.find( 'li.active' ).first().position().left < 200 ) {
-						newMargin += this.$element.find( 'li.active' ).first().position().left - 200;
-						if ( newMargin < 1 ) {
-							this.$element.find( '.steps' ).first().attr( 'style', 'margin-left: 0' );
-						} else {
-							this.$element.find( '.steps' ).first().attr( 'style', 'margin-left: -' + newMargin + 'px' );
-						}
-					}
-				}
-
-				// only fire changed event after initializing
-				if ( typeof( this.initialized ) !== 'undefined' ) {
-					var e = $.Event( 'changed.fu.wizard' );
-					this.$element.trigger( e, {
-						step: this.currentStep
-					} );
-				}
-
-				this.initialized = true;
-			},
-
-			stepclicked: function( e ) {
-				var li = $( e.currentTarget );
-				var index = this.$element.find( '.steps li' ).index( li );
-				var canMovePrev = true;
-
-				if ( this.options.disablePreviousStep ) {
-					if ( index < this.currentStep ) {
-						canMovePrev = false;
-					}
-				}
-
-				if ( canMovePrev ) {
-					var evt = $.Event( 'stepclicked.fu.wizard' );
-					this.$element.trigger( evt, {
-						step: index + 1
-					} );
-					if ( evt.isDefaultPrevented() ) {
-						return;
-					}
-
-					this.currentStep = ( index + 1 );
-					this.setState();
-				}
-			},
-
-			syncSteps: function() {
-				var i = 1;
-				var $steps = this.$element.find( '.steps' );
-				var $stepContent = this.$element.find( '.step-content' );
-
-				$steps.children().each( function() {
-					var item = $( this );
-					var badge = item.find( '.badge' );
-					var step = item.attr( 'data-step' );
-
-					if ( !isNaN( parseInt( badge.html(), 10 ) ) ) {
-						badge.html( i );
-					}
-					item.attr( 'data-step', i );
-					$stepContent.find( '.step-pane[data-step="' + step + '"]:last' ).attr( 'data-step', i );
-					i++;
-				} );
-			},
-
-			previous: function() {
-				var canMovePrev = ( this.currentStep > 1 );
-				if ( this.options.disablePreviousStep ) {
-					canMovePrev = false;
-				}
-				if ( canMovePrev ) {
-					var e = $.Event( 'actionclicked.fu.wizard' );
-					this.$element.trigger( e, {
-						step: this.currentStep,
-						direction: 'previous'
-					} );
-					if ( e.isDefaultPrevented() ) {
-						return;
-					} // don't increment
-
-					this.currentStep -= 1;
-					this.setState();
-				}
-
-				// return focus to control after selecting an option
-				if ( this.$prevBtn.is( ':disabled' ) ) {
-					this.$nextBtn.focus();
-				} else {
-					this.$prevBtn.focus();
-				}
-
-			},
-
-			next: function() {
-				var canMoveNext = ( this.currentStep + 1 <= this.numSteps );
-				var lastStep = ( this.currentStep === this.numSteps );
-
-				if ( canMoveNext ) {
-					var e = $.Event( 'actionclicked.fu.wizard' );
-					this.$element.trigger( e, {
-						step: this.currentStep,
-						direction: 'next'
-					} );
-					if ( e.isDefaultPrevented() ) {
-						return;
-					} // don't increment
-
-					this.currentStep += 1;
-					this.setState();
-				} else if ( lastStep ) {
-					this.$element.trigger( 'finished.fu.wizard' );
-				}
-
-				// return focus to control after selecting an option
-				if ( this.$nextBtn.is( ':disabled' ) ) {
-					this.$prevBtn.focus();
-				} else {
-					this.$nextBtn.focus();
-				}
-			},
-
-			selectedItem: function( selectedItem ) {
-				var retVal, step;
-
-				if ( selectedItem ) {
-
-					step = selectedItem.step || -1;
-
-					if ( step >= 1 && step <= this.numSteps ) {
-						this.currentStep = step;
-						this.setState();
-					} else {
-						step = this.$element.find( '.steps li.active:first' ).attr( 'data-step' );
-						if ( !isNaN( step ) ) {
-							this.currentStep = parseInt( step, 10 );
-							this.setState();
-						}
-					}
-
-					retVal = this;
-				} else {
-					retVal = {
-						step: this.currentStep
-					};
-				}
-
-				return retVal;
-			}
-		};
-
-
-		// WIZARD PLUGIN DEFINITION
-
-		$.fn.wizard = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.wizard' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.wizard', ( data = new Wizard( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.wizard.defaults = {
-			disablePreviousStep: false,
-			selectedItem: {
-				step: -1
-			} //-1 means it will attempt to look for "active" class in order to set the step
-		};
-
-		$.fn.wizard.Constructor = Wizard;
-
-		$.fn.wizard.noConflict = function() {
-			$.fn.wizard = old;
-			return this;
-		};
-
-
-		// DATA-API
-
-		$( document ).on( 'mouseover.fu.wizard.data-api', '[data-initialize=wizard]', function( e ) {
-			var $control = $( e.target ).closest( '.wizard' );
-			if ( !$control.data( 'fu.wizard' ) ) {
-				$control.wizard( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=wizard]' ).each( function() {
-				var $this = $( this );
-				if ( $this.data( 'fu.wizard' ) ) return;
-				$this.wizard( $this.data() );
-			} );
-		} );
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Infinite Scroll
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.infinitescroll;
-
-		// INFINITE SCROLL CONSTRUCTOR AND PROTOTYPE
-
-		var InfiniteScroll = function( element, options ) {
-			this.$element = $( element );
-			this.$element.addClass( 'infinitescroll' );
-			this.options = $.extend( {}, $.fn.infinitescroll.defaults, options );
-
-			this.curScrollTop = this.$element.scrollTop();
-			this.curPercentage = this.getPercentage();
-			this.fetchingData = false;
-
-			this.$element.on( 'scroll.fu.infinitescroll', $.proxy( this.onScroll, this ) );
-			this.onScroll();
-		};
-
-		InfiniteScroll.prototype = {
-
-			constructor: InfiniteScroll,
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings
-				// [none]
-
-				// empty elements to return to original markup
-				this.$element.empty();
-
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			disable: function() {
-				this.$element.off( 'scroll.fu.infinitescroll' );
-			},
-
-			enable: function() {
-				this.$element.on( 'scroll.fu.infinitescroll', $.proxy( this.onScroll, this ) );
-			},
-
-			end: function( content ) {
-				var end = $( '<div class="infinitescroll-end"></div>' );
-				if ( content ) {
-					end.append( content );
-				} else {
-					end.append( '---------' );
-				}
-				this.$element.append( end );
-				this.disable();
-			},
-
-			getPercentage: function() {
-				var height = ( this.$element.css( 'box-sizing' ) === 'border-box' ) ? this.$element.outerHeight() : this.$element.height();
-				var scrollHeight = this.$element.get( 0 ).scrollHeight;
-				return ( scrollHeight > height ) ? ( ( height / ( scrollHeight - this.curScrollTop ) ) * 100 ) : 0;
-			},
-
-			fetchData: function( force ) {
-				var load = $( '<div class="infinitescroll-load"></div>' );
-				var self = this;
-				var moreBtn;
-
-				var fetch = function() {
-					var helpers = {
-						percentage: self.curPercentage,
-						scrollTop: self.curScrollTop
-					};
-					var $loader = $( '<div class="loader"></div>' );
-					load.append( $loader );
-					$loader.loader();
-					if ( self.options.dataSource ) {
-						self.options.dataSource( helpers, function( resp ) {
-							var end;
-							load.remove();
-							if ( resp.content ) {
-								self.$element.append( resp.content );
-							}
-							if ( resp.end ) {
-								end = ( resp.end !== true ) ? resp.end : undefined;
-								self.end( end );
-							}
-							self.fetchingData = false;
-						} );
-					}
-				};
-
-				this.fetchingData = true;
-				this.$element.append( load );
-				if ( this.options.hybrid && force !== true ) {
-					moreBtn = $( '<button type="button" class="btn btn-primary"></button>' );
-					if ( typeof this.options.hybrid === 'object' ) {
-						moreBtn.append( this.options.hybrid.label );
-					} else {
-						moreBtn.append( '<span class="glyphicon glyphicon-repeat"></span>' );
-					}
-					moreBtn.on( 'click.fu.infinitescroll', function() {
-						moreBtn.remove();
-						fetch();
-					} );
-					load.append( moreBtn );
-				} else {
-					fetch();
-				}
-			},
-
-			onScroll: function( e ) {
-				this.curScrollTop = this.$element.scrollTop();
-				this.curPercentage = this.getPercentage();
-				if ( !this.fetchingData && this.curPercentage >= this.options.percentage ) {
-					this.fetchData();
-				}
-			}
-
-		};
-
-		// INFINITE SCROLL PLUGIN DEFINITION
-
-		$.fn.infinitescroll = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.infinitescroll' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.infinitescroll', ( data = new InfiniteScroll( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.infinitescroll.defaults = {
-			dataSource: null,
-			hybrid: false, //can be true or an object with structure: { 'label': (markup or jQuery obj) }
-			percentage: 95 //percentage scrolled to the bottom before more is loaded
-		};
-
-		$.fn.infinitescroll.Constructor = InfiniteScroll;
-
-		$.fn.infinitescroll.noConflict = function() {
-			$.fn.infinitescroll = old;
-			return this;
-		};
-
-		// NO DATA-API DUE TO NEED OF DATA-SOURCE
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Pillbox
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.pillbox;
-
-		// PILLBOX CONSTRUCTOR AND PROTOTYPE
-
-		var Pillbox = function( element, options ) {
-			this.$element = $( element );
-			this.$moreCount = this.$element.find( '.pillbox-more-count' );
-			this.$pillGroup = this.$element.find( '.pill-group' );
-			this.$addItem = this.$element.find( '.pillbox-add-item' );
-			this.$addItemWrap = this.$addItem.parent();
-			this.$suggest = this.$element.find( '.suggest' );
-			this.$pillHTML = '<li class="btn btn-default pill">' +
-				'	<span></span>' +
-				'	<span class="glyphicon glyphicon-close">' +
-				'		<span class="sr-only">Remove</span>' +
-				'	</span>' +
-				'</li>';
-
-			this.options = $.extend( {}, $.fn.pillbox.defaults, options );
-
-			if ( this.options.readonly === -1 ) {
-				if ( this.$element.attr( 'data-readonly' ) !== undefined ) {
-					this.readonly( true );
-				}
-			} else if ( this.options.readonly ) {
-				this.readonly( true );
-			}
-
-			// EVENTS
-			this.acceptKeyCodes = this._generateObject( this.options.acceptKeyCodes );
-			// Creatie an object out of the key code array, so we dont have to loop through it on every key stroke
-
-			this.$element.on( 'click.fu.pillbox', '.pill-group > .pill', $.proxy( this.itemClicked, this ) );
-			this.$element.on( 'click.fu.pillbox', $.proxy( this.inputFocus, this ) );
-			this.$element.on( 'keydown.fu.pillbox', '.pillbox-add-item', $.proxy( this.inputEvent, this ) );
-			if ( this.options.onKeyDown ) {
-				this.$element.on( 'mousedown.fu.pillbox', '.suggest > li', $.proxy( this.suggestionClick, this ) );
-			}
-			if ( this.options.edit ) {
-				this.$element.addClass( 'pills-editable' );
-				this.$element.on( 'blur.fu.pillbox', '.pillbox-add-item', $.proxy( this.cancelEdit, this ) );
-			}
-		};
-
-		Pillbox.prototype = {
-			constructor: Pillbox,
-
-			destroy: function() {
-				this.$element.remove();
-				// any external bindings
-				// [none]
-				// empty elements to return to original markup
-				// [none]
-				// returns string of markup
-				return this.$element[ 0 ].outerHTML;
-			},
-
-			items: function() {
-				var self = this;
-
-				return this.$pillGroup.children( '.pill' ).map( function() {
-					return self.getItemData( $( this ) );
-				} ).get();
-			},
-
-			itemClicked: function( e ) {
-				var self = this;
-				var $target = $( e.target );
-				var $item;
-
-				e.preventDefault();
-				e.stopPropagation();
-				this._closeSuggestions();
-
-				if ( !$target.hasClass( 'pill' ) ) {
-					$item = $target.parent();
-					if ( this.$element.attr( 'data-readonly' ) === undefined ) {
-						if ( $target.hasClass( 'glyphicon-close' ) ) {
-							if ( this.options.onRemove ) {
-								this.options.onRemove( this.getItemData( $item, {
-									el: $item
-								} ), $.proxy( this._removeElement, this ) );
-							} else {
-								this._removeElement( this.getItemData( $item, {
-									el: $item
-								} ) );
-							}
-							return false;
-						} else if ( this.options.edit ) {
-							if ( $item.find( '.pillbox-list-edit' ).length ) {
-								return false;
-							}
-							this.openEdit( $item );
-						}
-					}
-				} else {
-					$item = $target;
-				}
-
-				this.$element.trigger( 'clicked.fu.pillbox', this.getItemData( $item ) );
-			},
-
-			readonly: function( enable ) {
-				if ( enable ) {
-					this.$element.attr( 'data-readonly', 'readonly' );
-				} else {
-					this.$element.removeAttr( 'data-readonly' );
-				}
-				if ( this.options.truncate ) {
-					this.truncate( enable );
-				}
-			},
-
-			suggestionClick: function( e ) {
-				var $item = $( e.currentTarget );
-
-				e.preventDefault();
-				this.$addItem.val( '' );
-
-				this.addItems( {
-					text: $item.html(),
-					value: $item.data( 'value' )
-				}, true );
-
-				// needs to be after addItems for IE
-				this._closeSuggestions();
-			},
-
-			itemCount: function() {
-				return this.$pillGroup.children( '.pill' ).length;
-			},
-
-			// First parameter is 1 based index (optional, if index is not passed all new items will be appended)
-			// Second parameter can be array of objects [{ ... }, { ... }] or you can pass n additional objects as args
-			// object structure is as follows (index and value are optional): { text: '', value: '' }
-			addItems: function() {
-				var self = this;
-				var items, index, isInternal;
-
-				if ( isFinite( String( arguments[ 0 ] ) ) && !( arguments[ 0 ] instanceof Array ) ) {
-					items = [].slice.call( arguments ).slice( 1 );
-					index = arguments[ 0 ];
-				} else {
-					items = [].slice.call( arguments ).slice( 0 );
-					isInternal = items[ 1 ] && !items[ 1 ].text;
-				}
-
-				//Accounting for array parameter
-				if ( items[ 0 ] instanceof Array ) {
-					items = items[ 0 ];
-				}
-
-				if ( items.length ) {
-					$.each( items, function( i, value ) {
-						var data = {
-							text: value.text,
-							value: ( value.value ? value.value : value.text ),
-							el: self.$pillHTML
-						};
-
-						items[ i ] = data;
-					} );
-
-					if ( this.options.edit && this.currentEdit ) {
-						items[ 0 ].el = this.currentEdit.wrap( '<div></div>' ).parent().html();
-					}
-
-					if ( isInternal ) {
-						items.pop( 1 );
-					}
-
-					if ( self.options.onAdd && isInternal ) {
-
-						if ( this.options.edit && this.currentEdit ) {
-							self.options.onAdd( items[ 0 ], $.proxy( self.saveEdit, this ) );
-						} else {
-							self.options.onAdd( items[ 0 ], $.proxy( self.placeItems, this, true ) );
-						}
-					} else {
-						if ( this.options.edit && this.currentEdit ) {
-							self.saveEdit( items );
-						} else {
-							if ( index ) {
-								self.placeItems( index, items );
-							} else {
-								self.placeItems( items, isInternal );
-							}
-						}
-					}
-				}
-
-			},
-
-			//First parameter is the index (1 based) to start removing items
-			//Second parameter is the number of items to be removed
-			removeItems: function( index, howMany ) {
-				var self = this;
-				var count;
-				var $currentItem;
-
-				if ( !index ) {
-					this.$pillGroup.find( '.pill' ).remove();
-					this._removePillTrigger( {
-						method: 'removeAll'
-					} );
-				} else {
-					howMany = howMany ? howMany : 1;
-
-					for ( count = 0; count < howMany; count++ ) {
-						$currentItem = self.$pillGroup.find( '> .pill:nth-child(' + index + ')' );
-
-						if ( $currentItem ) {
-							$currentItem.remove();
-						} else {
-							break;
-						}
-					}
-				}
-			},
-
-			//First parameter is index (optional)
-			//Second parameter is new arguments
-			placeItems: function() {
-				var newHtml = '';
-				var items;
-				var index;
-				var $neighbor;
-				var isInternal;
-
-				if ( isFinite( String( arguments[ 0 ] ) ) && !( arguments[ 0 ] instanceof Array ) ) {
-					items = [].slice.call( arguments ).slice( 1 );
-					index = arguments[ 0 ];
-				} else {
-					items = [].slice.call( arguments ).slice( 0 );
-					isInternal = items[ 1 ] && !items[ 1 ].text;
-				}
-
-				if ( items[ 0 ] instanceof Array ) {
-					items = items[ 0 ];
-				}
-
-				if ( items.length ) {
-					$.each( items, function( i, item ) {
-						var $item = $( item.el );
-						var $neighbor;
-
-						$item.attr( 'data-value', item.value );
-						$item.find( 'span:first' ).html( item.text );
-
-						newHtml += $item.wrap( '<div></div>' ).parent().html();
-					} );
-
-					if ( this.$pillGroup.children( '.pill' ).length > 0 ) {
-						if ( index ) {
-							$neighbor = this.$pillGroup.find( '.pill:nth-child(' + index + ')' );
-
-							if ( $neighbor.length ) {
-								$neighbor.before( newHtml );
-							} else {
-								this.$pillGroup.children( '.pill:last' ).after( newHtml );
-							}
-						} else {
-							this.$pillGroup.children( '.pill:last' ).after( newHtml );
-						}
-					} else {
-						this.$pillGroup.prepend( newHtml );
-					}
-
-					if ( isInternal ) {
-						this.$element.trigger( 'added.fu.pillbox', {
-							text: items[ 0 ].text,
-							value: items[ 0 ].value
-						} );
-					}
-				}
-			},
-
-			inputEvent: function( e ) {
-				var self = this;
-				var text = this.$addItem.val();
-				var value;
-				var $lastItem;
-				var $selection;
-
-				if ( this.acceptKeyCodes[ e.keyCode ] ) {
-
-					if ( this.options.onKeyDown && this._isSuggestionsOpen() ) {
-						$selection = this.$suggest.find( '.pillbox-suggest-sel' );
-
-						if ( $selection.length ) {
-							text = $selection.html();
-							value = $selection.data( 'value' );
-						}
-					}
-
-					if ( text.length ) {
-						this._closeSuggestions();
-						this.$addItem.hide();
-
-						this.addItems( {
-							text: text,
-							value: value
-						}, true );
-
-						setTimeout( function() {
-							self.$addItem.show().val( '' ).attr( {
-								size: 10
-							} );
-						}, 0 );
-					}
-
-					e.preventDefault();
-					return true;
-				} else if ( e.keyCode === 8 || e.keyCode === 46 ) {
-					// backspace: 8
-					// delete: 46
-
-					if ( !text.length ) {
-						e.preventDefault();
-
-						if ( this.options.edit && this.currentEdit ) {
-							this.cancelEdit();
-							return true;
-						}
-
-						this._closeSuggestions();
-						$lastItem = this.$pillGroup.children( '.pill:last' );
-
-						if ( $lastItem.hasClass( 'pillbox-highlight' ) ) {
-							this._removeElement( this.getItemData( $lastItem, {
-								el: $lastItem
-							} ) );
-						} else {
-							$lastItem.addClass( 'pillbox-highlight' );
-						}
-
-						return true;
-					}
-				} else if ( text.length > 10 ) {
-					if ( this.$addItem.width() < ( this.$pillGroup.width() - 6 ) ) {
-						this.$addItem.attr( {
-							size: text.length + 3
-						} );
-					}
-				}
-
-				this.$pillGroup.find( '.pill' ).removeClass( 'pillbox-highlight' );
-
-				if ( this.options.onKeyDown ) {
-					if ( e.keyCode === 9 || e.keyCode === 38 || e.keyCode === 40 ) {
-						// tab: 9
-						// up arrow: 38
-						// down arrow: 40
-
-						if ( this._isSuggestionsOpen() ) {
-							this._keySuggestions( e );
-						}
-						return true;
-					}
-
-					//only allowing most recent event callback to register
-					this.callbackId = e.timeStamp;
-					this.options.onKeyDown( {
-						event: e,
-						value: text
-					}, function( data ) {
-						self._openSuggestions( e, data );
-					} );
-				}
-			},
-
-			openEdit: function( el ) {
-				var index = el.index() + 1;
-				var $addItemWrap = this.$addItemWrap.detach().hide();
-
-				this.$pillGroup.find( '.pill:nth-child(' + index + ')' ).before( $addItemWrap );
-				this.currentEdit = el.detach();
-
-				$addItemWrap.addClass( 'editing' );
-				this.$addItem.val( el.find( 'span:first' ).html() );
-				$addItemWrap.show();
-				this.$addItem.focus().select();
-			},
-
-			cancelEdit: function( e ) {
-				var $addItemWrap;
-				if ( !this.currentEdit ) {
-					return false;
-				}
-
-				this._closeSuggestions();
-				if ( e ) {
-					this.$addItemWrap.before( this.currentEdit );
-				}
-				this.currentEdit = false;
-
-				$addItemWrap = this.$addItemWrap.detach();
-				$addItemWrap.removeClass( 'editing' );
-				this.$addItem.val( '' );
-				this.$pillGroup.append( $addItemWrap );
-			},
-
-			//Must match syntax of placeItem so addItem callback is called when an item is edited
-			//expecting to receive an array back from the callback containing edited items
-			saveEdit: function() {
-				var item = arguments[ 0 ][ 0 ];
-
-				this.currentEdit = $( item.el );
-				this.currentEdit.data( 'value', item.value );
-				this.currentEdit.find( 'span:first' ).html( item.text );
-
-				this.$addItemWrap.hide();
-				this.$addItemWrap.before( this.currentEdit );
-				this.currentEdit = false;
-
-				this.$addItem.val( '' );
-				this.$addItemWrap.removeClass( 'editing' );
-				this.$pillGroup.append( this.$addItemWrap.detach().show() );
-				this.$element.trigger( 'edited.fu.pillbox', {
-					value: item.value,
-					text: item.text
-				} );
-			},
-
-			removeBySelector: function() {
-				var selectors = [].slice.call( arguments ).slice( 0 );
-				var self = this;
-
-				$.each( selectors, function( i, sel ) {
-					self.$pillGroup.find( sel ).remove();
-				} );
-
-				this._removePillTrigger( {
-					method: 'removeBySelector',
-					removedSelectors: selectors
-				} );
-			},
-
-			removeByValue: function() {
-				var values = [].slice.call( arguments ).slice( 0 );
-				var self = this;
-
-				$.each( values, function( i, val ) {
-					self.$pillGroup.find( '> .pill[data-value="' + val + '"]' ).remove();
-				} );
-
-				this._removePillTrigger( {
-					method: 'removeByValue',
-					removedValues: values
-				} );
-			},
-
-			removeByText: function() {
-				var text = [].slice.call( arguments ).slice( 0 );
-				var self = this;
-
-				$.each( text, function( i, text ) {
-					self.$pillGroup.find( '> .pill:contains("' + text + '")' ).remove();
-				} );
-
-				this._removePillTrigger( {
-					method: 'removeByText',
-					removedText: text
-				} );
-			},
-
-			truncate: function( enable ) {
-				var self = this;
-				var available, full, i, pills, used;
-
-				this.$element.removeClass( 'truncate' );
-				this.$addItemWrap.removeClass( 'truncated' );
-				this.$pillGroup.find( '.pill' ).removeClass( 'truncated' );
-
-				if ( enable ) {
-					this.$element.addClass( 'truncate' );
-
-					available = this.$element.width();
-					full = false;
-					i = 0;
-					pills = this.$pillGroup.find( '.pill' ).length;
-					used = 0;
-
-					this.$pillGroup.find( '.pill' ).each( function() {
-						var pill = $( this );
-						if ( !full ) {
-							i++;
-							self.$moreCount.text( pills - i );
-							if ( ( used + pill.outerWidth( true ) + self.$addItemWrap.outerWidth( true ) ) <= available ) {
-								used += pill.outerWidth( true );
-							} else {
-								self.$moreCount.text( ( pills - i ) + 1 );
-								pill.addClass( 'truncated' );
-								full = true;
-							}
-						} else {
-							pill.addClass( 'truncated' );
-						}
-					} );
-					if ( i === pills ) {
-						this.$addItemWrap.addClass( 'truncated' );
-					}
-				}
-			},
-
-			inputFocus: function( e ) {
-				this.$element.find( '.pillbox-add-item' ).focus();
-			},
-
-			getItemData: function( el, data ) {
-				return $.extend( {
-					text: el.find( 'span:first' ).html()
-				}, el.data(), data );
-			},
-
-			_removeElement: function( data ) {
-				data.el.remove();
-				delete data.el;
-				this.$element.trigger( 'removed.fu.pillbox', data );
-			},
-
-			_removePillTrigger: function( removedBy ) {
-				this.$element.trigger( 'removed.fu.pillbox', removedBy );
-			},
-
-			_generateObject: function( data ) {
-				var obj = {};
-
-				$.each( data, function( index, value ) {
-					obj[ value ] = true;
-				} );
-
-				return obj;
-			},
-
-			_openSuggestions: function( e, data ) {
-				var markup = '';
-
-				if ( this.callbackId !== e.timeStamp ) {
-					return false;
-				}
-
-				if ( data.data && data.data.length ) {
-					$.each( data.data, function( index, value ) {
-						var val = value.value ? value.value : value.text;
-						markup += '<li data-value="' + val + '">' + value.text + '</li>';
-					} );
-
-					// suggestion dropdown
-
-					this.$suggest.html( '' ).append( markup );
-					$( document.body ).trigger( 'suggested.fu.pillbox', this.$suggest );
-				}
-			},
-
-			_closeSuggestions: function() {
-				this.$suggest.html( '' ).parent().removeClass( 'open' );
-			},
-
-			_isSuggestionsOpen: function() {
-				return this.$suggest.parent().hasClass( 'open' );
-			},
-
-			_keySuggestions: function( e ) {
-				var $first = this.$suggest.find( 'li.pillbox-suggest-sel' );
-				var dir = e.keyCode === 38; // up arrow
-				var $next, val;
-
-				e.preventDefault();
-
-				if ( !$first.length ) {
-					$first = this.$suggest.find( 'li:first' );
-					$first.addClass( 'pillbox-suggest-sel' );
-				} else {
-					$next = dir ? $first.prev() : $first.next();
-
-					if ( !$next.length ) {
-						$next = dir ? this.$suggest.find( 'li:last' ) : this.$suggest.find( 'li:first' );
-					}
-
-					if ( $next ) {
-						$next.addClass( 'pillbox-suggest-sel' );
-						$first.removeClass( 'pillbox-suggest-sel' );
-					}
-				}
-			}
-		};
-
-		// PILLBOX PLUGIN DEFINITION
-
-		$.fn.pillbox = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.pillbox' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.pillbox', ( data = new Pillbox( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.pillbox.defaults = {
-			onAdd: undefined,
-			onRemove: undefined,
-			onKeyDown: undefined,
-			edit: false,
-			readonly: -1, //can be true or false. -1 means it will check for data-readonly="readonly"
-			truncate: false,
-			acceptKeyCodes: [
-				13, //Enter
-				188 //Comma
-			]
-
-			//example on remove
-			/*onRemove: function(data,callback){
-			console.log('onRemove');
-			callback(data);
-		}*/
-
-			//example on key down
-			/*onKeyDown: function(event, data, callback ){
-			callback({data:[
-				{text: Math.random(),value:'sdfsdfsdf'},
-				{text: Math.random(),value:'sdfsdfsdf'}
-			]});
-		}
-		*/
-			//example onAdd
-			/*onAdd: function( data, callback ){
-			console.log(data, callback);
-			callback(data);
-		}*/
-		};
-
-		$.fn.pillbox.Constructor = Pillbox;
-
-		$.fn.pillbox.noConflict = function() {
-			$.fn.pillbox = old;
-			return this;
-		};
-
-
-		// DATA-API
-
-		$( document ).on( 'mousedown.fu.pillbox.data-api', '[data-initialize=pillbox]', function( e ) {
-			var $control = $( e.target ).closest( '.pillbox' );
-			if ( !$control.data( 'fu.pillbox' ) ) {
-				$control.pillbox( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=pillbox]' ).each( function() {
-				var $this = $( this );
-				if ( $this.data( 'fu.pillbox' ) ) return;
-				$this.pillbox( $this.data() );
-			} );
-		} );
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Repeater
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.repeater;
-
-		// REPEATER CONSTRUCTOR AND PROTOTYPE
-
-		var Repeater = function( element, options ) {
-			var self = this;
-			var currentView;
-
-			this.$element = $( element );
-
-			this.$canvas = this.$element.find( '.repeater-canvas' );
-			this.$count = this.$element.find( '.repeater-count' );
-			this.$end = this.$element.find( '.repeater-end' );
-			this.$filters = this.$element.find( '.repeater-filters' );
-			this.$loader = this.$element.find( '.repeater-loader' );
-			this.$pageSize = this.$element.find( '.repeater-itemization .selectlist' );
-			this.$nextBtn = this.$element.find( '.repeater-next' );
-			this.$pages = this.$element.find( '.repeater-pages' );
-			this.$prevBtn = this.$element.find( '.repeater-prev' );
-			this.$primaryPaging = this.$element.find( '.repeater-primaryPaging' );
-			this.$search = this.$element.find( '.repeater-search' ).find( '.search' );
-			this.$secondaryPaging = this.$element.find( '.repeater-secondaryPaging' );
-			this.$start = this.$element.find( '.repeater-start' );
-			this.$viewport = this.$element.find( '.repeater-viewport' );
-			this.$views = this.$element.find( '.repeater-views' );
-
-			this.eventStamp = new Date().getTime() + ( Math.floor( Math.random() * 100 ) + 1 );
-			this.currentPage = 0;
-			this.currentView = null;
-			this.infiniteScrollingCallback = function() {};
-			this.infiniteScrollingCont = null;
-			this.infiniteScrollingEnabled = false;
-			this.infiniteScrollingEnd = null;
-			this.infiniteScrollingOptions = {};
-			this.lastPageInput = 0;
-			this.options = $.extend( {}, $.fn.repeater.defaults, options );
-			this.pageIncrement = 0; // store direction navigated
-			this.resizeTimeout = {};
-			this.staticHeight = ( this.options.staticHeight === -1 ) ? this.$element.attr( 'data-staticheight' ) : this.options.staticHeight;
-
-			this.$filters.selectlist();
-			this.$pageSize.selectlist();
-			this.$primaryPaging.find( '.combobox' ).combobox();
-			this.$search.search();
-
-			this.$filters.on( 'changed.fu.selectlist', $.proxy( this.render, this, {
-				clearInfinite: true,
-				pageIncrement: null
-			} ) );
-			this.$nextBtn.on( 'click.fu.repeater', $.proxy( this.next, this ) );
-			this.$pageSize.on( 'changed.fu.selectlist', $.proxy( this.render, this, {
-				pageIncrement: null
-			} ) );
-			this.$prevBtn.on( 'click.fu.repeater', $.proxy( this.previous, this ) );
-			this.$primaryPaging.find( '.combobox' ).on( 'changed.fu.combobox', function( evt, data ) {
-				self.pageInputChange( data.text );
-			} );
-			this.$search.on( 'searched.fu.search cleared.fu.search', $.proxy( this.render, this, {
-				clearInfinite: true,
-				pageIncrement: null
-			} ) );
-			this.$secondaryPaging.on( 'blur.fu.repeater', function() {
-				self.pageInputChange( self.$secondaryPaging.val() );
-			} );
-			this.$secondaryPaging.on( 'change.fu.repeater', function() {
-				self.pageInputChange( self.$secondaryPaging.val() );
-			} );
-			this.$views.find( 'input' ).on( 'change.fu.repeater', $.proxy( this.viewChanged, this ) );
-
-			// ID needed since event is bound to instance
-			$( window ).on( 'resize.fu.repeater.' + this.eventStamp, function( event ) {
-				clearTimeout( self.resizeTimeout );
-				self.resizeTimeout = setTimeout( function() {
-					self.resize();
-					self.$element.trigger( 'resized.fu.repeater' );
-				}, 75 );
-			} );
-
-			this.$loader.loader();
-			this.$loader.loader( 'pause' );
-			currentView = ( this.options.defaultView !== -1 ) ? this.options.defaultView : this.$views.find( 'label.active input' ).val();
-
-			this.initViews( function() {
-				self.resize();
-				self.$element.trigger( 'resized.fu.repeater' );
-				self.render( {
-					changeView: currentView
-				} );
-			} );
-		};
-
-		Repeater.prototype = {
-			constructor: Repeater,
-
-			clear: function( options ) {
-				var scan = function( cont ) {
-					var keep = [];
-					cont.children().each( function() {
-						var item = $( this );
-						var pres = item.attr( 'data-preserve' );
-						if ( pres === 'deep' ) {
-							item.detach();
-							keep.push( item );
-						} else if ( pres === 'shallow' ) {
-							scan( item );
-							item.detach();
-							keep.push( item );
-						}
-					} );
-					cont.empty();
-					cont.append( keep );
-				};
-
-				options = options || {};
-
-				if ( !options.preserve ) {
-					this.$canvas.empty();
-				} else if ( !this.infiniteScrollingEnabled || options.clearInfinite ) {
-					scan( this.$canvas );
-				}
-			},
-
-			destroy: function() {
-				var markup;
-				// set input value attrbute in markup
-				this.$element.find( 'input' ).each( function() {
-					$( this ).attr( 'value', $( this ).val() );
-				} );
-
-				// empty elements to return to original markup
-				this.$canvas.empty();
-				markup = this.$element[ 0 ].outerHTML;
-
-				// destroy components and remove leftover
-				this.$element.find( '.combobox' ).combobox( 'destroy' );
-				this.$element.find( '.selectlist' ).selectlist( 'destroy' );
-				this.$element.find( '.search' ).search( 'destroy' );
-				if ( this.infiniteScrollingEnabled ) {
-					$( this.infiniteScrollingCont ).infinitescroll( 'destroy' );
-				}
-				this.$element.remove();
-
-				// any external events
-				$( window ).off( 'resize.fu.repeater.' + this.eventStamp );
-
-				return markup;
-			},
-
-			getDataOptions: function( options, callback ) {
-				var opts = {};
-				var val, viewDataOpts;
-
-				options = options || {};
-
-				opts.filter = this.$filters.selectlist( 'selectedItem' );
-				opts.view = this.currentView;
-
-				if ( !this.infiniteScrollingEnabled ) {
-					opts.pageSize = parseInt( this.$pageSize.selectlist( 'selectedItem' ).value, 10 );
-				}
-				if ( options.pageIncrement !== undefined ) {
-					if ( options.pageIncrement === null ) {
-						this.currentPage = 0;
-					} else {
-						this.currentPage += options.pageIncrement;
-					}
-				}
-				opts.pageIndex = this.currentPage;
-
-				val = this.$search.find( 'input' ).val();
-				if ( val !== '' ) {
-					opts.search = val;
-				}
-
-				viewDataOpts = $.fn.repeater.views[ this.currentView ] || {};
-				viewDataOpts = viewDataOpts.dataOptions;
-				if ( viewDataOpts ) {
-					viewDataOpts.call( this, opts, function( obj ) {
-						callback( obj );
-					} );
-				} else {
-					callback( opts );
-				}
-			},
-
-			infiniteScrolling: function( enable, options ) {
-				var itemization = this.$element.find( '.repeater-itemization' );
-				var pagination = this.$element.find( '.repeater-pagination' );
-				var cont, data;
-
-				options = options || {};
-
-				if ( enable ) {
-					this.infiniteScrollingEnabled = true;
-					this.infiniteScrollingEnd = options.end;
-					delete options.dataSource;
-					delete options.end;
-					this.infiniteScrollingOptions = options;
-					itemization.hide();
-					pagination.hide();
-				} else {
-					cont = this.infiniteScrollingCont;
-					data = cont.data();
-					delete data.infinitescroll;
-					cont.off( 'scroll' );
-					cont.removeClass( 'infinitescroll' );
-
-					this.infiniteScrollingCont = null;
-					this.infiniteScrollingEnabled = false;
-					this.infiniteScrollingEnd = null;
-					this.infiniteScrollingOptions = {};
-					itemization.show();
-					pagination.show();
-				}
-			},
-
-			infiniteScrollPaging: function( data, options ) {
-				var end = ( this.infiniteScrollingEnd !== true ) ? this.infiniteScrollingEnd : undefined;
-				var page = data.page;
-				var pages = data.pages;
-
-				this.currentPage = ( page !== undefined ) ? page : NaN;
-
-				if ( ( this.currentPage + 1 ) >= pages ) {
-					this.infiniteScrollingCont.infinitescroll( 'end', end );
-				}
-			},
-
-			initInfiniteScrolling: function() {
-				var cont = this.$canvas.find( '[data-infinite="true"]:first' );
-				var opts, self;
-
-				cont = ( cont.length < 1 ) ? this.$canvas : cont;
-				if ( cont.data( 'fu.infinitescroll' ) ) {
-					cont.infinitescroll( 'enable' );
-				} else {
-					self = this;
-					opts = $.extend( {}, this.infiniteScrollingOptions );
-					opts.dataSource = function( helpers, callback ) {
-						self.infiniteScrollingCallback = callback;
-						self.render( {
-							pageIncrement: 1
-						} );
-					};
-					cont.infinitescroll( opts );
-					this.infiniteScrollingCont = cont;
-				}
-			},
-
-			initViews: function( callback ) {
-				var views = [];
-				var i, viewsLength;
-
-				var init = function( index ) {
-					var next = function() {
-						index++;
-						if ( index < viewsLength ) {
-							init( index );
-						} else {
-							callback();
-						}
-					};
-
-					if ( views[ index ].initialize ) {
-						views[ index ].initialize.call( this, {}, function() {
-							next();
-						} );
-					} else {
-						next();
-					}
-				};
-
-				for ( i in $.fn.repeater.views ) {
-					views.push( $.fn.repeater.views[ i ] );
-				}
-				viewsLength = views.length;
-				if ( viewsLength > 0 ) {
-					init( 0 );
-				} else {
-					callback();
-				}
-			},
-
-			itemization: function( data ) {
-				this.$count.html( data.count || '' );
-				this.$end.html( data.end || '' );
-				this.$start.html( data.start || '' );
-			},
-
-			next: function() {
-				var d = 'disabled';
-				this.$nextBtn.attr( d, d );
-				this.$prevBtn.attr( d, d );
-				this.pageIncrement = 1;
-				this.render( {
-					pageIncrement: this.pageIncrement
-				} );
-			},
-
-			pageInputChange: function( val ) {
-				var pageInc;
-				if ( val !== this.lastPageInput ) {
-					this.lastPageInput = val;
-					val = parseInt( val, 10 ) - 1;
-					pageInc = val - this.currentPage;
-					this.render( {
-						pageIncrement: pageInc
-					} );
-				}
-			},
-
-			pagination: function( data ) {
-				var act = 'active';
-				var dsbl = 'disabled';
-				var page = data.page;
-				var pages = data.pages;
-				var dropMenu, i, l;
-
-				this.currentPage = ( page !== undefined ) ? page : NaN;
-
-				this.$primaryPaging.removeClass( act );
-				this.$secondaryPaging.removeClass( act );
-
-				if ( pages <= this.options.dropPagingCap ) {
-					this.$primaryPaging.addClass( act );
-					dropMenu = this.$primaryPaging.find( '.dropdown-menu' );
-					dropMenu.empty();
-					for ( i = 0; i < pages; i++ ) {
-						l = i + 1;
-						dropMenu.append( '<li data-value="' + l + '"><a href="#">' + l + '</a></li>' );
-					}
-					this.$primaryPaging.find( 'input.form-control' ).val( this.currentPage + 1 );
-				} else {
-					this.$secondaryPaging.addClass( act );
-					this.$secondaryPaging.val( this.currentPage + 1 );
-				}
-				this.lastPageInput = this.currentPage + 1 + '';
-
-				this.$pages.html( pages );
-
-				// this is not the last page
-				if ( ( this.currentPage + 1 ) < pages ) {
-					this.$nextBtn.removeAttr( dsbl );
-				} else {
-					this.$nextBtn.attr( dsbl, dsbl );
-				}
-				// this is not the first page
-				if ( ( this.currentPage - 1 ) >= 0 ) {
-					this.$prevBtn.removeAttr( dsbl );
-				} else {
-					this.$prevBtn.attr( dsbl, dsbl );
-				}
-
-				// return focus to next/previous buttons after navigating
-				if ( this.pageIncrement !== 0 ) {
-					if ( this.pageIncrement > 0 ) {
-						if ( this.$nextBtn.is( ':disabled' ) ) {
-							// if you can't focus, go the other way
-							this.$prevBtn.focus();
-						} else {
-							this.$nextBtn.focus();
-						}
-					} else {
-						if ( this.$prevBtn.is( ':disabled' ) ) {
-							// if you can't focus, go the other way
-							this.$nextBtn.focus();
-						} else {
-							this.$prevBtn.focus();
-						}
-					}
-				}
-			},
-
-			previous: function() {
-				var d = 'disabled';
-				this.$nextBtn.attr( d, d );
-				this.$prevBtn.attr( d, d );
-				this.pageIncrement = -1;
-				this.render( {
-					pageIncrement: this.pageIncrement
-				} );
-			},
-
-			render: function( options ) {
-				var self = this;
-				var viewChanged = false;
-				var viewObj = $.fn.repeater.views[ self.currentView ] || {};
-				var prevView;
-
-				var start = function() {
-					options.preserve = ( options.preserve !== undefined ) ? options.preserve : !viewChanged;
-					self.clear( options );
-					if ( !self.infiniteScrollingEnabled || ( self.infiniteScrollingEnabled && viewChanged ) ) {
-						self.$loader.show().loader( 'play' );
-					}
-					self.getDataOptions( options, function( opts ) {
-						self.options.dataSource( opts, function( data ) {
-							var renderer = viewObj.renderer;
-							if ( self.infiniteScrollingEnabled ) {
-								self.infiniteScrollingCallback( {} );
-							} else {
-								self.itemization( data );
-								self.pagination( data );
-							}
-							if ( renderer ) {
-								self.runRenderer( self.$canvas, renderer, data, function() {
-									if ( self.infiniteScrollingEnabled ) {
-										if ( viewChanged || options.clearInfinite ) {
-											self.initInfiniteScrolling();
-										}
-										self.infiniteScrollPaging( data, options );
-									}
-									self.$loader.hide().loader( 'pause' );
-									self.$element.trigger( 'loaded.fu.repeater' );
-								} );
-							}
-						} );
-					} );
-				};
-
-				options = options || {};
-
-				if ( options.changeView && this.currentView !== options.changeView ) {
-					prevView = this.currentView;
-					this.currentView = options.changeView;
-					this.$element.attr( 'data-currentview', this.currentView );
-					viewChanged = true;
-					if ( this.infiniteScrollingEnabled ) {
-						self.infiniteScrolling( false );
-					}
-					viewObj = $.fn.repeater.views[ self.currentView ] || {};
-					if ( viewObj.selected ) {
-						viewObj.selected.call( this, {
-							prevView: prevView
-						}, function() {
-							start();
-						} );
-					} else {
-						start();
-					}
-				} else {
-					start();
-				}
-			},
-
-			resize: function() {
-				var staticHeight = this.staticHeight;
-				var viewObj = $.fn.repeater.views[ this.currentView ] || {};
-				var height, viewportMargins;
-
-				if ( staticHeight !== undefined ) {
-					this.$canvas.addClass( 'scrolling' );
-					viewportMargins = {
-						bottom: this.$viewport.css( 'margin-bottom' ),
-						top: this.$viewport.css( 'margin-top' )
-					};
-					height = ( ( staticHeight === 'true' || staticHeight === true ) ? this.$element.height() : parseInt( staticHeight, 10 ) ) -
-						this.$element.find( '.repeater-header' ).outerHeight() -
-						this.$element.find( '.repeater-footer' ).outerHeight() -
-						( ( viewportMargins.bottom === 'auto' ) ? 0 : parseInt( viewportMargins.bottom, 10 ) ) -
-						( ( viewportMargins.top === 'auto' ) ? 0 : parseInt( viewportMargins.top, 10 ) );
-					this.$viewport.outerHeight( height );
-				} else {
-					this.$canvas.removeClass( 'scrolling' );
-				}
-
-				if ( viewObj.resize ) {
-					viewObj.resize.call( this, {
-						height: this.$element.outerHeight(),
-						width: this.$element.outerWidth()
-					}, function() {} );
-				}
-			},
-
-			runRenderer: function( container, renderer, data, callback ) {
-				var self = this;
-				var skipNested = false;
-				var repeat, subset, i, l;
-
-				var loopSubset = function( index ) {
-					var args = {
-						container: container,
-						data: data
-					};
-					if ( renderer.repeat ) {
-						args.subset = subset;
-						args.index = index;
-					}
-					if ( subset.length < 1 ) {
-						callback();
-					} else {
-						start( args, function() {
-							index++;
-							if ( index < subset.length ) {
-								loopSubset( index );
-							} else {
-								callback();
-							}
-						} );
-					}
-				};
-
-				var start = function( args, cb ) {
-					var item = '';
-
-					var callbacks = {
-						before: function( resp ) {
-							if ( resp && resp.skipNested === true ) {
-								skipNested = true;
-							}
-							proceed( 'render', args );
-						},
-						render: function( resp ) {
-							var action = ( resp && resp.action ) ? resp.action : 'append';
-							if ( resp && resp.item !== undefined ) {
-								item = $( resp.item );
-								if ( item.length < 1 ) {
-									item = resp.item;
-								}
-								if ( action !== 'none' ) {
-									container[ action ]( item );
-								}
-								args.item = item;
-							}
-							if ( resp && resp.skipNested === true ) {
-								skipNested = true;
-							}
-							proceed( 'after', args );
-						},
-						after: function( resp ) {
-							var cont;
-							var loopNested = function( cont, index ) {
-								self.runRenderer( cont, renderer.nested[ index ], data, function() {
-									index++;
-									if ( index < renderer.nested.length ) {
-										loopNested( cont, index );
-									} else {
-										proceed( 'complete', args );
-									}
-								} );
-							};
-
-							if ( resp && resp.skipNested === true ) {
-								skipNested = true;
-							}
-
-							if ( renderer.nested && !skipNested ) {
-								cont = $( item );
-								cont = ( cont.attr( 'data-container' ) === 'true' ) ? cont : cont.find( '[data-container="true"]:first' );
-								if ( cont.length < 1 ) {
-									cont = container;
-								}
-								loopNested( cont, 0 );
-							} else {
-								callbacks.complete( null );
-							}
-						},
-						complete: function( resp ) {
-							if ( cb ) {
-								cb();
-							}
-						}
-					};
-
-					var proceed = function( stage, argus ) {
-						argus = $.extend( {}, argus );
-						if ( renderer[ stage ] ) {
-							renderer[ stage ].call( self, argus, callbacks[ stage ] );
-						} else {
-							callbacks[ stage ]( null );
-						}
-					};
-
-					proceed( 'before', args );
-				};
-
-				if ( renderer.repeat ) {
-					repeat = renderer.repeat.split( '.' );
-					if ( repeat[ 0 ] === 'data' || repeat[ 0 ] === 'this' ) {
-						subset = ( repeat[ 0 ] === 'this' ) ? this : data;
-						repeat.shift();
-					} else {
-						repeat = [];
-						subset = [ '' ];
-					}
-
-					for ( i = 0, l = repeat.length; i < l; i++ ) {
-						subset = subset[ repeat[ i ] ];
-					}
-				} else {
-					subset = [ '' ];
-				}
-
-				loopSubset( 0 );
-			},
-
-			viewChanged: function( e ) {
-				var $selected = $( e.target );
-				this.render( {
-					changeView: $selected.val(),
-					pageIncrement: null
-				} );
-			}
-		};
-
-		// REPEATER PLUGIN DEFINITION
-
-		$.fn.repeater = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.repeater' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.repeater', ( data = new Repeater( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.repeater.defaults = {
-			dataSource: function( options, callback ) {},
-			defaultView: -1, //should be a string value. -1 means it will grab the active view from the view controls
-			dropPagingCap: 10,
-			staticHeight: -1 //normally true or false. -1 means it will look for data-staticheight on the element
-		};
-
-		//views object contains keyed list of view plugins, each an object with following optional parameters:
-		//{
-		//initialize: function(){},
-		//selected: function(){},
-		//renderer: {}
-		//}
-		//renderer object contains following optional parameters:
-		//{
-		//before: function(helpers){},
-		//after: function(helpers){},
-		//complete: function(helpers){},
-		//repeat: 'parameter.subparameter.etc',
-		//render: function(helpers){},
-		//nested: [ *array of renderer objects* ]
-		//}
-
-		//helpers object structure:
-		//{
-		//container: jQuery object,	(current renderer parent)
-		//data: {...}, (data returned from dataSource)
-		//index: int, (only there if repeat was set. current item index)
-		//item: str or jQuery object, (only there if rendered function returned item)
-		//subset: {}, (only there if repeat was set. subset of data being repeated on)
-		//}
-		$.fn.repeater.views = {};
-
-		$.fn.repeater.Constructor = Repeater;
-
-		$.fn.repeater.noConflict = function() {
-			$.fn.repeater = old;
-			return this;
-		};
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Repeater - List View Plugin
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		if ( $.fn.repeater ) {
-
-			$.fn.repeater.Constructor.prototype.clearSelectedItems = function() {
-				this.$canvas.find( '.repeater-list-check' ).remove();
-				this.$canvas.find( '.repeater-list-items tr.selected' ).removeClass( 'selected' );
-			};
-
-			$.fn.repeater.Constructor.prototype.getSelectedItems = function() {
-				var selected = [];
-				this.$canvas.find( '.repeater-list-items tr.selected' ).each( function() {
-					var $item = $( this );
-					selected.push( {
-						data: $item.data( 'item_data' ),
-						element: $item
-					} );
-				} );
-				return selected;
-			};
-
-			$.fn.repeater.Constructor.prototype.setSelectedItems = function( items, force ) {
-				var selectable = this.options.list_selectable;
-				var self = this;
-				var data, i, $item, l;
-
-				var eachFunc = function() {
-					$item = $( this );
-					data = $item.data( 'item_data' ) || {};
-					if ( data[ items[ i ].property ] === items[ i ].value ) {
-						selectItem( $item, items[ i ].selected );
-					}
-				};
-
-				var selectItem = function( $itm, select ) {
-					select = ( select !== undefined ) ? select : true;
-					if ( select ) {
-						if ( !force && selectable !== 'multi' ) {
-							self.clearSelectedItems();
-						}
-						if ( !$itm.hasClass( 'selected' ) ) {
-							$itm.addClass( 'selected' );
-							$itm.find( 'td:first' ).prepend( '<div class="repeater-list-check"><span class="glyphicon glyphicon-ok"></span></div>' );
-						}
-					} else {
-						$itm.find( '.repeater-list-check' ).remove();
-						$itm.removeClass( 'selected' );
-					}
-				};
-
-				if ( !$.isArray( items ) ) {
-					items = [ items ];
-				}
-				if ( force === true || selectable === 'multi' ) {
-					l = items.length;
-				} else if ( selectable ) {
-					l = ( items.length > 0 ) ? 1 : 0;
-				} else {
-					l = 0;
-				}
-				for ( i = 0; i < l; i++ ) {
-					if ( items[ i ].index !== undefined ) {
-						$item = this.$canvas.find( '.repeater-list-items tr:nth-child(' + ( items[ i ].index + 1 ) + ')' );
-						if ( $item.length > 0 ) {
-							selectItem( $item, items[ i ].selected );
-						}
-					} else if ( items[ i ].property !== undefined && items[ i ].value !== undefined ) {
-						//lint demanded this function not be within this loop
-						this.$canvas.find( '.repeater-list-items tr' ).each( eachFunc );
-					}
-				}
-			};
-
-			$.fn.repeater.defaults = $.extend( {}, $.fn.repeater.defaults, {
-				list_columnRendered: null,
-				list_columnSizing: true,
-				list_columnSyncing: true,
-				list_infiniteScroll: false,
-				list_noItemsHTML: '',
-				list_selectable: false,
-				list_sortClearing: false,
-				list_rowRendered: null
-			} );
-
-			$.fn.repeater.views.list = {
-				dataOptions: function( opts, callback ) {
-					if ( this.list_sortDirection ) {
-						opts.sortDirection = this.list_sortDirection;
-					}
-					if ( this.list_sortProperty ) {
-						opts.sortProperty = this.list_sortProperty;
-					}
-					callback( opts );
-				},
-				initialize: function( helpers, callback ) {
-					this.list_sortDirection = null;
-					this.list_sortProperty = null;
-					callback();
-				},
-				selected: function( helpers, callback ) {
-					var infScroll = this.options.list_infiniteScroll;
-					var opts;
-
-					this.list_firstRender = true;
-					this.$loader.addClass( 'noHeader' );
-
-					if ( infScroll ) {
-						opts = ( typeof infScroll === 'object' ) ? infScroll : {};
-						this.infiniteScrolling( true, opts );
-					}
-
-					callback( {} );
-				},
-				renderer: {
-					complete: function( helpers, callback ) {
-						columnSyncing.call( this, helpers, callback );
-					},
-					nested: [ {
-						complete: function( helpers, callback ) {
-							var auto = [];
-							var self = this;
-							var i, l, newWidth, taken;
-
-							if ( !this.options.list_columnSizing || this.list_columnsSame ) {
-								callback();
-							} else {
-								i = 0;
-								taken = 0;
-								helpers.item.find( 'td' ).each( function() {
-									var $col = $( this );
-									var isLast = ( $col.next( 'td' ).length === 0 ) ? true : false;
-									var width;
-									if ( self.list_columns[ i ].width !== undefined ) {
-										width = self.list_columns[ i ].width;
-										$col.outerWidth( width );
-										taken += $col.outerWidth();
-										if ( !isLast ) {
-											self.list_columns[ i ]._auto_width = width;
-										} else {
-											$col.outerWidth( '' );
-										}
-									} else {
-										auto.push( {
-											col: $col,
-											index: i,
-											last: isLast
-										} );
-									}
-									i++;
-								} );
-
-								l = auto.length;
-								if ( l > 0 ) {
-									newWidth = Math.floor( ( this.$canvas.width() - taken ) / l );
-									for ( i = 0; i < l; i++ ) {
-										if ( !auto[ i ].last ) {
-											auto[ i ].col.outerWidth( newWidth );
-											this.list_columns[ auto[ i ].index ]._auto_width = newWidth;
-										}
-									}
-								}
-								callback();
-							}
-						},
-						render: function( helpers, callback ) {
-							var differentColumns = function( oldCols, newCols ) {
-								var i, j, l;
-								if ( !oldCols ) {
-									return true;
-								}
-								if ( !newCols ) {
-									return false;
-								}
-								for ( i = 0, l = newCols.length; i < l; i++ ) {
-									if ( !oldCols[ i ] ) {
-										return true;
-									} else {
-										for ( j in newCols[ i ] ) {
-											if ( oldCols[ i ][ j ] !== newCols[ i ][ j ] ) {
-												return true;
-											}
-										}
-									}
-								}
-								return false;
-							};
-
-							if ( this.list_firstRender || differentColumns( this.list_columns, helpers.data.columns ) ) {
-								this.$element.find( '.repeater-list-header' ).remove();
-								this.list_columns = helpers.data.columns;
-								this.list_columnsSame = false;
-								this.list_firstRender = false;
-								this.$loader.removeClass( 'noHeader' );
-								callback( {
-									action: 'prepend',
-									item: '<table class="table repeater-list-header" data-preserve="deep" role="grid" aria-readonly="true"><tr data-container="true"></tr></table>'
-								} );
-							} else {
-								this.list_columnsSame = true;
-								callback( {
-									skipNested: true
-								} );
-							}
-						},
-						nested: [ {
-							render: function( helpers, callback ) {
-								var chev = 'glyphicon-chevron';
-								var chevDown = chev + '-down';
-								var chevUp = chev + '-up';
-								var index = helpers.index;
-								var self = this;
-								var subset = helpers.subset;
-								var cssClass, $item, sortable, $span;
-
-								cssClass = subset[ index ].cssClass;
-								$item = $( '<td><span class="glyphicon"></span></td>' );
-								$item.addClass( ( ( cssClass !== undefined ) ? cssClass : '' ) ).prepend( subset[ index ].label );
-								$span = $item.find( 'span.glyphicon:first' );
-
-								sortable = subset[ index ].sortable;
-								if ( sortable ) {
-									$item.addClass( 'sortable' );
-									$item.on( 'click.fu.repeater-list', function() {
-										self.list_sortProperty = ( typeof sortable === 'string' ) ? sortable : subset[ index ].property;
-										if ( $item.hasClass( 'sorted' ) ) {
-											if ( $span.hasClass( chevUp ) ) {
-												$span.removeClass( chevUp ).addClass( chevDown );
-												self.list_sortDirection = 'desc';
-											} else {
-												if ( !self.options.list_sortClearing ) {
-													$span.removeClass( chevDown ).addClass( chevUp );
-													self.list_sortDirection = 'asc';
-												} else {
-													$item.removeClass( 'sorted' );
-													$span.removeClass( chevDown );
-													self.list_sortDirection = null;
-													self.list_sortProperty = null;
-												}
-											}
-										} else {
-											helpers.container.find( 'td' ).removeClass( 'sorted' );
-											$span.removeClass( chevDown ).addClass( chevUp );
-											self.list_sortDirection = 'asc';
-											$item.addClass( 'sorted' );
-										}
-										self.render( {
-											clearInfinite: true,
-											pageIncrement: null
-										} );
-									} );
-								}
-								if ( subset[ index ].sortDirection === 'asc' || subset[ index ].sortDirection === 'desc' ) {
-									helpers.container.find( 'td' ).removeClass( 'sorted' );
-									$item.addClass( 'sortable sorted' );
-									if ( subset[ index ].sortDirection === 'asc' ) {
-										$span.addClass( chevUp );
-										this.list_sortDirection = 'asc';
-									} else {
-										$span.addClass( chevDown );
-										this.list_sortDirection = 'desc';
-									}
-									this.list_sortProperty = ( typeof sortable === 'string' ) ? sortable : subset[ index ].property;
-								}
-
-								callback( {
-									item: $item
-								} );
-							},
-							repeat: 'data.columns'
-						} ]
-					}, {
-						after: function( helpers, callback ) {
-							var canvas = this.$canvas;
-							var header = canvas.find( '.repeater-list-header' );
-							if ( this.staticHeight ) {
-								helpers.item.height( canvas.height() - header.outerHeight() );
-							}
-							callback();
-						},
-						render: function( helpers, callback ) {
-							var $item = this.$canvas.find( '.repeater-list-wrapper' );
-							var obj = {};
-							var $empty;
-							if ( $item.length > 0 ) {
-								obj.action = 'none';
-							} else {
-								$item = $( '<div class="repeater-list-wrapper" data-infinite="true"><table class="table repeater-list-items" data-container="true" role="grid" aria-readonly="true"></table></div>' );
-							}
-							obj.item = $item;
-							if ( helpers.data.items.length < 1 ) {
-								obj.skipNested = true;
-								$empty = $( '<tr class="empty"><td></td></tr>' );
-								$empty.find( 'td' ).append( this.options.list_noItemsHTML );
-								$item.find( '.repeater-list-items' ).append( $empty );
-							} else {
-								$item.find( '.repeater-list-items tr.empty:first' ).remove();
-							}
-							callback( obj );
-						},
-						nested: [ {
-							complete: function( helpers, callback ) {
-								var obj = {
-									container: helpers.container
-								};
-								if ( helpers.item !== undefined ) {
-									obj.item = helpers.item;
-								}
-								if ( this.options.list_rowRendered ) {
-									this.options.list_rowRendered( obj, function() {
-										callback();
-									} );
-								} else {
-									callback();
-								}
-							},
-							render: function( helpers, callback ) {
-								var $item = $( '<tr data-container="true"></tr>' );
-								var self = this;
-
-								if ( this.options.list_selectable ) {
-									$item.addClass( 'selectable' );
-									$item.attr( 'tabindex', 0 ); // allow items to be tabbed to / focused on
-									$item.data( 'item_data', helpers.subset[ helpers.index ] );
-									$item.on( 'click.fu.repeater-list', function() {
-										var $row = $( this );
-										if ( $row.hasClass( 'selected' ) ) {
-											$row.removeClass( 'selected' );
-											$row.find( '.repeater-list-check' ).remove();
-											self.$element.trigger( 'itemDeselected.fu.repeater', $row );
-										} else {
-											if ( self.options.list_selectable !== 'multi' ) {
-												self.$canvas.find( '.repeater-list-check' ).remove();
-												self.$canvas.find( '.repeater-list-items tr.selected' ).each( function() {
-													$( this ).removeClass( 'selected' );
-													self.$element.trigger( 'itemDeselected.fu.repeater', $( this ) );
-												} );
-											}
-											$row.addClass( 'selected' );
-											$row.find( 'td:first' ).prepend( '<div class="repeater-list-check"><span class="glyphicon glyphicon-ok"></span></div>' );
-											self.$element.trigger( 'itemSelected.fu.repeater', $row );
-										}
-									} );
-									// allow selection via enter key
-									$item.keyup( function( e ) {
-										if ( e.keyCode === 13 ) {
-											$item.trigger( 'click.fu.repeater-list' );
-										}
-									} );
-								}
-
-
-
-								this.list_curRowIndex = helpers.index;
-								callback( {
-									item: $item
-								} );
-							},
-							repeat: 'data.items',
-							nested: [ {
-								after: function( helpers, callback ) {
-									var obj = {
-										container: helpers.container
-									};
-									if ( helpers.item !== undefined ) {
-										obj.item = helpers.item;
-									}
-									if ( this.options.list_columnRendered ) {
-										this.options.list_columnRendered( obj, function() {
-											callback();
-										} );
-									} else {
-										callback();
-									}
-								},
-								render: function( helpers, callback ) {
-									var cssClass = helpers.subset[ helpers.index ].cssClass;
-									var content = helpers.data.items[ this.list_curRowIndex ][ helpers.subset[ helpers.index ].property ];
-									var $item = $( '<td></td>' );
-									var width = helpers.subset[ helpers.index ]._auto_width;
-
-									$item.addClass( ( ( cssClass !== undefined ) ? cssClass : '' ) ).append( content );
-									if ( width !== undefined ) {
-										$item.outerWidth( width );
-									}
-									callback( {
-										item: $item
-									} );
-								},
-								repeat: 'this.list_columns'
-							} ]
-						} ]
-					} ]
-				},
-				resize: function( helpers, callback ) {
-					columnSyncing.call( this, {
-						data: {
-							items: [ '' ]
-						}
-					}, callback );
-				}
-			};
-
-			var columnSyncing = function( helpers, callback ) {
-				var i = 0;
-				var widths = [];
-				var $header, $items;
-
-				if ( !this.options.list_columnSyncing || ( helpers.data.items.length < 1 ) ) {
-					callback();
-				} else {
-					$header = this.$element.find( '.repeater-list-header:first' );
-					$items = this.$element.find( '.repeater-list-items:first' );
-					$items.find( 'tr:first td' ).each( function() {
-						widths.push( $( this ).outerWidth() );
-					} );
-					widths.pop();
-					$header.find( 'td' ).each( function() {
-						if ( widths[ i ] !== undefined ) {
-							$( this ).outerWidth( widths[ i ] );
-						}
-						i++;
-					} );
-					callback();
-				}
-			};
-		}
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Repeater - Thumbnail View Plugin
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		if ( $.fn.repeater ) {
-
-			$.fn.repeater.defaults = $.extend( {}, $.fn.repeater.defaults, {
-				thumbnail_infiniteScroll: false,
-				thumbnail_itemRendered: null,
-				thumbnail_template: '<div class="thumbnail repeater-thumbnail" style="background-color: {{color}};"><img height="75" src="{{src}}" width="65"><span>{{name}}</span></div>'
-			} );
-
-			$.fn.repeater.views.thumbnail = {
-				selected: function( helpers, callback ) {
-					var infScroll = this.options.thumbnail_infiniteScroll;
-					var opts;
-					if ( infScroll ) {
-						opts = ( typeof infScroll === 'object' ) ? infScroll : {};
-						this.infiniteScrolling( true, opts );
-					}
-					callback( {} );
-				},
-				renderer: {
-					render: function( helpers, callback ) {
-						var $item = this.$element.find( '.repeater-thumbnail-cont' );
-						var obj = {};
-						var $empty;
-						if ( $item.length > 0 ) {
-							obj.action = 'none';
-						} else {
-							$item = $( '<div class="clearfix repeater-thumbnail-cont" data-container="true" data-infinite="true" data-preserve="shallow"></div>' );
-						}
-						obj.item = $item;
-						if ( helpers.data.items.length < 1 ) {
-							obj.skipNested = true;
-							$empty = $( '<div class="empty"></div>' );
-							$empty.append( this.options.thumbnail_noItemsHTML );
-							$item.append( $empty );
-						} else {
-							$item.find( '.empty:first' ).remove();
-						}
-						callback( obj );
-					},
-					nested: [ {
-						after: function( helpers, callback ) {
-							var obj = {
-								container: helpers.container
-							};
-							if ( helpers.item !== undefined ) {
-								obj.item = helpers.item;
-							}
-							if ( this.options.thumbnail_itemRendered ) {
-								this.options.thumbnail_itemRendered( obj, function() {
-									callback();
-								} );
-							} else {
-								callback();
-							}
-						},
-						render: function( helpers, callback ) {
-							var item = helpers.subset[ helpers.index ];
-							var template = function( str ) {
-								var invalid = false;
-								var replace = function() {
-									var end, start, val;
-
-									start = str.indexOf( '{{' );
-									end = str.indexOf( '}}', start + 2 );
-
-									if ( start > -1 && end > -1 ) {
-										val = $.trim( str.substring( start + 2, end ) );
-										val = ( item[ val ] !== undefined ) ? item[ val ] : '';
-										str = str.substring( 0, start ) + val + str.substring( end + 2 );
-									} else {
-										invalid = true;
-									}
-								};
-
-								while ( !invalid && str.search( '{{' ) >= 0 ) {
-									replace( str );
-								}
-								return str;
-							};
-							callback( {
-								item: template( this.options.thumbnail_template )
-							} );
-						},
-						repeat: 'data.items'
-					} ]
-				}
-			};
-
-		}
-
-
-	} )( jQuery );
-
-
-	( function( $ ) {
-
-		/*
-		 * Fuel UX Scheduler
-		 * https://github.com/ExactTarget/fuelux
-		 *
-		 * Copyright (c) 2014 ExactTarget
-		 * Licensed under the BSD New license.
-		 */
-
-
-
-		// -- BEGIN MODULE CODE HERE --
-
-		var old = $.fn.scheduler;
-
-		// SCHEDULER CONSTRUCTOR AND PROTOTYPE
-
-		var Scheduler = function( element, options ) {
-			var self = this;
-
-			this.$element = $( element );
-			this.options = $.extend( {}, $.fn.scheduler.defaults, options );
-
-			// cache elements
-			this.$startDate = this.$element.find( '.start-datetime .start-date' );
-			this.$startTime = this.$element.find( '.start-datetime .start-time' );
-
-			this.$timeZone = this.$element.find( '.timezone-container .timezone' );
-
-			this.$repeatIntervalPanel = this.$element.find( '.repeat-every-panel' );
-			this.$repeatIntervalSelect = this.$element.find( '.repeat-options' );
-
-			this.$repeatIntervalSpinbox = this.$element.find( '.repeat-every' );
-			this.$repeatIntervalTxt = this.$element.find( '.repeat-every-text' );
-
-			this.$end = this.$element.find( '.repeat-end' );
-			this.$endSelect = this.$end.find( '.end-options' );
-			this.$endAfter = this.$end.find( '.end-after' );
-			this.$endDate = this.$end.find( '.end-on-date' );
-
-			// panels
-			this.$recurrencePanels = this.$element.find( '.repeat-panel' );
-
-
-			this.$repeatIntervalSelect.selectlist();
-
-			//initialize sub-controls
-			this.$element.find( '.selectlist' ).selectlist();
-			this.$startDate.datepicker();
-			this.$startTime.combobox();
-			// init start time
-			if ( this.$startTime.find( 'input' ).val() === '' ) {
-				this.$startTime.combobox( 'selectByIndex', 0 );
-			}
-			// every 0 days/hours doesn't make sense, change if not set
-			if ( this.$repeatIntervalSpinbox.find( 'input' ).val() === '0' ) {
-				this.$repeatIntervalSpinbox.spinbox( {
-					'value': 1,
-					'min': 1
-				} );
-			} else {
-				this.$repeatIntervalSpinbox.spinbox( {
-					'min': 1
-				} );
-			}
-			this.$endAfter.spinbox( {
-				'value': 1,
-				'min': 1
-			} );
-			this.$endDate.datepicker();
-			this.$element.find( '.radio-custom' ).radio();
-
-			// bind events: 'change' is a Bootstrap JS fired event
-			this.$repeatIntervalSelect.on( 'changed.fu.selectlist', $.proxy( this.repeatIntervalSelectChanged, this ) );
-			this.$endSelect.on( 'changed.fu.selectlist', $.proxy( this.endSelectChanged, this ) );
-			this.$element.find( '.repeat-days-of-the-week .btn-group .btn' ).on( 'change.fu.scheduler', function( e, data ) {
-				self.changed( e, data, true );
-			} );
-			this.$element.find( '.combobox' ).on( 'changed.fu.combobox', $.proxy( this.changed, this ) );
-			this.$element.find( '.datepicker' ).on( 'changed.fu.datepicker', $.proxy( this.changed, this ) );
-			this.$element.find( '.selectlist' ).on( 'changed.fu.selectlist', $.proxy( this.changed, this ) );
-			this.$element.find( '.spinbox' ).on( 'changed.fu.spinbox', $.proxy( this.changed, this ) );
-			this.$element.find( '.repeat-monthly .radio, .repeat-yearly .radio' ).on( 'change.fu.scheduler', $.proxy( this.changed, this ) );
-
-		};
-
-		Scheduler.prototype = {
-			constructor: Scheduler,
-
-			destroy: function() {
-
-				var markup;
-				// set input value attribute
-				this.$element.find( 'input' ).each( function() {
-					$( this ).attr( 'value', $( this ).val() );
-				} );
-
-				// empty elements to return to original markup and store
-				this.$element.find( '.datepicker .calendar' ).empty();
-
-				markup = this.$element[ 0 ].outerHTML;
-
-				// destroy components
-				this.$element.find( '.combobox' ).combobox( 'destroy' );
-				this.$element.find( '.datepicker' ).datepicker( 'destroy' );
-				this.$element.find( '.selectlist' ).selectlist( 'destroy' );
-				this.$element.find( '.spinbox' ).spinbox( 'destroy' );
-				this.$element.find( '[type=radio]' ).radio( 'destroy' );
-				this.$element.remove();
-
-				// any external bindings
-				// [none]
-
-				return markup;
-			},
-
-			changed: function( e, data, propagate ) {
-				if ( !propagate ) {
-					e.stopPropagation();
-				}
-				this.$element.trigger( 'changed.fu.scheduler', {
-					data: ( data !== undefined ) ? data : $( e.currentTarget ).data(),
-					originalEvent: e,
-					value: this.getValue()
-				} );
-			},
-
-			disable: function() {
-				this.toggleState( 'disable' );
-			},
-
-			enable: function() {
-				this.toggleState( 'enable' );
-			},
-
-			// called when the end range changes
-			// (Never, After, On date)
-			endSelectChanged: function( e, data ) {
-				var selectedItem, val;
-
-				if ( !data ) {
-					selectedItem = this.$endSelect.selectlist( 'selectedItem' );
-					val = selectedItem.value;
-				} else {
-					val = data.value;
-				}
-
-				// hide all panels
-				this.$endAfter.parent().addClass( 'hide' );
-				this.$endAfter.parent().attr( 'aria-hidden', 'true' );
-
-				this.$endDate.parent().addClass( 'hide' );
-				this.$endDate.parent().attr( 'aria-hidden', 'true' );
-
-				if ( val === 'after' ) {
-					this.$endAfter.parent().removeClass( 'hide' );
-					this.$endAfter.parent().attr( 'aria-hidden', 'false' );
-				} else if ( val === 'date' ) {
-					this.$endDate.parent().removeClass( 'hide' );
-					this.$endDate.parent().attr( 'aria-hidden', 'false' );
-				}
-			},
-
-			getValue: function() {
-				// FREQ = frequency (hourly, daily, monthly...)
-				// BYDAY = when picking days (MO,TU,WE,etc)
-				// BYMONTH = when picking months (Jan,Feb,March) - note the values should be 1,2,3...
-				// BYMONTHDAY = when picking days of the month (1,2,3...)
-				// BYSETPOS = when picking First,Second,Third,Fourth,Last (1,2,3,4,-1)
-
-				var interval = this.$repeatIntervalSpinbox.spinbox( 'value' );
-				var pattern = '';
-				var repeat = this.$repeatIntervalSelect.selectlist( 'selectedItem' ).value;
-				var startTime = this.$startTime.combobox( 'selectedItem' ).text.toLowerCase();
-				var timeZone = this.$timeZone.selectlist( 'selectedItem' );
-				var getFormattedDate;
-
-				getFormattedDate = function( dateObj, dash ) {
-					var fdate = '';
-					var item;
-
-					fdate += dateObj.getFullYear();
-					fdate += dash;
-					item = dateObj.getMonth() + 1; //because 0 indexing makes sense when dealing with months /sarcasm
-					fdate += ( item < 10 ) ? '0' + item : item;
-					fdate += dash;
-					item = dateObj.getDate();
-					fdate += ( item < 10 ) ? '0' + item : item;
-
-					return fdate;
-				};
-
-				var day, days, hasAm, hasPm, month, pos, startDateTime, type;
-
-				startDateTime = '' + getFormattedDate( this.$startDate.datepicker( 'getDate' ), '-' );
-
-				startDateTime += 'T';
-				hasAm = ( startTime.search( 'am' ) >= 0 );
-				hasPm = ( startTime.search( 'pm' ) >= 0 );
-				startTime = $.trim( startTime.replace( /am/g, '' ).replace( /pm/g, '' ) ).split( ':' );
-				startTime[ 0 ] = parseInt( startTime[ 0 ], 10 );
-				startTime[ 1 ] = parseInt( startTime[ 1 ], 10 );
-				if ( hasAm && startTime[ 0 ] > 11 ) {
-					startTime[ 0 ] = 0;
-				} else if ( hasPm && startTime[ 0 ] < 12 ) {
-					startTime[ 0 ] += 12;
-				}
-				startDateTime += ( startTime[ 0 ] < 10 ) ? '0' + startTime[ 0 ] : startTime[ 0 ];
-				startDateTime += ':';
-				startDateTime += ( startTime[ 1 ] < 10 ) ? '0' + startTime[ 1 ] : startTime[ 1 ];
-
-				startDateTime += ( timeZone.offset === '+00:00' ) ? 'Z' : timeZone.offset;
-
-				if ( repeat === 'none' ) {
-					pattern = 'FREQ=DAILY;INTERVAL=1;COUNT=1;';
-				} else if ( repeat === 'hourly' ) {
-					pattern = 'FREQ=HOURLY;';
-					pattern += 'INTERVAL=' + interval + ';';
-				} else if ( repeat === 'daily' ) {
-					pattern += 'FREQ=DAILY;';
-					pattern += 'INTERVAL=' + interval + ';';
-				} else if ( repeat === 'weekdays' ) {
-					pattern += 'FREQ=DAILY;';
-					pattern += 'BYDAY=MO,TU,WE,TH,FR;';
-					pattern += 'INTERVAL=1;';
-				} else if ( repeat === 'weekly' ) {
-					days = [];
-					this.$element.find( '.repeat-days-of-the-week .btn-group input:checked' ).each( function() {
-						days.push( $( this ).data().value );
-					} );
-
-					pattern += 'FREQ=WEEKLY;';
-					pattern += 'BYDAY=' + days.join( ',' ) + ';';
-					pattern += 'INTERVAL=' + interval + ';';
-				} else if ( repeat === 'monthly' ) {
-					pattern += 'FREQ=MONTHLY;';
-					pattern += 'INTERVAL=' + interval + ';';
-					type = this.$element.find( 'input[name=repeat-monthly]:checked' ).val();
-
-					if ( type === 'bymonthday' ) {
-						day = parseInt( this.$element.find( '.repeat-monthly-date .selectlist' ).selectlist( 'selectedItem' ).text, 10 );
-						pattern += 'BYMONTHDAY=' + day + ';';
-					} else if ( type === 'bysetpos' ) {
-						days = this.$element.find( '.month-days' ).selectlist( 'selectedItem' ).value;
-						pos = this.$element.find( '.month-day-pos' ).selectlist( 'selectedItem' ).value;
-						pattern += 'BYDAY=' + days + ';';
-						pattern += 'BYSETPOS=' + pos + ';';
-					}
-
-				} else if ( repeat === 'yearly' ) {
-					pattern += 'FREQ=YEARLY;';
-					type = this.$element.find( 'input[name=repeat-yearly]:checked' ).val();
-
-					if ( type === 'bymonthday' ) {
-						month = this.$element.find( '.repeat-yearly-date .year-month' ).selectlist( 'selectedItem' ).value;
-						day = this.$element.find( '.year-month-day' ).selectlist( 'selectedItem' ).text;
-						pattern += 'BYMONTH=' + month + ';';
-						pattern += 'BYMONTHDAY=' + day + ';';
-					} else if ( type === 'bysetpos' ) {
-						days = this.$element.find( '.year-month-days' ).selectlist( 'selectedItem' ).value;
-						pos = this.$element.find( '.year-month-day-pos' ).selectlist( 'selectedItem' ).value;
-						month = this.$element.find( '.repeat-yearly-day .year-month' ).selectlist( 'selectedItem' ).value;
-
-						pattern += 'BYDAY=' + days + ';';
-						pattern += 'BYSETPOS=' + pos + ';';
-						pattern += 'BYMONTH=' + month + ';';
-					}
-
-				}
-
-				var end = this.$endSelect.selectlist( 'selectedItem' ).value;
-				var duration = '';
-
-				// if both UNTIL and COUNT are not specified, the recurrence will repeat forever
-				// http://tools.ietf.org/html/rfc2445#section-4.3.10
-				if ( repeat !== 'none' ) {
-					if ( end === 'after' ) {
-						duration = 'COUNT=' + this.$endAfter.spinbox( 'value' ) + ';';
-					} else if ( end === 'date' ) {
-						duration = 'UNTIL=' + getFormattedDate( this.$endDate.datepicker( 'getDate' ), '' ) + ';';
-					}
-				}
-
-				pattern += duration;
-
-				var data = {
-					startDateTime: startDateTime,
-					timeZone: {
-						name: timeZone.name,
-						offset: timeZone.offset
-					},
-					recurrencePattern: pattern
-				};
-
-				return data;
-			},
-
-			// called when the repeat interval changes
-			// (None, Hourly, Daily, Weekdays, Weekly, Monthly, Yearly
-			repeatIntervalSelectChanged: function( e, data ) {
-				var selectedItem, val, txt;
-
-				if ( !data ) {
-					selectedItem = this.$repeatIntervalSelect.selectlist( 'selectedItem' );
-					val = selectedItem.value;
-					txt = selectedItem.text;
-				} else {
-					val = data.value;
-					txt = data.text;
-				}
-
-				// set the text
-				this.$repeatIntervalTxt.text( txt );
-
-				switch ( val.toLowerCase() ) {
-					case 'hourly':
-					case 'daily':
-					case 'weekly':
-					case 'monthly':
-						this.$repeatIntervalPanel.removeClass( 'hide' );
-						this.$repeatIntervalPanel.attr( 'aria-hidden', 'false' );
-						break;
-					default:
-						this.$repeatIntervalPanel.addClass( 'hide' );
-						this.$repeatIntervalPanel.attr( 'aria-hidden', 'true' );
-						break;
-				}
-
-				// hide all panels
-				this.$recurrencePanels.addClass( 'hide' );
-				this.$recurrencePanels.attr( 'aria-hidden', 'true' );
-
-				// show panel for current selection
-				this.$element.find( '.repeat-' + val ).removeClass( 'hide' );
-				this.$element.find( '.repeat-' + val ).attr( 'aria-hidden', 'false' );
-
-				// the end selection should only be shown when
-				// the repeat interval is not "None (run once)"
-				if ( val === 'none' ) {
-					this.$end.addClass( 'hide' );
-					this.$end.attr( 'aria-hidden', 'true' );
-				} else {
-					this.$end.removeClass( 'hide' );
-					this.$end.attr( 'aria-hidden', 'false' );
-				}
-			},
-
-			setValue: function( options ) {
-				var hours, i, item, l, minutes, period, recur, temp;
-
-				if ( options.startDateTime ) {
-					temp = options.startDateTime.split( 'T' );
-					this.$startDate.datepicker( 'setDate', temp[ 0 ] );
-
-					if ( temp[ 1 ] ) {
-						temp[ 1 ] = temp[ 1 ].split( ':' );
-						hours = parseInt( temp[ 1 ][ 0 ], 10 );
-						minutes = ( temp[ 1 ][ 1 ] ) ? parseInt( temp[ 1 ][ 1 ].split( '+' )[ 0 ].split( '-' )[ 0 ].split( 'Z' )[ 0 ], 10 ) : 0;
-						period = ( hours < 12 ) ? 'AM' : 'PM';
-
-						if ( hours === 0 ) {
-							hours = 12;
-						} else if ( hours > 12 ) {
-							hours -= 12;
-						}
-						minutes = ( minutes < 10 ) ? '0' + minutes : minutes;
-
-						temp = hours + ':' + minutes + ' ' + period;
-						this.$startTime.find( 'input' ).val( temp );
-						this.$startTime.combobox( 'selectByText', temp );
-					}
-				}
-
-				item = 'li[data';
-				if ( options.timeZone ) {
-					if ( typeof( options.timeZone ) === 'string' ) {
-						item += '-name="' + options.timeZone;
-					} else {
-						if ( options.timeZone.name ) {
-							item += '-name="' + options.timeZone.name;
-						} else {
-							item += '-offset="' + options.timeZone.offset;
-						}
-					}
-					item += '"]';
-					this.$timeZone.selectlist( 'selectBySelector', item );
-				} else if ( options.startDateTime ) {
-					temp = options.startDateTime.split( 'T' )[ 1 ];
-					if ( temp ) {
-						if ( temp.search( /\+/ ) > -1 ) {
-							temp = '+' + $.trim( temp.split( '+' )[ 1 ] );
-						} else if ( temp.search( /\-/ ) > -1 ) {
-							temp = '-' + $.trim( temp.split( '-' )[ 1 ] );
-						} else {
-							temp = '+00:00';
-						}
-					} else {
-						temp = '+00:00';
-					}
-					item += '-offset="' + temp + '"]';
-					this.$timeZone.selectlist( 'selectBySelector', item );
-				}
-
-				if ( options.recurrencePattern ) {
-					recur = {};
-					temp = options.recurrencePattern.toUpperCase().split( ';' );
-					for ( i = 0, l = temp.length; i < l; i++ ) {
-						if ( temp[ i ] !== '' ) {
-							item = temp[ i ].split( '=' );
-							recur[ item[ 0 ] ] = item[ 1 ];
-						}
-					}
-
-					if ( recur.FREQ === 'DAILY' ) {
-						if ( recur.BYDAY === 'MO,TU,WE,TH,FR' ) {
-							item = 'weekdays';
-						} else {
-							if ( recur.INTERVAL === '1' && recur.COUNT === '1' ) {
-								item = 'none';
-							} else {
-								item = 'daily';
-							}
-						}
-					} else if ( recur.FREQ === 'HOURLY' ) {
-						item = 'hourly';
-					} else if ( recur.FREQ === 'WEEKLY' ) {
-						if ( recur.BYDAY ) {
-							item = this.$element.find( '.repeat-days-of-the-week .btn-group' );
-							item.find( 'label' ).removeClass( 'active' );
-							temp = recur.BYDAY.split( ',' );
-							for ( i = 0, l = temp.length; i < l; i++ ) {
-								item.find( 'input[data-value="' + temp[ i ] + '"]' ).parent().addClass( 'active' );
-							}
-						}
-						item = 'weekly';
-					} else if ( recur.FREQ === 'MONTHLY' ) {
-						this.$element.find( '.repeat-monthly input' ).removeAttr( 'checked' ).removeClass( 'checked' );
-						this.$element.find( '.repeat-monthly label.radio-custom' ).removeClass( 'checked' );
-						if ( recur.BYMONTHDAY ) {
-							temp = this.$element.find( '.repeat-monthly-date' );
-							temp.find( 'input' ).addClass( 'checked' ).attr( 'checked', 'checked' );
-							temp.find( 'label.radio-custom' ).addClass( 'checked' );
-							temp.find( '.selectlist' ).selectlist( 'selectByValue', recur.BYMONTHDAY );
-						} else if ( recur.BYDAY ) {
-							temp = this.$element.find( '.repeat-monthly-day' );
-							temp.find( 'input' ).addClass( 'checked' ).attr( 'checked', 'checked' );
-							temp.find( 'label.radio-custom' ).addClass( 'checked' );
-							if ( recur.BYSETPOS ) {
-								temp.find( '.month-day-pos' ).selectlist( 'selectByValue', recur.BYSETPOS );
-							}
-							temp.find( '.month-days' ).selectlist( 'selectByValue', recur.BYDAY );
-						}
-						item = 'monthly';
-					} else if ( recur.FREQ === 'YEARLY' ) {
-						this.$element.find( '.repeat-yearly input' ).removeAttr( 'checked' ).removeClass( 'checked' );
-						this.$element.find( '.repeat-yearly label.radio-custom' ).removeClass( 'checked' );
-						if ( recur.BYMONTHDAY ) {
-							temp = this.$element.find( '.repeat-yearly-date' );
-							temp.find( 'input' ).addClass( 'checked' ).attr( 'checked', 'checked' );
-							temp.find( 'label.radio-custom' ).addClass( 'checked' );
-							if ( recur.BYMONTH ) {
-								temp.find( '.year-month' ).selectlist( 'selectByValue', recur.BYMONTH );
-							}
-							temp.find( '.year-month-day' ).selectlist( 'selectByValue', recur.BYMONTHDAY );
-						} else if ( recur.BYSETPOS ) {
-							temp = this.$element.find( '.repeat-yearly-day' );
-							temp.find( 'input' ).addClass( 'checked' ).attr( 'checked', 'checked' );
-							temp.find( 'label.radio-custom' ).addClass( 'checked' );
-							temp.find( '.year-month-day-pos' ).selectlist( 'selectByValue', recur.BYSETPOS );
-							if ( recur.BYDAY ) {
-								temp.find( '.year-month-days' ).selectlist( 'selectByValue', recur.BYDAY );
-							}
-							if ( recur.BYMONTH ) {
-								temp.find( '.year-month' ).selectlist( 'selectByValue', recur.BYMONTH );
-							}
-						}
-						item = 'yearly';
-					} else {
-						item = 'none';
-					}
-
-					if ( recur.COUNT ) {
-						this.$endAfter.spinbox( 'value', parseInt( recur.COUNT, 10 ) );
-						this.$endSelect.selectlist( 'selectByValue', 'after' );
-					} else if ( recur.UNTIL ) {
-						temp = recur.UNTIL;
-						if ( temp.length === 8 ) {
-							temp = temp.split( '' );
-							temp.splice( 4, 0, '-' );
-							temp.splice( 7, 0, '-' );
-							temp = temp.join( '' );
-						}
-						this.$endDate.datepicker( 'setDate', temp );
-						this.$endSelect.selectlist( 'selectByValue', 'date' );
-					}
-					this.endSelectChanged();
-
-					if ( recur.INTERVAL ) {
-						this.$repeatIntervalSpinbox.spinbox( 'value', parseInt( recur.INTERVAL, 10 ) );
-					}
-					this.$repeatIntervalSelect.selectlist( 'selectByValue', item );
-					this.repeatIntervalSelectChanged();
-				}
-			},
-
-			toggleState: function( action ) {
-				this.$element.find( '.combobox' ).combobox( action );
-				this.$element.find( '.datepicker' ).datepicker( action );
-				this.$element.find( '.selectlist' ).selectlist( action );
-				this.$element.find( '.spinbox' ).spinbox( action );
-				this.$element.find( '[type=radio]' ).radio( action );
-
-				if ( action === 'disable' ) {
-					action = 'addClass';
-				} else {
-					action = 'removeClass';
-				}
-				this.$element.find( '.repeat-days-of-the-week .btn-group' )[ action ]( 'disabled' );
-			},
-
-			value: function( options ) {
-				if ( options ) {
-					return this.setValue( options );
-				} else {
-					return this.getValue();
-				}
-			}
-		};
-
-
-		// SCHEDULER PLUGIN DEFINITION
-
-		$.fn.scheduler = function( option ) {
-			var args = Array.prototype.slice.call( arguments, 1 );
-			var methodReturn;
-
-			var $set = this.each( function() {
-				var $this = $( this );
-				var data = $this.data( 'fu.scheduler' );
-				var options = typeof option === 'object' && option;
-
-				if ( !data ) $this.data( 'fu.scheduler', ( data = new Scheduler( this, options ) ) );
-				if ( typeof option === 'string' ) methodReturn = data[ option ].apply( data, args );
-			} );
-
-			return ( methodReturn === undefined ) ? $set : methodReturn;
-		};
-
-		$.fn.scheduler.defaults = {};
-
-		$.fn.scheduler.Constructor = Scheduler;
-
-		$.fn.scheduler.noConflict = function() {
-			$.fn.scheduler = old;
-			return this;
-		};
-
-
-		// DATA-API
-
-		$( document ).on( 'mousedown.fu.scheduler.data-api', '[data-initialize=scheduler]', function( e ) {
-			var $control = $( e.target ).closest( '.scheduler' );
-			if ( !$control.data( 'fu.scheduler' ) ) {
-				$control.scheduler( $control.data() );
-			}
-		} );
-
-		// Must be domReady for AMD compatibility
-		$( function() {
-			$( '[data-initialize=scheduler]' ).each( function() {
-				var $this = $( this );
-				if ( $this.data( 'scheduler' ) ) return;
-				$this.scheduler( $this.data() );
-			} );
-		} );
-
-
-
-	} )( jQuery );
-
-
-} ) );
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/js/fuelux.min.js b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/js/fuelux.min.js
deleted file mode 100644
index b4694af73d4122b5291f128c4828811b8bfa0312..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/fuelux/js/fuelux.min.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Fuel UX v3.0.2 
- * Copyright 2012-2014 ExactTarget
- * Licensed under the BSD-3-Clause license ()
- */
-!function(a){"function"==typeof define&&define.amd?define(["jquery","bootstrap"],a):a(jQuery)}(function(a){if("undefined"==typeof a)throw new Error("Fuel UX's JavaScript requires jQuery");if("undefined"==typeof a.fn.dropdown||"undefined"==typeof a.fn.collapse)throw new Error("Fuel UX's JavaScript requires Bootstrap");!function(a){var b=a.fn.checkbox,c=function(b,c){this.options=a.extend({},a.fn.checkbox.defaults,c),this.$element=a(b).is('input[type="checkbox"]')?a(b):a(b).find('input[type="checkbox"]:first'),this.$label=this.$element.parent(),this.$parent=this.$label.parent(".checkbox"),this.$toggleContainer=this.$element.attr("data-toggle"),this.state={disabled:!1,checked:!1},0===this.$parent.length&&(this.$parent=null),this.$toggleContainer=Boolean(this.$toggleContainer)?a(this.$toggleContainer):null,this.$element.on("change.fu.checkbox",a.proxy(this.itemchecked,this)),this.setState()};c.prototype={constructor:c,setState:function(a){a=a||this.$element,this.state.disabled=Boolean(a.prop("disabled")),this.state.checked=Boolean(a.is(":checked")),this._resetClasses(),this._toggleCheckedState(),this._toggleDisabledState(),this.toggleContainer()},enable:function(){this.state.disabled=!1,this.$element.attr("disabled",!1),this._resetClasses(),this.$element.trigger("enabled.fu.checkbox")},disable:function(){this.state.disabled=!0,this.$element.attr("disabled",!0),this._setDisabledClass(),this.$element.trigger("disabled.fu.checkbox")},check:function(){this.state.checked=!0,this.$element.prop("checked",!0),this._setCheckedClass(),this.$element.trigger("checked.fu.checkbox")},uncheck:function(){this.state.checked=!1,this.$element.prop("checked",!1),this._resetClasses(),this.$element.trigger("unchecked.fu.checkbox")},isChecked:function(){return this.state.checked},toggle:function(){this.state.checked=!this.state.checked,this._toggleCheckedState()},toggleContainer:function(){Boolean(this.$toggleContainer)&&(this.state.checked?(this.$toggleContainer.removeClass("hide"),this.$toggleContainer.attr("aria-hidden","false")):(this.$toggleContainer.addClass("hide"),this.$toggleContainer.attr("aria-hidden","true")))},itemchecked:function(b){this.setState(a(b.target))},destroy:function(){return this.$parent.remove(),this.$parent[0].outerHTML},_resetClasses:function(){var a=[];this.state.checked||a.push("checked"),this.state.disabled||a.push("disabled"),a=a.join(" "),this.$label.removeClass(a),this.$parent&&this.$parent.removeClass(a)},_toggleCheckedState:function(){this.state.checked?this.check():this.uncheck()},_toggleDisabledState:function(){this.state.disabled?this.disable():this.enable()},_setCheckedClass:function(){this.$label.addClass("checked"),this.$parent&&this.$parent.addClass("checked")},_setDisabledClass:function(){this.$label.addClass("disabled"),this.$parent&&this.$parent.addClass("disabled")}},a.fn.checkbox=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.checkbox"),h="object"==typeof b&&b;g||f.data("fu.checkbox",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.checkbox.defaults={},a.fn.checkbox.Constructor=c,a.fn.checkbox.noConflict=function(){return a.fn.checkbox=b,this},a(document).on("mouseover.fu.checkbox.data-api","[data-initialize=checkbox]",function(b){var c=a(b.target).closest(".checkbox").find("[type=checkbox]");c.data("fu.checkbox")||c.checkbox(c.data())}),a(function(){a("[data-initialize=checkbox] [type=checkbox]").each(function(){var b=a(this);b.data("fu.checkbox")||b.checkbox(b.data())})})}(a),function(a){var b=a.fn.combobox,c=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.combobox.defaults,c),this.$dropMenu=this.$element.find(".dropdown-menu"),this.$input=this.$element.find("input"),this.$button=this.$element.find(".btn"),this.$element.on("click.fu.combobox","a",a.proxy(this.itemclicked,this)),this.$element.on("change.fu.combobox","input",a.proxy(this.inputchanged,this)),this.$element.on("shown.bs.dropdown",a.proxy(this.menuShown,this)),this.setDefaultSelection()};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element.find("input").each(function(){a(this).attr("value",a(this).val())}),this.$element[0].outerHTML},doSelect:function(a){"undefined"!=typeof a[0]?(this.$selectedItem=a,this.$input.val(this.$selectedItem.text())):this.$selectedItem=null},menuShown:function(){this.options.autoResizeMenu&&this.resizeMenu()},resizeMenu:function(){var a=this.$element.outerWidth();this.$dropMenu.outerWidth(a)},selectedItem:function(){var b=this.$selectedItem,c={};if(b){var d=this.$selectedItem.text();c=a.extend({text:d},this.$selectedItem.data())}else c={text:this.$input.val()};return c},selectByText:function(b){var c=a([]);this.$element.find("li").each(function(){return(this.textContent||this.innerText||a(this).text()||"").toLowerCase()===(b||"").toLowerCase()?(c=a(this),!1):void 0}),this.doSelect(c)},selectByValue:function(a){var b='li[data-value="'+a+'"]';this.selectBySelector(b)},selectByIndex:function(a){var b="li:eq("+a+")";this.selectBySelector(b)},selectBySelector:function(a){var b=this.$element.find(a);this.doSelect(b)},setDefaultSelection:function(){var a="li[data-selected=true]:first",b=this.$element.find(a);b.length>0&&(this.selectBySelector(a),b.removeData("selected"),b.removeAttr("data-selected"))},enable:function(){this.$element.removeClass("disabled"),this.$input.removeAttr("disabled"),this.$button.removeClass("disabled")},disable:function(){this.$element.addClass("disabled"),this.$input.attr("disabled",!0),this.$button.addClass("disabled")},itemclicked:function(b){this.$selectedItem=a(b.target).parent(),this.$input.val(this.$selectedItem.text()).trigger("change",{synthetic:!0});var c=this.selectedItem();this.$element.trigger("changed.fu.combobox",c),b.preventDefault(),this.$element.find(".dropdown-toggle").focus()},inputchanged:function(b,c){if(!c||!c.synthetic){var d=a(b.target).val();this.selectByText(d);var e=this.selectedItem();0===e.text.length&&(e={text:d}),this.$element.trigger("changed.fu.combobox",e)}}},a.fn.combobox=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.combobox"),h="object"==typeof b&&b;g||f.data("fu.combobox",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.combobox.defaults={autoResizeMenu:!0},a.fn.combobox.Constructor=c,a.fn.combobox.noConflict=function(){return a.fn.combobox=b,this},a(document).on("mousedown.fu.combobox.data-api","[data-initialize=combobox]",function(b){var c=a(b.target).closest(".combobox");c.data("fu.combobox")||c.combobox(c.data())}),a(function(){a("[data-initialize=combobox]").each(function(){var b=a(this);b.data("fu.combobox")||b.combobox(b.data())})})}(a),function(a){var b="Invalid Date",c="moment.js is not available so you cannot use this function",d=[],e=!1,f=a.fn.datepicker,g=!1,h=function(){var a,b;for(g=!0,a=0,b=d.length;b>a;a++)d[a].init.call(d[a].scope);d=[]};"function"==typeof define&&define.amd?require(["moment"],function(a){e=a,h()},function(a){var b=a.requireModules&&a.requireModules[0];"moment"===b&&h()}):h();var i=function(b,c){this.$element=a(b),this.options=a.extend(!0,{},a.fn.datepicker.defaults,c),this.$calendar=this.$element.find(".datepicker-calendar"),this.$days=this.$calendar.find(".datepicker-calendar-days"),this.$header=this.$calendar.find(".datepicker-calendar-header"),this.$headerTitle=this.$header.find(".title"),this.$input=this.$element.find("input"),this.$wheels=this.$element.find(".datepicker-wheels"),this.$wheelsMonth=this.$element.find(".datepicker-wheels-month"),this.$wheelsYear=this.$element.find(".datepicker-wheels-year"),this.artificialScrolling=!1,this.formatDate=this.options.formatDate||this.formatDate,this.inputValue=null,this.moment=!1,this.momentFormat=null,this.parseDate=this.options.parseDate||this.parseDate,this.preventBlurHide=!1,this.restricted=this.options.restricted||[],this.restrictedParsed=[],this.restrictedText=this.options.restrictedText,this.sameYearOnly=this.options.sameYearOnly,this.selectedDate=null,this.yearRestriction=null,this.$calendar.find(".datepicker-today").on("click.fu.datepicker",a.proxy(this.todayClicked,this)),this.$days.on("click.fu.datepicker","tr td button",a.proxy(this.dateClicked,this)),this.$element.find(".dropdown-menu").on("mousedown.fu.datepicker",a.proxy(this.dropdownMousedown,this)),this.$header.find(".next").on("click.fu.datepicker",a.proxy(this.next,this)),this.$header.find(".prev").on("click.fu.datepicker",a.proxy(this.prev,this)),this.$headerTitle.on("click.fu.datepicker",a.proxy(this.titleClicked,this)),this.$input.on("blur.fu.datepicker",a.proxy(this.inputBlurred,this)),this.$input.on("focus.fu.datepicker",a.proxy(this.inputFocused,this)),this.$wheels.find(".datepicker-wheels-back").on("click.fu.datepicker",a.proxy(this.backClicked,this)),this.$wheels.find(".datepicker-wheels-select").on("click.fu.datepicker",a.proxy(this.selectClicked,this)),this.$wheelsMonth.on("click.fu.datepicker","ul button",a.proxy(this.monthClicked,this)),this.$wheelsYear.on("click.fu.datepicker","ul button",a.proxy(this.yearClicked,this)),this.$wheelsYear.find("ul").on("scroll.fu.datepicker",a.proxy(this.onYearScroll,this));var f=function(){this.checkForMomentJS()&&(e=e||window.moment,this.moment=!0,this.momentFormat=this.options.momentConfig.format,this.setCulture(this.options.momentConfig.culture)),this.setRestrictedDates(this.restricted),this.setDate(this.options.date)||(this.$input.val(""),this.inputValue=this.$input.val()),this.sameYearOnly&&(this.yearRestriction=this.selectedDate?this.selectedDate.getFullYear():(new Date).getFullYear())};g?f.call(this):d.push({init:f,scope:this})};i.prototype={constructor:i,backClicked:function(){this.changeView("calendar")},changeView:function(a,b){"wheels"===a?(this.$calendar.hide().attr("aria-hidden","true"),this.$wheels.show().removeAttr("aria-hidden",""),b&&this.renderWheel(b)):(this.$wheels.hide().attr("aria-hidden","true"),this.$calendar.show().removeAttr("aria-hidden",""),b&&this.renderMonth(b))},checkForMomentJS:function(){return(a.isFunction(window.moment)||"undefined"!=typeof e&&a.isFunction(e))&&a.isPlainObject(this.options.momentConfig)&&this.options.momentConfig.culture&&this.options.momentConfig.format?!0:!1},dateClicked:function(b){var c,d=a(b.currentTarget).parents("td:first");d.hasClass("restricted")||(this.$days.find("td.selected").removeClass("selected"),d.addClass("selected"),c=new Date(d.attr("data-year"),d.attr("data-month"),d.attr("data-date")),this.selectedDate=c,this.$input.val(this.formatDate(c)),this.inputValue=this.$input.val(),this.$input.focus())},destroy:function(){return this.$element.remove(),this.$days.find("tbody").empty(),this.$wheelsYear.find("ul").empty(),this.$element[0].outerHTML},disable:function(){this.$element.addClass("disabled"),this.$element.find("input, button").attr("disabled","disabled"),this.$element.find(".input-group-btn").removeClass("open")},dropdownMousedown:function(){var a=this;this.preventBlurHide=!0,setTimeout(function(){a.preventBlurHide=!1},0)},enable:function(){this.$element.removeClass("disabled"),this.$element.find("input, button").removeAttr("disabled")},formatDate:function(a){var b=function(a){var b="0"+a;return b.substr(b.length-2)};return this.moment?e(a).format(this.momentFormat):b(a.getMonth()+1)+"/"+b(a.getDate())+"/"+a.getFullYear()},getCulture:function(){if(this.moment)return e.lang();throw c},getDate:function(){return this.selectedDate?this.selectedDate:new Date(0/0)},getFormat:function(){if(this.moment)return this.momentFormat;throw c},getFormattedDate:function(){return this.selectedDate?this.formatDate(this.selectedDate):b},getRestrictedDates:function(){return this.restricted},inputBlurred:function(){var a,b=this.$input.val();b!==this.inputValue&&(a=this.setDate(b),null===a?this.$element.trigger("inputParsingFailed.fu.datepicker",b):a===!1?this.$element.trigger("inputRestrictedDate.fu.datepicker",a):this.$element.trigger("changed.fu.datepicker",a)),this.preventBlurHide||this.$element.find(".input-group-btn").removeClass("open")},inputFocused:function(){this.$element.find(".input-group-btn").addClass("open")},isInvalidDate:function(a){var c=a.toString();return c===b||"NaN"===c?!0:!1},isRestricted:function(a,b,c){var d,e,f,g,h=this.restrictedParsed;if(this.sameYearOnly&&null!==this.yearRestriction&&c!==this.yearRestriction)return!0;for(d=0,f=h.length;f>d;d++)if(e=h[d].from,g=h[d].to,(c>e.year||c===e.year&&b>e.month||c===e.year&&b===e.month&&a>=e.date)&&(c<g.year||c===g.year&&b<g.month||c===g.year&&b===g.month&&a<=g.date))return!0;return!1},monthClicked:function(b){this.$wheelsMonth.find(".selected").removeClass("selected"),a(b.currentTarget).parent().addClass("selected")},next:function(){var a=this.$headerTitle.attr("data-month"),b=this.$headerTitle.attr("data-year");if(a++,a>11){if(this.sameYearOnly)return;a=0,b++}this.renderMonth(new Date(b,a,1))},onYearScroll:function(b){if(!this.artificialScrolling){var c,d,e=a(b.currentTarget),f="border-box"===e.css("box-sizing")?e.outerHeight():e.height(),g=e.get(0).scrollHeight,h=e.scrollTop(),i=f/(g-h)*100,j=h/g*100;if(5>j){for(d=parseInt(e.find("li:first").attr("data-year"),10),c=d-1;c>d-11;c--)e.prepend('<li data-year="'+c+'"><button type="button">'+c+"</button></li>");this.artificialScrolling=!0,e.scrollTop(e.get(0).scrollHeight-g+h),this.artificialScrolling=!1}else if(i>90)for(d=parseInt(e.find("li:last").attr("data-year"),10),c=d+1;d+11>c;c++)e.append('<li data-year="'+c+'"><button type="button">'+c+"</button></li>")}},parseDate:function(a){var b,c,d,f,g,h,i=this;if(a)if(this.moment){if(d=function(a,b){return b="b"===a?e(b,i.momentFormat):e(b),b.isValid()===!0?b.toDate():new Date(0/0)},h="string"==typeof a?["b","a"]:["a","b"],b=d(h[0],a),!this.isInvalidDate(b))return b;if(b=d(h[1],a),!this.isInvalidDate(b))return b}else if("string"==typeof a){if(b=new Date(Date.parse(a)),!this.isInvalidDate(b))return b;if(a=a.split("T")[0],c=/^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,g=c.exec(a),g&&(f=parseInt(g[2],10),b=new Date(g[1],f-1,g[3]),f===b.getMonth()+1))return b}else if(b=new Date(a),!this.isInvalidDate(b))return b;return new Date(0/0)},prev:function(){var a=this.$headerTitle.attr("data-month"),b=this.$headerTitle.attr("data-year");if(a--,0>a){if(this.sameYearOnly)return;a=11,b--}this.renderMonth(new Date(b,a,1))},renderMonth:function(b){b=b||new Date;var c,d,e,f,g,h,i,j,k,l=new Date(b.getFullYear(),b.getMonth(),1).getDay(),m=new Date(b.getFullYear(),b.getMonth()+1,0).getDate(),n=new Date(b.getFullYear(),b.getMonth(),0).getDate(),o=this.$headerTitle.find(".month"),p=b.getMonth(),q=new Date,r=q.getDate(),s=q.getMonth(),t=q.getFullYear(),u=this.selectedDate,v=this.$days.find("tbody"),w=b.getFullYear();for(u&&(u={date:u.getDate(),month:u.getMonth(),year:u.getFullYear()}),o.find(".current").removeClass("current"),o.find('span[data-month="'+p+'"]').addClass("current"),this.$headerTitle.find(".year").text(w),this.$headerTitle.attr({"data-month":p,"data-year":w}),v.empty(),0!==l?(c=n-l+1,i=-1):(c=1,i=0),h=35-l>=m?5:6,f=0;h>f;f++){for(k=a("<tr></tr>"),g=0;7>g;g++)j=a('<td><span><button type="button" class="datepicker-date">'+c+"</button></span></td>"),-1===i?j.addClass("last-month"):1===i&&j.addClass("next-month"),d=p+i,e=w,0>d?(d=11,e--):d>11&&(d=0,e++),j.attr({"data-date":c,"data-month":d,"data-year":e}),e===t&&d===s&&c===r?j.addClass("current-day"):(t>e||e===t&&s>d||e===t&&d===s&&r>c)&&(j.addClass("past"),this.options.allowPastDates||j.addClass("restricted").attr("title",this.restrictedText)),this.isRestricted(c,d,e)&&j.addClass("restricted").attr("title",this.restrictedText),u&&e===u.year&&d===u.month&&c===u.date&&j.addClass("selected"),c++,-1===i&&c>n?(c=1,i=0):0===i&&c>m&&(c=1,i=1),k.append(j);v.append(k)}},renderWheel:function(a){var b,c,d,e=a.getMonth(),f=this.$wheelsMonth.find("ul"),g=a.getFullYear(),h=this.$wheelsYear.find("ul");for(this.sameYearOnly?(this.$wheelsMonth.addClass("full"),this.$wheelsYear.addClass("hide")):(this.$wheelsMonth.removeClass("full"),this.$wheelsYear.removeClass("hide")),f.find(".selected").removeClass("selected"),c=f.find('li[data-month="'+e+'"]'),c.addClass("selected"),f.scrollTop(f.scrollTop()+(c.position().top-f.outerHeight()/2-c.outerHeight(!0)/2)),h.empty(),b=g-10;g+11>b;b++)h.append('<li data-year="'+b+'"><button type="button">'+b+"</button></li>");d=h.find('li[data-year="'+g+'"]'),d.addClass("selected"),this.artificialScrolling=!0,h.scrollTop(h.scrollTop()+(d.position().top-h.outerHeight()/2-d.outerHeight(!0)/2)),this.artificialScrolling=!1,c.find("button").focus()},selectClicked:function(){var a=this.$wheelsMonth.find(".selected").attr("data-month"),b=this.$wheelsYear.find(".selected").attr("data-year");this.changeView("calendar",new Date(b,a,1))},setCulture:function(a){if(!a)return!1;if(!this.moment)throw c;e.lang(a)},setDate:function(a){var b=this.parseDate(a);return this.isInvalidDate(b)?(this.selectedDate=null,this.renderMonth()):this.isRestricted(b.getDate(),b.getMonth(),b.getFullYear())?(this.selectedDate=!1,this.renderMonth()):(this.selectedDate=b,this.renderMonth(b),this.$input.val(this.formatDate(b))),this.inputValue=this.$input.val(),this.selectedDate},setFormat:function(a){if(!a)return!1;if(!this.moment)throw c;this.momentFormat=a},setRestrictedDates:function(a){var b,c,d=[],e=this,f=function(a){return a===-1/0?{date:-1/0,month:-1/0,year:-1/0}:1/0===a?{date:1/0,month:1/0,year:1/0}:(a=e.parseDate(a),{date:a.getDate(),month:a.getMonth(),year:a.getFullYear()})};for(this.restricted=a,b=0,c=a.length;c>b;b++)d.push({from:f(a[b].from),to:f(a[b].to)});this.restrictedParsed=d},titleClicked:function(){this.changeView("wheels",new Date(this.$headerTitle.attr("data-year"),this.$headerTitle.attr("data-month"),1))},todayClicked:function(){var a=new Date;(a.getMonth()+""!==this.$headerTitle.attr("data-month")||a.getFullYear()+""!==this.$headerTitle.attr("data-year"))&&this.renderMonth(a)},yearClicked:function(b){this.$wheelsYear.find(".selected").removeClass("selected"),a(b.currentTarget).parent().addClass("selected")}},a.fn.datepicker=function(b){var c,d=Array.prototype.slice.call(arguments,1),e=this.each(function(){var e=a(this),f=e.data("fu.datepicker"),g="object"==typeof b&&b;f||e.data("fu.datepicker",f=new i(this,g)),"string"==typeof b&&(c=f[b].apply(f,d))});return void 0===c?e:c},a.fn.datepicker.defaults={allowPastDates:!1,date:new Date,formatDate:null,momentConfig:{culture:"en",format:"L"},parseDate:null,restricted:[],restrictedText:"Restricted",sameYearOnly:!1},a.fn.datepicker.Constructor=i,a.fn.datepicker.noConflict=function(){return a.fn.datepicker=f,this},a(document).on("mousedown.fu.datepicker.data-api","[data-initialize=datepicker]",function(b){var c=a(b.target).closest(".datepicker");c.data("datepicker")||c.datepicker(c.data())}),a(document).on("click.fu.datepicker.data-api",".datepicker .dropdown-menu",function(b){var c=a(b.target);(!c.is(".datepicker-date")||c.closest(".restricted").length)&&b.stopPropagation()}),a(document).on("click.fu.datepicker.data-api",".datepicker input",function(a){a.stopPropagation()}),a(function(){a("[data-initialize=datepicker]").each(function(){var b=a(this);b.data("datepicker")||b.datepicker(b.data())})})}(a),function(a){function b(b){a(b).css({visibility:"hidden"}),c(b)?b.parent().addClass("dropup"):b.parent().removeClass("dropup"),a(b).css({visibility:"visible"})}function c(a){var b=d(a),c={};return c.parentHeight=a.parent().outerHeight(),c.parentOffsetTop=a.parent().offset().top,c.dropdownHeight=a.outerHeight(),c.containerHeight=b.overflowElement.outerHeight(),c.containerOffsetTop=b.isWindow?b.overflowElement.scrollTop():b.overflowElement.offset().top,c.fromTop=c.parentOffsetTop-c.containerOffsetTop,c.fromBottom=c.containerHeight-c.parentHeight-(c.parentOffsetTop-c.containerOffsetTop),c.dropdownHeight<c.fromBottom?!1:c.dropdownHeight<c.fromTop?!0:c.dropdownHeight>=c.fromTop&&c.dropdownHeight>=c.fromBottom?c.fromTop>=c.fromBottom?!0:!1:void 0}function d(b){var c=window,d=!0;return a.each(b.parents(),function(b,e){return"visible"!==a(e).css("overflow")?(c=e,d=!1,!1):void 0}),{overflowElement:a(c),isWindow:d}}a(document.body).on("click.fu.dropdown-autoflip","[data-toggle=dropdown][data-flip]",function(){"auto"===a(this).data().flip&&b(a(this).next(".dropdown-menu"))}),a(document.body).on("suggested.fu.pillbox",function(c,d){b(a(d)),a(d).parent().addClass("open")}),a.fn.dropdownautoflip=function(){}}(a),function(a){var b=a.fn.loader,c=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.loader.defaults,c),this.begin=this.$element.is("[data-begin]")?parseInt(this.$element.attr("data-begin"),10):1,this.delay=this.$element.is("[data-delay]")?parseFloat(this.$element.attr("data-delay")):150,this.end=this.$element.is("[data-end]")?parseInt(this.$element.attr("data-end"),10):8,this.frame=this.$element.is("[data-frame]")?parseInt(this.$element.attr("data-frame"),10):this.begin,this.isIElt9=!1,this.timeout={};var d=this.msieVersion();d!==!1&&9>d&&(this.$element.addClass("iefix"),this.isIElt9=!0),this.$element.attr("data-frame",this.frame+""),this.play()};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element[0].outerHTML},ieRepaint:function(){this.isIElt9&&this.$element.addClass("iefix_repaint").removeClass("iefix_repaint")},msieVersion:function(){var a=window.navigator.userAgent,b=a.indexOf("MSIE ");return b>0?parseInt(a.substring(b+5,a.indexOf(".",b)),10):!1},next:function(){this.frame++,this.frame>this.end&&(this.frame=this.begin),this.$element.attr("data-frame",this.frame+""),this.ieRepaint()},pause:function(){clearTimeout(this.timeout)},play:function(){var a=this;clearTimeout(this.timeout),this.timeout=setTimeout(function(){a.next(),a.play()},this.delay)},previous:function(){this.frame--,this.frame<this.begin&&(this.frame=this.end),this.$element.attr("data-frame",this.frame+""),this.ieRepaint()},reset:function(){this.frame=this.begin,this.$element.attr("data-frame",this.frame+""),this.ieRepaint()}},a.fn.loader=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.loader"),h="object"==typeof b&&b;g||f.data("fu.loader",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.loader.defaults={},a.fn.loader.Constructor=c,a.fn.loader.noConflict=function(){return a.fn.loader=b,this},a(function(){a("[data-initialize=loader]").each(function(){var b=a(this);b.data("fu.loader")||b.loader(b.data())})})}(a),function(a){var b=a.fn.placard,c=function(b,c){var d=this;this.$element=a(b),this.options=a.extend({},a.fn.placard.defaults,c),this.$accept=this.$element.find(".placard-accept"),this.$cancel=this.$element.find(".placard-cancel"),this.$field=this.$element.find(".placard-field"),this.$footer=this.$element.find(".placard-footer"),this.$header=this.$element.find(".placard-header"),this.$popup=this.$element.find(".placard-popup"),this.actualValue=null,this.clickStamp="_",this.previousValue="",-1===this.options.revertOnCancel&&(this.options.revertOnCancel=this.$accept.length>0?!0:!1),this.$field.on("focus.fu.placard",a.proxy(this.show,this)),this.$accept.on("click.fu.placard",a.proxy(this.complete,this,"accept")),this.$cancel.on("click.fu.placard",function(a){a.preventDefault(),d.complete("cancel")}),this.ellipsis()};c.prototype={constructor:c,complete:function(a){var b=this.options["on"+a[0].toUpperCase()+a.substring(1)],c={previousValue:this.previousValue,value:this.$field.val()};b?(b(c),this.$element.trigger(a,c)):("cancel"===a&&this.options.revertOnCancel&&this.$field.val(this.previousValue),this.$element.trigger(a,c),this.hide())},destroy:function(){return this.$element.remove(),a(document).off("click.fu.placard.externalClick."+this.clickStamp),this.$element.find("input").each(function(){a(this).attr("value",a(this).val())}),this.$element[0].outerHTML},disable:function(){this.$element.addClass("disabled"),this.$field.attr("disabled","disabled"),this.hide()},ellipsis:function(){var a,b,c;if("true"===this.$element.attr("data-ellipsis"))if(a=this.$field.get(0),this.$field.is("input"))a.scrollLeft=0;else if(a.scrollTop=0,a.clientHeight<a.scrollHeight){for(this.actualValue=this.$field.val(),this.$field.val(""),c="",b=0;a.clientHeight>=a.scrollHeight;)c+=this.actualValue[b],this.$field.val(c+"..."),b++;c=c.length>0?c.substring(0,c.length-1):"",this.$field.val(c+"...")}},enable:function(){this.$element.removeClass("disabled"),this.$field.removeAttr("disabled")},externalClickListener:function(a,b){(b===!0||this.isExternalClick(a))&&this.complete(this.options.externalClickAction)},getValue:function(){return null!==this.actualValue?this.actualValue:this.$field.val()},hide:function(){this.$element.hasClass("showing")&&(this.$element.removeClass("showing"),this.ellipsis(),a(document).off("click.fu.placard.externalClick."+this.clickStamp),this.$element.trigger("hidden.fu.placard"))},isExternalClick:function(b){var c,d,e=this.$element.get(0),f=this.options.externalClickExceptions||[],g=a(b.target);if(b.target===e||g.parents(".placard:first").get(0)===e)return!1;for(c=0,d=f.length;d>c;c++)if(g.is(f[c])||g.parents(f[c]).length>0)return!1;return!0},setValue:function(a){this.$field.val(a),this.$element.hasClass("showing")||this.ellipsis()},show:function(){var b;if(!this.$element.hasClass("showing")){if(b=a(document).find(".placard.showing"),b.length>0){if(b.data("fu.placard")&&b.data("fu.placard").options.explicit)return;b.placard("externalClickListener",{},!0)}this.previousValue=this.$field.val(),this.$element.addClass("showing"),null!==this.actualValue&&(this.$field.val(this.actualValue),this.actualValue=null),this.$header.length>0&&this.$popup.css("top","-"+this.$header.outerHeight(!0)+"px"),this.$footer.length>0&&this.$popup.css("bottom","-"+this.$footer.outerHeight(!0)+"px"),this.$element.trigger("shown.fu.placard"),this.clickStamp=(new Date).getTime()+(Math.floor(100*Math.random())+1),this.options.explicit||a(document).on("click.fu.placard.externalClick."+this.clickStamp,a.proxy(this.externalClickListener,this))}}},a.fn.placard=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.placard"),h="object"==typeof b&&b;g||f.data("fu.placard",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.placard.defaults={onAccept:void 0,onCancel:void 0,externalClickAction:"cancel",externalClickExceptions:[],explicit:!1,revertOnCancel:-1},a.fn.placard.Constructor=c,a.fn.placard.noConflict=function(){return a.fn.placard=b,this},a(document).on("focus.fu.placard.data-api","[data-initialize=placard]",function(b){var c=a(b.target).closest(".placard");c.data("fu.placard")||c.placard(c.data())}),a(function(){a("[data-initialize=placard]").each(function(){var b=a(this);b.data("fu.placard")||b.placard(b.data())})})}(a),function(a){var b=a.fn.radio,c=function(b,c){this.options=a.extend({},a.fn.radio.defaults,c),this.$radio=a(b).is('input[type="radio"]')?a(b):a(b).find('input[type="radio"]:first'),this.$label=this.$radio.parent(),this.groupName=this.$radio.attr("name"),this.$parent=this.$label.parent(".radio"),this.$toggleContainer=null,0===this.$parent.length&&(this.$parent=null);var d=this.$radio.attr("data-toggle");d&&(this.$toggleContainer=a(d)),this.setState(this.$radio),this.$radio.on("change.fu.radio",a.proxy(this.itemchecked,this))};c.prototype={constructor:c,destroy:function(){return this.$parent.remove(),this.$parent[0].outerHTML},setState:function(a){a=a||this.$radio;var b=a.is(":checked"),c=!!a.prop("disabled");this.$label.removeClass("checked"),this.$parent&&this.$parent.removeClass("checked disabled"),b===!0&&(this.$label.addClass("checked"),this.$parent&&this.$parent.addClass("checked")),c===!0&&(this.$label.addClass("disabled"),this.$parent&&this.$parent.addClass("disabled")),this.toggleContainer()},resetGroup:function(){var b=a('input[name="'+this.groupName+'"]');b.each(function(){var b=a(this).parent("label");b.removeClass("checked"),b.parent(".radio").removeClass("checked")})},enable:function(){this.$radio.attr("disabled",!1),this.$label.removeClass("disabled"),this.$parent&&this.$parent.removeClass("disabled")},disable:function(){this.$radio.attr("disabled",!0),this.$label.addClass("disabled"),this.$parent&&this.$parent.addClass("disabled")},itemchecked:function(b){var c=a(b.target);this.resetGroup(),this.setState(c)},check:function(){this.resetGroup(),this.$radio.prop("checked",!0),this.setState(this.$radio)},toggleContainer:function(){var b;this.$toggleContainer&&(this.isChecked()?(b=a('input[name="'+this.groupName+'"]'),b.each(function(){var b=a(this).attr("data-toggle");a(b).addClass("hide"),a(b).attr("aria-hidden","true")}),this.$toggleContainer.removeClass("hide"),this.$toggleContainer.attr("aria-hidden","false")):(this.$toggleContainer.addClass("hide"),this.$toggleContainer.attr("aria-hidden","true")))},uncheck:function(){this.$radio.prop("checked",!1),this.setState(this.$radio)},isChecked:function(){return this.$radio.is(":checked")}},a.fn.radio=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.radio"),h="object"==typeof b&&b;g||f.data("fu.radio",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.radio.defaults={},a.fn.radio.Constructor=c,a.fn.radio.noConflict=function(){return a.fn.radio=b,this},a(document).on("mouseover.fu.checkbox.data-api","[data-initialize=radio]",function(b){var c=a(b.target).closest(".radio").find("[type=radio]");c.data("fu.radio")||c.radio(c.data())}),a(function(){a("[data-initialize=radio] [type=radio]").each(function(){var b=a(this);b.data("fu.radio")||b.radio(b.data())})})}(a),function(a){var b=a.fn.search,c=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.search.defaults,c),this.$button=this.$element.find("button"),this.$input=this.$element.find("input"),this.$icon=this.$element.find(".glyphicon"),this.$button.on("click.fu.search",a.proxy(this.buttonclicked,this)),this.$input.on("keydown.fu.search",a.proxy(this.keypress,this)),this.$input.on("keyup.fu.search",a.proxy(this.keypressed,this)),this.activeSearch=""};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element.find("input").each(function(){a(this).attr("value",a(this).val())}),this.$element[0].outerHTML},search:function(a){this.$icon.hasClass("glyphicon")&&this.$icon.removeClass("glyphicon-search").addClass("glyphicon-remove"),this.activeSearch=a,this.$element.addClass("searched"),this.$element.trigger("searched.fu.search",a)},clear:function(){this.$icon.hasClass("glyphicon")&&this.$icon.removeClass("glyphicon-remove").addClass("glyphicon-search"),this.activeSearch="",this.$input.val(""),this.$element.removeClass("searched"),this.$element.trigger("cleared.fu.search")},action:function(){var a=this.$input.val(),b=""===a||a===this.activeSearch;this.activeSearch&&b?this.clear():a&&this.search(a)},buttonclicked:function(b){b.preventDefault(),a(b.currentTarget).is(".disabled, :disabled")||this.action()},keypress:function(a){13===a.which&&a.preventDefault()},keypressed:function(a){var b,c;13===a.which?(a.preventDefault(),this.action()):(b=this.$input.val(),c=b&&b===this.activeSearch,this.$icon.attr("class",c?"glyphicon glyphicon-remove":"glyphicon glyphicon-search"))},disable:function(){this.$element.addClass("disabled"),this.$input.attr("disabled","disabled"),this.$button.addClass("disabled")},enable:function(){this.$element.removeClass("disabled"),this.$input.removeAttr("disabled"),this.$button.removeClass("disabled")}},a.fn.search=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.search"),h="object"==typeof b&&b;g||f.data("fu.search",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.search.defaults={},a.fn.search.Constructor=c,a.fn.search.noConflict=function(){return a.fn.search=b,this},a(document).on("mousedown.fu.search.data-api","[data-initialize=search]",function(b){var c=a(b.target).closest(".search");
-c.data("fu.search")||c.search(c.data())}),a(function(){a("[data-initialize=search]").each(function(){var b=a(this);b.data("fu.search")||b.search(b.data())})})}(a),function(a){var b=a.fn.selectlist,c=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.selectlist.defaults,c),this.$button=this.$element.find(".btn.dropdown-toggle"),this.$hiddenField=this.$element.find(".hidden-field"),this.$label=this.$element.find(".selected-label"),this.$element.on("click.fu.selectlist",".dropdown-menu a",a.proxy(this.itemClicked,this)),this.setDefaultSelection(),"auto"===c.resize&&this.resize()};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element[0].outerHTML},doSelect:function(b){var c;this.$selectedItem=c=b,this.$hiddenField.val(this.$selectedItem.attr("data-value")),this.$label.html(a(this.$selectedItem.children()[0]).html()),this.$element.find("li").each(function(){c.is(a(this))?a(this).attr("data-selected",!0):a(this).removeData("selected").removeAttr("data-selected")})},itemClicked:function(b){this.$element.trigger("clicked.fu.selectlist",this.$selectedItem),b.preventDefault(),a(b.target).parent().is(this.$selectedItem)||this.itemChanged(b),this.$element.find(".dropdown-toggle").focus()},itemChanged:function(b){this.doSelect(a(b.target).parent());var c=this.selectedItem();this.$element.trigger("changed.fu.selectlist",c)},resize:function(){var b=0,c=a("<div/>").addClass("selectlist-sizer"),d=0;Boolean(a(document).find("html").hasClass("fuelux"))?a(document.body).append(c):a(".fuelux:first").append(c),this.$element.find("a").each(function(){c.text(a(this).text()),b=c.outerWidth(),b>d&&(d=b)}),c.remove(),this.$label.width(d)},selectedItem:function(){var b=this.$selectedItem.text();return a.extend({text:b},this.$selectedItem.data())},selectByText:function(b){var c=a([]);this.$element.find("li").each(function(){return(this.textContent||this.innerText||a(this).text()||"").toLowerCase()===(b||"").toLowerCase()?(c=a(this),!1):void 0}),this.doSelect(c)},selectByValue:function(a){var b='li[data-value="'+a+'"]';this.selectBySelector(b)},selectByIndex:function(a){var b="li:eq("+a+")";this.selectBySelector(b)},selectBySelector:function(a){var b=this.$element.find(a);this.doSelect(b)},setDefaultSelection:function(){var a=this.$element.find("li[data-selected=true]").eq(0);0===a.length&&(a=this.$element.find("li").has("a").eq(0)),this.doSelect(a)},enable:function(){this.$element.removeClass("disabled"),this.$button.removeClass("disabled")},disable:function(){this.$element.addClass("disabled"),this.$button.addClass("disabled")}},a.fn.selectlist=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.selectlist"),h="object"==typeof b&&b;g||f.data("fu.selectlist",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.selectlist.defaults={},a.fn.selectlist.Constructor=c,a.fn.selectlist.noConflict=function(){return a.fn.selectlist=b,this},a(document).on("mousedown.fu.selectlist.data-api","[data-initialize=selectlist]",function(b){var c=a(b.target).closest(".selectlist");c.data("fu.selectlist")||c.selectlist(c.data())}),a(function(){a("[data-initialize=selectlist]").each(function(){var b=a(this);b.data("fu.selectlist")||b.selectlist(b.data())})})}(a),function(a){var b=a.fn.spinbox,c=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.spinbox.defaults,c),this.$input=this.$element.find(".spinbox-input"),this.$element.on("focusin.fu.spinbox",this.$input,a.proxy(this.changeFlag,this)),this.$element.on("focusout.fu.spinbox",this.$input,a.proxy(this.change,this)),this.$element.on("keydown.fu.spinbox",this.$input,a.proxy(this.keydown,this)),this.$element.on("keyup.fu.spinbox",this.$input,a.proxy(this.keyup,this)),this.bindMousewheelListeners(),this.mousewheelTimeout={},this.options.hold?(this.$element.on("mousedown.fu.spinbox",".spinbox-up",a.proxy(function(){this.startSpin(!0)},this)),this.$element.on("mouseup.fu.spinbox",".spinbox-up, .spinbox-down",a.proxy(this.stopSpin,this)),this.$element.on("mouseout.fu.spinbox",".spinbox-up, .spinbox-down",a.proxy(this.stopSpin,this)),this.$element.on("mousedown.fu.spinbox",".spinbox-down",a.proxy(function(){this.startSpin(!1)},this))):(this.$element.on("click.fu.spinbox",".spinbox-up",a.proxy(function(){this.step(!0)},this)),this.$element.on("click.fu.spinbox",".spinbox-down",a.proxy(function(){this.step(!1)},this))),this.switches={count:1,enabled:!0},this.switches.speed="medium"===this.options.speed?300:"fast"===this.options.speed?100:500,this.lastValue=this.options.value,this.render(),this.options.disabled&&this.disable()};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element.find("input").each(function(){a(this).attr("value",a(this).val())}),this.$element[0].outerHTML},render:function(){var b=this.parseInput(this.$input.val()),c="";""!==b&&0===this.options.value?this.value(b):this.output(this.options.value),this.options.units.length&&a.each(this.options.units,function(a,b){b.length>c.length&&(c=b)})},output:function(a,b){return a=(a+"").split(".").join(this.options.decimalMark),b=b||!0,b&&this.$input.val(a),a},parseInput:function(a){return a=(a+"").split(this.options.decimalMark).join(".")},change:function(){var a=this.parseInput(this.$input.val())||"";this.options.units.length||"."!==this.options.decimalMark?a=this.parseValueWithUnit(a):a/1?a=this.options.value=this.checkMaxMin(a/1):(a=this.checkMaxMin(a.replace(/[^0-9.-]/g,"")||""),this.options.value=a/1),this.output(a),this.changeFlag=!1,this.triggerChangedEvent()},changeFlag:function(){this.changeFlag=!0},stopSpin:function(){void 0!==this.switches.timeout&&(clearTimeout(this.switches.timeout),this.switches.count=1,this.triggerChangedEvent())},triggerChangedEvent:function(){var a=this.value();a!==this.lastValue&&(this.lastValue=a,this.$element.trigger("changed.fu.spinbox",this.output(a,!1)))},startSpin:function(b){if(!this.options.disabled){var c=this.switches.count;1===c?(this.step(b),c=1):c=3>c?1.5:8>c?2.5:4,this.switches.timeout=setTimeout(a.proxy(function(){this.iterate(b)},this),this.switches.speed/c),this.switches.count++}},iterate:function(a){this.step(a),this.startSpin(a)},step:function(a){var b,c,d,e;if(this.changeFlag&&this.change(),d=this.options.value,e=a?this.options.max:this.options.min,a?e>d:d>e){var f=d+(a?1:-1)*this.options.step;this.options.step%1!==0&&(b=(this.options.step+"").split(".")[1].length,c=Math.pow(10,b),f=Math.round(f*c)/c),this.value((a?f>e:e>f)?e:f)}else if(this.options.cycle){var g=a?this.options.min:this.options.max;this.value(g)}},value:function(a){return a||0===a?this.options.units.length||"."!==this.options.decimalMark?(this.output(this.parseValueWithUnit(a+(this.unit||""))),this):!isNaN(parseFloat(a))&&isFinite(a)?(this.options.value=a/1,this.output(a+(this.unit?this.unit:"")),this):void 0:(this.changeFlag&&this.change(),this.unit?this.options.value+this.unit:this.output(this.options.value,!1))},isUnitLegal:function(b){var c;return a.each(this.options.units,function(a,d){return d.toLowerCase()===b.toLowerCase()?(c=b.toLowerCase(),!1):void 0}),c},parseValueWithUnit:function(a){var b=a.replace(/[^a-zA-Z]/g,""),c=a.replace(/[^0-9.-]/g,"");return b&&(b=this.isUnitLegal(b)),this.options.value=this.checkMaxMin(c/1),this.unit=b||void 0,this.options.value+(b||"")},checkMaxMin:function(a){return isNaN(parseFloat(a))?a:(a<=this.options.max&&a>=this.options.min||(a=a>=this.options.max?this.options.max:this.options.min),a)},disable:function(){this.options.disabled=!0,this.$element.addClass("disabled"),this.$input.attr("disabled",""),this.$element.find("button").addClass("disabled")},enable:function(){this.options.disabled=!1,this.$element.removeClass("disabled"),this.$input.removeAttr("disabled"),this.$element.find("button").removeClass("disabled")},keydown:function(a){var b=a.keyCode;38===b?this.step(!0):40===b&&this.step(!1)},keyup:function(a){var b=a.keyCode;(38===b||40===b)&&this.triggerChangedEvent()},bindMousewheelListeners:function(){var b=this.$input.get(0);b.addEventListener?(b.addEventListener("mousewheel",a.proxy(this.mousewheelHandler,this),!1),b.addEventListener("DOMMouseScroll",a.proxy(this.mousewheelHandler,this),!1)):b.attachEvent("onmousewheel",a.proxy(this.mousewheelHandler,this))},mousewheelHandler:function(a){var b=window.event||a,c=Math.max(-1,Math.min(1,b.wheelDelta||-b.detail)),d=this;return clearTimeout(this.mousewheelTimeout),this.mousewheelTimeout=setTimeout(function(){d.triggerChangedEvent()},300),this.step(0>c?!0:!1),b.preventDefault?b.preventDefault():b.returnValue=!1,!1}},a.fn.spinbox=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.spinbox"),h="object"==typeof b&&b;g||f.data("fu.spinbox",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.spinbox.defaults={value:0,min:0,max:999,step:1,hold:!0,speed:"medium",disabled:!1,cycle:!1,units:[],decimalMark:"."},a.fn.spinbox.Constructor=c,a.fn.spinbox.noConflict=function(){return a.fn.spinbox=b,this},a(document).on("mousedown.fu.spinbox.data-api","[data-initialize=spinbox]",function(b){var c=a(b.target).closest(".spinbox");c.data("fu.spinbox")||c.spinbox(c.data())}),a(function(){a("[data-initialize=spinbox]").each(function(){var b=a(this);b.data("fu.spinbox")||b.spinbox(b.data())})})}(a),function(a){var b=a.fn.tree,c=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.tree.defaults,c),this.$element.on("click.fu.tree",".tree-item",a.proxy(function(a){this.selectItem(a.currentTarget)},this)),this.$element.on("click.fu.tree",".tree-branch-name",a.proxy(function(a){this.openFolder(a.currentTarget)},this)),this.options.folderSelect&&(this.$element.off("click.fu.tree",".tree-branch-name"),this.$element.on("click.fu.tree",".icon-caret",a.proxy(function(b){this.openFolder(a(b.currentTarget).parent())},this)),this.$element.on("click.fu.tree",".tree-branch-name",a.proxy(function(b){this.selectFolder(a(b.currentTarget))},this))),this.render()};c.prototype={constructor:c,destroy:function(){return this.$element.find("li:not([data-template])").remove(),this.$element.remove(),this.$element[0].outerHTML},render:function(){this.populate(this.$element)},populate:function(b){var c=this,d=b.hasClass("tree")?b:b.parent(),e=d.find(".tree-loader:eq(0)");e.removeClass("hide"),this.options.dataSource(this.options.folderSelect?d.data():b.data(),function(f){e.addClass("hide"),a.each(f.data,function(e,f){var g;"folder"===f.type?(g=c.$element.find("[data-template=treebranch]:eq(0)").clone().removeClass("hide").removeAttr("data-template"),g.data(f),g.find(".tree-branch-name > .tree-label").html(f.name)):"item"===f.type&&(g=c.$element.find("[data-template=treeitem]:eq(0)").clone().removeClass("hide").removeAttr("data-template"),g.find(".tree-item-name > .tree-label").html(f.name),g.data(f));var h=f.dataAttributes||[];a.each(h,function(a,b){switch(a){case"class":case"classes":case"className":g.addClass(b);break;case"data-icon":g.find(".icon-item").removeClass().addClass("icon-item "+b),g.attr(a,b);break;case"id":g.attr(a,b),g.attr("aria-labelledby",b+"-label"),g.find(".tree-branch-name > .tree-label").attr("id",b+"-label");break;default:g.attr(a,b)}}),b.hasClass("tree-branch-header")?d.find(".tree-branch-children:eq(0)").append(g):b.append(g)}),c.$element.trigger("loaded.fu.tree",d)})},selectItem:function(b){var c=a(b),d=this.$element.find(".tree-selected"),e=[],f=c.find(".icon-item");this.options.multiSelect?a.each(d,function(b,d){var f=a(d);f[0]!==c[0]&&e.push(a(d).data())}):d[0]!==c[0]&&(d.removeClass("tree-selected").find(".glyphicon").removeClass("glyphicon-ok").addClass("fueluxicon-bullet"),e.push(c.data()));var g="selected";c.hasClass("tree-selected")?(g="unselected",c.removeClass("tree-selected"),(f.hasClass("glyphicon-ok")||f.hasClass("fueluxicon-bullet"))&&f.removeClass("glyphicon-ok").addClass("fueluxicon-bullet")):(c.addClass("tree-selected"),(f.hasClass("glyphicon-ok")||f.hasClass("fueluxicon-bullet"))&&f.removeClass("fueluxicon-bullet").addClass("glyphicon-ok"),this.options.multiSelect&&e.push(c.data())),e.length&&this.$element.trigger("selected",{selected:e}),c.trigger("updated.fu.tree",{selected:e,item:c,eventType:g})},openFolder:function(b){var c,d,e,f=a(b);this.options.folderSelect||(f=a(b).parent()),c=f.closest(".tree-branch"),d=c.find(".tree-branch-children"),e=d.eq(0);var g,h,i;f.find(".glyphicon-folder-close").length?(g="opened",h=".glyphicon-folder-close",i="glyphicon-folder-open",c.addClass("tree-open"),c.attr("aria-expanded","true"),e.removeClass("hide"),d.children().length||this.populate(d)):f.find(".glyphicon-folder-open")&&(g="closed",h=".glyphicon-folder-open",i="glyphicon-folder-close",c.removeClass("tree-open"),c.attr("aria-expanded","false"),e.addClass("hide"),this.options.cacheItems||e.empty()),c.find("> .tree-branch-header .icon-folder").eq(0).removeClass("glyphicon-folder-close glyphicon-folder-open").addClass(i),this.$element.trigger(g,c.data())},selectFolder:function(b){var c=a(b),d=c.closest(".tree-branch"),e=this.$element.find(".tree-branch.tree-selected"),f=[],g="selected";d.hasClass("tree-selected")?(g="unselected",d.removeClass("tree-selected")):d.addClass("tree-selected"),this.options.multiSelect?(e=this.$element.find(".tree-branch.tree-selected"),a.each(e,function(b,d){var e=a(d);e[0]!==c[0]&&f.push(a(d).data())})):e[0]!==c[0]&&(e.removeClass("tree-selected"),f.push(d.data())),f.length&&this.$element.trigger("selected.fu.tree",{selected:f}),c.trigger("updated.fu.tree",{selected:f,item:c,eventType:g})},selectedItems:function(){var b=this.$element.find(".tree-selected"),c=[];return a.each(b,function(b,d){c.push(a(d).data())}),c},collapse:function(){var b=this.options.cacheItems;this.$element.find(".icon-folder-open").each(function(){var c=a(this).removeClass("icon-folder-close icon-folder-open").addClass("icon-folder-close"),d=c.parent().parent(),e=d.children(".tree-branch-children");e.addClass("hide"),b||e.empty()})}},a.fn.tree=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.tree"),h="object"==typeof b&&b;g||f.data("fu.tree",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.tree.defaults={dataSource:function(){},multiSelect:!1,cacheItems:!0,folderSelect:!0},a.fn.tree.Constructor=c,a.fn.tree.noConflict=function(){return a.fn.tree=b,this}}(a),function(a){var b=a.fn.wizard,c=function(b,c){var d;this.$element=a(b),this.options=a.extend({},a.fn.wizard.defaults,c),this.options.disablePreviousStep="previous"===this.$element.attr("data-restrict")?!0:this.options.disablePreviousStep,this.currentStep=this.options.selectedItem.step,this.numSteps=this.$element.find(".steps li").length,this.$prevBtn=this.$element.find("button.btn-prev"),this.$nextBtn=this.$element.find("button.btn-next"),d=this.$nextBtn.children().detach(),this.nextText=a.trim(this.$nextBtn.text()),this.$nextBtn.append(d),this.$prevBtn.on("click.fu.wizard",a.proxy(this.previous,this)),this.$nextBtn.on("click.fu.wizard",a.proxy(this.next,this)),this.$element.on("click.fu.wizard","li.complete",a.proxy(this.stepclicked,this)),this.selectedItem(this.options.selectedItem),this.options.disablePreviousStep&&(this.$prevBtn.attr("disabled",!0),this.$element.find(".steps").addClass("previous-disabled"))};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element[0].outerHTML},addSteps:function(b){var c,d,e,f,g,h,i=[].slice.call(arguments).slice(1),j=this.$element.find(".steps"),k=this.$element.find(".step-content");for(b=-1===b||b>this.numSteps+1?this.numSteps+1:b,i[0]instanceof Array&&(i=i[0]),g=j.find("li:nth-child("+b+")"),f=k.find(".step-pane:nth-child("+b+")"),g.length<1&&(g=null),c=0,d=i.length;d>c;c++)h=a('<li data-step="'+b+'"><span class="badge badge-info"></span></li>'),h.append(i[c].label||"").append('<span class="chevron"></span>'),h.find(".badge").append(i[c].badge||b),e=a('<div class="step-pane" data-step="'+b+'"></div>'),e.append(i[c].pane||""),g?(g.before(h),f.before(e)):(j.append(h),k.append(e)),b++;this.syncSteps(),this.numSteps=j.find("li").length,this.setState()},removeSteps:function(b,c){var d,e="nextAll",f=0,g=this.$element.find(".steps"),h=this.$element.find(".step-content");c=void 0!==c?c:1,b>g.find("li").length?d=g.find("li:last"):(d=g.find("li:nth-child("+b+")").prev(),d.length<1&&(e="children",d=g)),d[e]().each(function(){var b=a(this),d=b.attr("data-step");return c>f?(b.remove(),h.find('.step-pane[data-step="'+d+'"]:first').remove(),void f++):!1}),this.syncSteps(),this.numSteps=g.find("li").length,this.setState()},setState:function(){var b=this.currentStep>1,c=1===this.currentStep,d=this.currentStep===this.numSteps;this.options.disablePreviousStep||this.$prevBtn.attr("disabled",c===!0||b===!1);var e=this.$nextBtn.attr("data-last");if(e){this.lastText=e;var f=this.nextText;d===!0?(f=this.lastText,this.$element.addClass("complete")):this.$element.removeClass("complete");var g=this.$nextBtn.children().detach();this.$nextBtn.text(f).append(g)}var h=this.$element.find(".steps li");h.removeClass("active").removeClass("complete"),h.find("span.badge").removeClass("badge-info").removeClass("badge-success");var i=".steps li:lt("+(this.currentStep-1)+")",j=this.$element.find(i);j.addClass("complete"),j.find("span.badge").addClass("badge-success");var k=".steps li:eq("+(this.currentStep-1)+")",l=this.$element.find(k);l.addClass("active"),l.find("span.badge").addClass("badge-info");var m=this.$element.find(".step-content"),n=l.attr("data-step");m.find(".step-pane").removeClass("active"),m.find('.step-pane[data-step="'+n+'"]:first').addClass("active"),this.$element.find(".steps").first().attr("style","margin-left: 0");var o=0;this.$element.find(".steps > li").each(function(){o+=a(this).outerWidth()});var p=0;if(p=this.$element.find(".actions").length?this.$element.width()-this.$element.find(".actions").first().outerWidth():this.$element.width(),o>p){var q=o-p;this.$element.find(".steps").first().attr("style","margin-left: -"+q+"px"),this.$element.find("li.active").first().position().left<200&&(q+=this.$element.find("li.active").first().position().left-200,1>q?this.$element.find(".steps").first().attr("style","margin-left: 0"):this.$element.find(".steps").first().attr("style","margin-left: -"+q+"px"))}if("undefined"!=typeof this.initialized){var r=a.Event("changed.fu.wizard");this.$element.trigger(r,{step:this.currentStep})}this.initialized=!0},stepclicked:function(b){var c=a(b.currentTarget),d=this.$element.find(".steps li").index(c),e=!0;if(this.options.disablePreviousStep&&d<this.currentStep&&(e=!1),e){var f=a.Event("stepclicked.fu.wizard");if(this.$element.trigger(f,{step:d+1}),f.isDefaultPrevented())return;this.currentStep=d+1,this.setState()}},syncSteps:function(){var b=1,c=this.$element.find(".steps"),d=this.$element.find(".step-content");c.children().each(function(){var c=a(this),e=c.find(".badge"),f=c.attr("data-step");isNaN(parseInt(e.html(),10))||e.html(b),c.attr("data-step",b),d.find('.step-pane[data-step="'+f+'"]:last').attr("data-step",b),b++})},previous:function(){var b=this.currentStep>1;if(this.options.disablePreviousStep&&(b=!1),b){var c=a.Event("actionclicked.fu.wizard");if(this.$element.trigger(c,{step:this.currentStep,direction:"previous"}),c.isDefaultPrevented())return;this.currentStep-=1,this.setState()}this.$prevBtn.is(":disabled")?this.$nextBtn.focus():this.$prevBtn.focus()},next:function(){var b=this.currentStep+1<=this.numSteps,c=this.currentStep===this.numSteps;if(b){var d=a.Event("actionclicked.fu.wizard");if(this.$element.trigger(d,{step:this.currentStep,direction:"next"}),d.isDefaultPrevented())return;this.currentStep+=1,this.setState()}else c&&this.$element.trigger("finished.fu.wizard");this.$nextBtn.is(":disabled")?this.$prevBtn.focus():this.$nextBtn.focus()},selectedItem:function(a){var b,c;return a?(c=a.step||-1,c>=1&&c<=this.numSteps?(this.currentStep=c,this.setState()):(c=this.$element.find(".steps li.active:first").attr("data-step"),isNaN(c)||(this.currentStep=parseInt(c,10),this.setState())),b=this):b={step:this.currentStep},b}},a.fn.wizard=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.wizard"),h="object"==typeof b&&b;g||f.data("fu.wizard",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.wizard.defaults={disablePreviousStep:!1,selectedItem:{step:-1}},a.fn.wizard.Constructor=c,a.fn.wizard.noConflict=function(){return a.fn.wizard=b,this},a(document).on("mouseover.fu.wizard.data-api","[data-initialize=wizard]",function(b){var c=a(b.target).closest(".wizard");c.data("fu.wizard")||c.wizard(c.data())}),a(function(){a("[data-initialize=wizard]").each(function(){var b=a(this);b.data("fu.wizard")||b.wizard(b.data())})})}(a),function(a){var b=a.fn.infinitescroll,c=function(b,c){this.$element=a(b),this.$element.addClass("infinitescroll"),this.options=a.extend({},a.fn.infinitescroll.defaults,c),this.curScrollTop=this.$element.scrollTop(),this.curPercentage=this.getPercentage(),this.fetchingData=!1,this.$element.on("scroll.fu.infinitescroll",a.proxy(this.onScroll,this)),this.onScroll()};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element.empty(),this.$element[0].outerHTML},disable:function(){this.$element.off("scroll.fu.infinitescroll")},enable:function(){this.$element.on("scroll.fu.infinitescroll",a.proxy(this.onScroll,this))},end:function(b){var c=a('<div class="infinitescroll-end"></div>');c.append(b?b:"---------"),this.$element.append(c),this.disable()},getPercentage:function(){var a="border-box"===this.$element.css("box-sizing")?this.$element.outerHeight():this.$element.height(),b=this.$element.get(0).scrollHeight;return b>a?a/(b-this.curScrollTop)*100:0},fetchData:function(b){var c,d=a('<div class="infinitescroll-load"></div>'),e=this,f=function(){var b={percentage:e.curPercentage,scrollTop:e.curScrollTop},c=a('<div class="loader"></div>');d.append(c),c.loader(),e.options.dataSource&&e.options.dataSource(b,function(a){var b;d.remove(),a.content&&e.$element.append(a.content),a.end&&(b=a.end!==!0?a.end:void 0,e.end(b)),e.fetchingData=!1})};this.fetchingData=!0,this.$element.append(d),this.options.hybrid&&b!==!0?(c=a('<button type="button" class="btn btn-primary"></button>'),c.append("object"==typeof this.options.hybrid?this.options.hybrid.label:'<span class="glyphicon glyphicon-repeat"></span>'),c.on("click.fu.infinitescroll",function(){c.remove(),f()}),d.append(c)):f()},onScroll:function(){this.curScrollTop=this.$element.scrollTop(),this.curPercentage=this.getPercentage(),!this.fetchingData&&this.curPercentage>=this.options.percentage&&this.fetchData()}},a.fn.infinitescroll=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.infinitescroll"),h="object"==typeof b&&b;g||f.data("fu.infinitescroll",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.infinitescroll.defaults={dataSource:null,hybrid:!1,percentage:95},a.fn.infinitescroll.Constructor=c,a.fn.infinitescroll.noConflict=function(){return a.fn.infinitescroll=b,this}}(a),function(a){var b=a.fn.pillbox,c=function(b,c){this.$element=a(b),this.$moreCount=this.$element.find(".pillbox-more-count"),this.$pillGroup=this.$element.find(".pill-group"),this.$addItem=this.$element.find(".pillbox-add-item"),this.$addItemWrap=this.$addItem.parent(),this.$suggest=this.$element.find(".suggest"),this.$pillHTML='<li class="btn btn-default pill">	<span></span>	<span class="glyphicon glyphicon-close">		<span class="sr-only">Remove</span>	</span></li>',this.options=a.extend({},a.fn.pillbox.defaults,c),-1===this.options.readonly?void 0!==this.$element.attr("data-readonly")&&this.readonly(!0):this.options.readonly&&this.readonly(!0),this.acceptKeyCodes=this._generateObject(this.options.acceptKeyCodes),this.$element.on("click.fu.pillbox",".pill-group > .pill",a.proxy(this.itemClicked,this)),this.$element.on("click.fu.pillbox",a.proxy(this.inputFocus,this)),this.$element.on("keydown.fu.pillbox",".pillbox-add-item",a.proxy(this.inputEvent,this)),this.options.onKeyDown&&this.$element.on("mousedown.fu.pillbox",".suggest > li",a.proxy(this.suggestionClick,this)),this.options.edit&&(this.$element.addClass("pills-editable"),this.$element.on("blur.fu.pillbox",".pillbox-add-item",a.proxy(this.cancelEdit,this)))};c.prototype={constructor:c,destroy:function(){return this.$element.remove(),this.$element[0].outerHTML},items:function(){var b=this;return this.$pillGroup.children(".pill").map(function(){return b.getItemData(a(this))}).get()},itemClicked:function(b){var c,d=a(b.target);if(b.preventDefault(),b.stopPropagation(),this._closeSuggestions(),d.hasClass("pill"))c=d;else if(c=d.parent(),void 0===this.$element.attr("data-readonly")){if(d.hasClass("glyphicon-close"))return this.options.onRemove?this.options.onRemove(this.getItemData(c,{el:c}),a.proxy(this._removeElement,this)):this._removeElement(this.getItemData(c,{el:c})),!1;if(this.options.edit){if(c.find(".pillbox-list-edit").length)return!1;this.openEdit(c)}}this.$element.trigger("clicked.fu.pillbox",this.getItemData(c))},readonly:function(a){a?this.$element.attr("data-readonly","readonly"):this.$element.removeAttr("data-readonly"),this.options.truncate&&this.truncate(a)},suggestionClick:function(b){var c=a(b.currentTarget);b.preventDefault(),this.$addItem.val(""),this.addItems({text:c.html(),value:c.data("value")},!0),this._closeSuggestions()},itemCount:function(){return this.$pillGroup.children(".pill").length},addItems:function(){var b,c,d,e=this;!isFinite(String(arguments[0]))||arguments[0]instanceof Array?(b=[].slice.call(arguments).slice(0),d=b[1]&&!b[1].text):(b=[].slice.call(arguments).slice(1),c=arguments[0]),b[0]instanceof Array&&(b=b[0]),b.length&&(a.each(b,function(a,c){var d={text:c.text,value:c.value?c.value:c.text,el:e.$pillHTML};b[a]=d}),this.options.edit&&this.currentEdit&&(b[0].el=this.currentEdit.wrap("<div></div>").parent().html()),d&&b.pop(1),e.options.onAdd&&d?this.options.edit&&this.currentEdit?e.options.onAdd(b[0],a.proxy(e.saveEdit,this)):e.options.onAdd(b[0],a.proxy(e.placeItems,this,!0)):this.options.edit&&this.currentEdit?e.saveEdit(b):c?e.placeItems(c,b):e.placeItems(b,d))},removeItems:function(a,b){var c,d,e=this;if(a)for(b=b?b:1,c=0;b>c&&(d=e.$pillGroup.find("> .pill:nth-child("+a+")"),d);c++)d.remove();else this.$pillGroup.find(".pill").remove(),this._removePillTrigger({method:"removeAll"})},placeItems:function(){var b,c,d,e,f="";!isFinite(String(arguments[0]))||arguments[0]instanceof Array?(b=[].slice.call(arguments).slice(0),e=b[1]&&!b[1].text):(b=[].slice.call(arguments).slice(1),c=arguments[0]),b[0]instanceof Array&&(b=b[0]),b.length&&(a.each(b,function(b,c){var d=a(c.el);d.attr("data-value",c.value),d.find("span:first").html(c.text),f+=d.wrap("<div></div>").parent().html()}),this.$pillGroup.children(".pill").length>0?c?(d=this.$pillGroup.find(".pill:nth-child("+c+")"),d.length?d.before(f):this.$pillGroup.children(".pill:last").after(f)):this.$pillGroup.children(".pill:last").after(f):this.$pillGroup.prepend(f),e&&this.$element.trigger("added.fu.pillbox",{text:b[0].text,value:b[0].value}))},inputEvent:function(a){var b,c,d,e=this,f=this.$addItem.val();if(this.acceptKeyCodes[a.keyCode])return this.options.onKeyDown&&this._isSuggestionsOpen()&&(d=this.$suggest.find(".pillbox-suggest-sel"),d.length&&(f=d.html(),b=d.data("value"))),f.length&&(this._closeSuggestions(),this.$addItem.hide(),this.addItems({text:f,value:b},!0),setTimeout(function(){e.$addItem.show().val("").attr({size:10})},0)),a.preventDefault(),!0;if(8===a.keyCode||46===a.keyCode){if(!f.length)return a.preventDefault(),this.options.edit&&this.currentEdit?(this.cancelEdit(),!0):(this._closeSuggestions(),c=this.$pillGroup.children(".pill:last"),c.hasClass("pillbox-highlight")?this._removeElement(this.getItemData(c,{el:c})):c.addClass("pillbox-highlight"),!0)}else f.length>10&&this.$addItem.width()<this.$pillGroup.width()-6&&this.$addItem.attr({size:f.length+3});if(this.$pillGroup.find(".pill").removeClass("pillbox-highlight"),this.options.onKeyDown){if(9===a.keyCode||38===a.keyCode||40===a.keyCode)return this._isSuggestionsOpen()&&this._keySuggestions(a),!0;this.callbackId=a.timeStamp,this.options.onKeyDown({event:a,value:f},function(b){e._openSuggestions(a,b)})}},openEdit:function(a){var b=a.index()+1,c=this.$addItemWrap.detach().hide();this.$pillGroup.find(".pill:nth-child("+b+")").before(c),this.currentEdit=a.detach(),c.addClass("editing"),this.$addItem.val(a.find("span:first").html()),c.show(),this.$addItem.focus().select()},cancelEdit:function(a){var b;return this.currentEdit?(this._closeSuggestions(),a&&this.$addItemWrap.before(this.currentEdit),this.currentEdit=!1,b=this.$addItemWrap.detach(),b.removeClass("editing"),this.$addItem.val(""),void this.$pillGroup.append(b)):!1},saveEdit:function(){var b=arguments[0][0];this.currentEdit=a(b.el),this.currentEdit.data("value",b.value),this.currentEdit.find("span:first").html(b.text),this.$addItemWrap.hide(),this.$addItemWrap.before(this.currentEdit),this.currentEdit=!1,this.$addItem.val(""),this.$addItemWrap.removeClass("editing"),this.$pillGroup.append(this.$addItemWrap.detach().show()),this.$element.trigger("edited.fu.pillbox",{value:b.value,text:b.text})},removeBySelector:function(){var b=[].slice.call(arguments).slice(0),c=this;a.each(b,function(a,b){c.$pillGroup.find(b).remove()}),this._removePillTrigger({method:"removeBySelector",removedSelectors:b})},removeByValue:function(){var b=[].slice.call(arguments).slice(0),c=this;a.each(b,function(a,b){c.$pillGroup.find('> .pill[data-value="'+b+'"]').remove()}),this._removePillTrigger({method:"removeByValue",removedValues:b})},removeByText:function(){var b=[].slice.call(arguments).slice(0),c=this;a.each(b,function(a,b){c.$pillGroup.find('> .pill:contains("'+b+'")').remove()}),this._removePillTrigger({method:"removeByText",removedText:b})},truncate:function(b){var c,d,e,f,g,h=this;this.$element.removeClass("truncate"),this.$addItemWrap.removeClass("truncated"),this.$pillGroup.find(".pill").removeClass("truncated"),b&&(this.$element.addClass("truncate"),c=this.$element.width(),d=!1,e=0,f=this.$pillGroup.find(".pill").length,g=0,this.$pillGroup.find(".pill").each(function(){var b=a(this);d?b.addClass("truncated"):(e++,h.$moreCount.text(f-e),g+b.outerWidth(!0)+h.$addItemWrap.outerWidth(!0)<=c?g+=b.outerWidth(!0):(h.$moreCount.text(f-e+1),b.addClass("truncated"),d=!0))}),e===f&&this.$addItemWrap.addClass("truncated"))},inputFocus:function(){this.$element.find(".pillbox-add-item").focus()},getItemData:function(b,c){return a.extend({text:b.find("span:first").html()},b.data(),c)},_removeElement:function(a){a.el.remove(),delete a.el,this.$element.trigger("removed.fu.pillbox",a)},_removePillTrigger:function(a){this.$element.trigger("removed.fu.pillbox",a)},_generateObject:function(b){var c={};return a.each(b,function(a,b){c[b]=!0}),c},_openSuggestions:function(b,c){var d="";return this.callbackId!==b.timeStamp?!1:void(c.data&&c.data.length&&(a.each(c.data,function(a,b){var c=b.value?b.value:b.text;d+='<li data-value="'+c+'">'+b.text+"</li>"}),this.$suggest.html("").append(d),a(document.body).trigger("suggested.fu.pillbox",this.$suggest)))},_closeSuggestions:function(){this.$suggest.html("").parent().removeClass("open")},_isSuggestionsOpen:function(){return this.$suggest.parent().hasClass("open")},_keySuggestions:function(a){var b,c=this.$suggest.find("li.pillbox-suggest-sel"),d=38===a.keyCode;a.preventDefault(),c.length?(b=d?c.prev():c.next(),b.length||(b=this.$suggest.find(d?"li:last":"li:first")),b&&(b.addClass("pillbox-suggest-sel"),c.removeClass("pillbox-suggest-sel"))):(c=this.$suggest.find("li:first"),c.addClass("pillbox-suggest-sel"))}},a.fn.pillbox=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.pillbox"),h="object"==typeof b&&b;
-g||f.data("fu.pillbox",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.pillbox.defaults={onAdd:void 0,onRemove:void 0,onKeyDown:void 0,edit:!1,readonly:-1,truncate:!1,acceptKeyCodes:[13,188]},a.fn.pillbox.Constructor=c,a.fn.pillbox.noConflict=function(){return a.fn.pillbox=b,this},a(document).on("mousedown.fu.pillbox.data-api","[data-initialize=pillbox]",function(b){var c=a(b.target).closest(".pillbox");c.data("fu.pillbox")||c.pillbox(c.data())}),a(function(){a("[data-initialize=pillbox]").each(function(){var b=a(this);b.data("fu.pillbox")||b.pillbox(b.data())})})}(a),function(a){var b=a.fn.repeater,c=function(b,c){var d,e=this;this.$element=a(b),this.$canvas=this.$element.find(".repeater-canvas"),this.$count=this.$element.find(".repeater-count"),this.$end=this.$element.find(".repeater-end"),this.$filters=this.$element.find(".repeater-filters"),this.$loader=this.$element.find(".repeater-loader"),this.$pageSize=this.$element.find(".repeater-itemization .selectlist"),this.$nextBtn=this.$element.find(".repeater-next"),this.$pages=this.$element.find(".repeater-pages"),this.$prevBtn=this.$element.find(".repeater-prev"),this.$primaryPaging=this.$element.find(".repeater-primaryPaging"),this.$search=this.$element.find(".repeater-search").find(".search"),this.$secondaryPaging=this.$element.find(".repeater-secondaryPaging"),this.$start=this.$element.find(".repeater-start"),this.$viewport=this.$element.find(".repeater-viewport"),this.$views=this.$element.find(".repeater-views"),this.eventStamp=(new Date).getTime()+(Math.floor(100*Math.random())+1),this.currentPage=0,this.currentView=null,this.infiniteScrollingCallback=function(){},this.infiniteScrollingCont=null,this.infiniteScrollingEnabled=!1,this.infiniteScrollingEnd=null,this.infiniteScrollingOptions={},this.lastPageInput=0,this.options=a.extend({},a.fn.repeater.defaults,c),this.pageIncrement=0,this.resizeTimeout={},this.staticHeight=-1===this.options.staticHeight?this.$element.attr("data-staticheight"):this.options.staticHeight,this.$filters.selectlist(),this.$pageSize.selectlist(),this.$primaryPaging.find(".combobox").combobox(),this.$search.search(),this.$filters.on("changed.fu.selectlist",a.proxy(this.render,this,{clearInfinite:!0,pageIncrement:null})),this.$nextBtn.on("click.fu.repeater",a.proxy(this.next,this)),this.$pageSize.on("changed.fu.selectlist",a.proxy(this.render,this,{pageIncrement:null})),this.$prevBtn.on("click.fu.repeater",a.proxy(this.previous,this)),this.$primaryPaging.find(".combobox").on("changed.fu.combobox",function(a,b){e.pageInputChange(b.text)}),this.$search.on("searched.fu.search cleared.fu.search",a.proxy(this.render,this,{clearInfinite:!0,pageIncrement:null})),this.$secondaryPaging.on("blur.fu.repeater",function(){e.pageInputChange(e.$secondaryPaging.val())}),this.$secondaryPaging.on("change.fu.repeater",function(){e.pageInputChange(e.$secondaryPaging.val())}),this.$views.find("input").on("change.fu.repeater",a.proxy(this.viewChanged,this)),a(window).on("resize.fu.repeater."+this.eventStamp,function(){clearTimeout(e.resizeTimeout),e.resizeTimeout=setTimeout(function(){e.resize(),e.$element.trigger("resized.fu.repeater")},75)}),this.$loader.loader(),this.$loader.loader("pause"),d=-1!==this.options.defaultView?this.options.defaultView:this.$views.find("label.active input").val(),this.initViews(function(){e.resize(),e.$element.trigger("resized.fu.repeater"),e.render({changeView:d})})};c.prototype={constructor:c,clear:function(b){var c=function(b){var d=[];b.children().each(function(){var b=a(this),e=b.attr("data-preserve");"deep"===e?(b.detach(),d.push(b)):"shallow"===e&&(c(b),b.detach(),d.push(b))}),b.empty(),b.append(d)};b=b||{},b.preserve?(!this.infiniteScrollingEnabled||b.clearInfinite)&&c(this.$canvas):this.$canvas.empty()},destroy:function(){var b;return this.$element.find("input").each(function(){a(this).attr("value",a(this).val())}),this.$canvas.empty(),b=this.$element[0].outerHTML,this.$element.find(".combobox").combobox("destroy"),this.$element.find(".selectlist").selectlist("destroy"),this.$element.find(".search").search("destroy"),this.infiniteScrollingEnabled&&a(this.infiniteScrollingCont).infinitescroll("destroy"),this.$element.remove(),a(window).off("resize.fu.repeater."+this.eventStamp),b},getDataOptions:function(b,c){var d,e,f={};b=b||{},f.filter=this.$filters.selectlist("selectedItem"),f.view=this.currentView,this.infiniteScrollingEnabled||(f.pageSize=parseInt(this.$pageSize.selectlist("selectedItem").value,10)),void 0!==b.pageIncrement&&(null===b.pageIncrement?this.currentPage=0:this.currentPage+=b.pageIncrement),f.pageIndex=this.currentPage,d=this.$search.find("input").val(),""!==d&&(f.search=d),e=a.fn.repeater.views[this.currentView]||{},e=e.dataOptions,e?e.call(this,f,function(a){c(a)}):c(f)},infiniteScrolling:function(a,b){var c,d,e=this.$element.find(".repeater-itemization"),f=this.$element.find(".repeater-pagination");b=b||{},a?(this.infiniteScrollingEnabled=!0,this.infiniteScrollingEnd=b.end,delete b.dataSource,delete b.end,this.infiniteScrollingOptions=b,e.hide(),f.hide()):(c=this.infiniteScrollingCont,d=c.data(),delete d.infinitescroll,c.off("scroll"),c.removeClass("infinitescroll"),this.infiniteScrollingCont=null,this.infiniteScrollingEnabled=!1,this.infiniteScrollingEnd=null,this.infiniteScrollingOptions={},e.show(),f.show())},infiniteScrollPaging:function(a){var b=this.infiniteScrollingEnd!==!0?this.infiniteScrollingEnd:void 0,c=a.page,d=a.pages;this.currentPage=void 0!==c?c:0/0,this.currentPage+1>=d&&this.infiniteScrollingCont.infinitescroll("end",b)},initInfiniteScrolling:function(){var b,c,d=this.$canvas.find('[data-infinite="true"]:first');d=d.length<1?this.$canvas:d,d.data("fu.infinitescroll")?d.infinitescroll("enable"):(c=this,b=a.extend({},this.infiniteScrollingOptions),b.dataSource=function(a,b){c.infiniteScrollingCallback=b,c.render({pageIncrement:1})},d.infinitescroll(b),this.infiniteScrollingCont=d)},initViews:function(b){var c,d,e=[],f=function(a){var c=function(){a++,d>a?f(a):b()};e[a].initialize?e[a].initialize.call(this,{},function(){c()}):c()};for(c in a.fn.repeater.views)e.push(a.fn.repeater.views[c]);d=e.length,d>0?f(0):b()},itemization:function(a){this.$count.html(a.count||""),this.$end.html(a.end||""),this.$start.html(a.start||"")},next:function(){var a="disabled";this.$nextBtn.attr(a,a),this.$prevBtn.attr(a,a),this.pageIncrement=1,this.render({pageIncrement:this.pageIncrement})},pageInputChange:function(a){var b;a!==this.lastPageInput&&(this.lastPageInput=a,a=parseInt(a,10)-1,b=a-this.currentPage,this.render({pageIncrement:b}))},pagination:function(a){var b,c,d,e="active",f="disabled",g=a.page,h=a.pages;if(this.currentPage=void 0!==g?g:0/0,this.$primaryPaging.removeClass(e),this.$secondaryPaging.removeClass(e),h<=this.options.dropPagingCap){for(this.$primaryPaging.addClass(e),b=this.$primaryPaging.find(".dropdown-menu"),b.empty(),c=0;h>c;c++)d=c+1,b.append('<li data-value="'+d+'"><a href="#">'+d+"</a></li>");this.$primaryPaging.find("input.form-control").val(this.currentPage+1)}else this.$secondaryPaging.addClass(e),this.$secondaryPaging.val(this.currentPage+1);this.lastPageInput=this.currentPage+1+"",this.$pages.html(h),this.currentPage+1<h?this.$nextBtn.removeAttr(f):this.$nextBtn.attr(f,f),this.currentPage-1>=0?this.$prevBtn.removeAttr(f):this.$prevBtn.attr(f,f),0!==this.pageIncrement&&(this.pageIncrement>0?this.$nextBtn.is(":disabled")?this.$prevBtn.focus():this.$nextBtn.focus():this.$prevBtn.is(":disabled")?this.$nextBtn.focus():this.$prevBtn.focus())},previous:function(){var a="disabled";this.$nextBtn.attr(a,a),this.$prevBtn.attr(a,a),this.pageIncrement=-1,this.render({pageIncrement:this.pageIncrement})},render:function(b){var c,d=this,e=!1,f=a.fn.repeater.views[d.currentView]||{},g=function(){b.preserve=void 0!==b.preserve?b.preserve:!e,d.clear(b),(!d.infiniteScrollingEnabled||d.infiniteScrollingEnabled&&e)&&d.$loader.show().loader("play"),d.getDataOptions(b,function(a){d.options.dataSource(a,function(a){var c=f.renderer;d.infiniteScrollingEnabled?d.infiniteScrollingCallback({}):(d.itemization(a),d.pagination(a)),c&&d.runRenderer(d.$canvas,c,a,function(){d.infiniteScrollingEnabled&&((e||b.clearInfinite)&&d.initInfiniteScrolling(),d.infiniteScrollPaging(a,b)),d.$loader.hide().loader("pause"),d.$element.trigger("loaded.fu.repeater")})})})};b=b||{},b.changeView&&this.currentView!==b.changeView?(c=this.currentView,this.currentView=b.changeView,this.$element.attr("data-currentview",this.currentView),e=!0,this.infiniteScrollingEnabled&&d.infiniteScrolling(!1),f=a.fn.repeater.views[d.currentView]||{},f.selected?f.selected.call(this,{prevView:c},function(){g()}):g()):g()},resize:function(){var b,c,d=this.staticHeight,e=a.fn.repeater.views[this.currentView]||{};void 0!==d?(this.$canvas.addClass("scrolling"),c={bottom:this.$viewport.css("margin-bottom"),top:this.$viewport.css("margin-top")},b=("true"===d||d===!0?this.$element.height():parseInt(d,10))-this.$element.find(".repeater-header").outerHeight()-this.$element.find(".repeater-footer").outerHeight()-("auto"===c.bottom?0:parseInt(c.bottom,10))-("auto"===c.top?0:parseInt(c.top,10)),this.$viewport.outerHeight(b)):this.$canvas.removeClass("scrolling"),e.resize&&e.resize.call(this,{height:this.$element.outerHeight(),width:this.$element.outerWidth()},function(){})},runRenderer:function(b,c,d,e){var f,g,h,i,j=this,k=!1,l=function(a){var f={container:b,data:d};c.repeat&&(f.subset=g,f.index=a),g.length<1?e():m(f,function(){a++,a<g.length?l(a):e()})},m=function(e,f){var g="",h={before:function(a){a&&a.skipNested===!0&&(k=!0),i("render",e)},render:function(c){var d=c&&c.action?c.action:"append";c&&void 0!==c.item&&(g=a(c.item),g.length<1&&(g=c.item),"none"!==d&&b[d](g),e.item=g),c&&c.skipNested===!0&&(k=!0),i("after",e)},after:function(f){var l,m=function(a,b){j.runRenderer(a,c.nested[b],d,function(){b++,b<c.nested.length?m(a,b):i("complete",e)})};f&&f.skipNested===!0&&(k=!0),c.nested&&!k?(l=a(g),l="true"===l.attr("data-container")?l:l.find('[data-container="true"]:first'),l.length<1&&(l=b),m(l,0)):h.complete(null)},complete:function(){f&&f()}},i=function(b,d){d=a.extend({},d),c[b]?c[b].call(j,d,h[b]):h[b](null)};i("before",e)};if(c.repeat)for(f=c.repeat.split("."),"data"===f[0]||"this"===f[0]?(g="this"===f[0]?this:d,f.shift()):(f=[],g=[""]),h=0,i=f.length;i>h;h++)g=g[f[h]];else g=[""];l(0)},viewChanged:function(b){var c=a(b.target);this.render({changeView:c.val(),pageIncrement:null})}},a.fn.repeater=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.repeater"),h="object"==typeof b&&b;g||f.data("fu.repeater",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.repeater.defaults={dataSource:function(){},defaultView:-1,dropPagingCap:10,staticHeight:-1},a.fn.repeater.views={},a.fn.repeater.Constructor=c,a.fn.repeater.noConflict=function(){return a.fn.repeater=b,this}}(a),function(a){if(a.fn.repeater){a.fn.repeater.Constructor.prototype.clearSelectedItems=function(){this.$canvas.find(".repeater-list-check").remove(),this.$canvas.find(".repeater-list-items tr.selected").removeClass("selected")},a.fn.repeater.Constructor.prototype.getSelectedItems=function(){var b=[];return this.$canvas.find(".repeater-list-items tr.selected").each(function(){var c=a(this);b.push({data:c.data("item_data"),element:c})}),b},a.fn.repeater.Constructor.prototype.setSelectedItems=function(b,c){var d,e,f,g,h=this.options.list_selectable,i=this,j=function(){f=a(this),d=f.data("item_data")||{},d[b[e].property]===b[e].value&&k(f,b[e].selected)},k=function(a,b){b=void 0!==b?b:!0,b?(c||"multi"===h||i.clearSelectedItems(),a.hasClass("selected")||(a.addClass("selected"),a.find("td:first").prepend('<div class="repeater-list-check"><span class="glyphicon glyphicon-ok"></span></div>'))):(a.find(".repeater-list-check").remove(),a.removeClass("selected"))};for(a.isArray(b)||(b=[b]),g=c===!0||"multi"===h?b.length:h&&b.length>0?1:0,e=0;g>e;e++)void 0!==b[e].index?(f=this.$canvas.find(".repeater-list-items tr:nth-child("+(b[e].index+1)+")"),f.length>0&&k(f,b[e].selected)):void 0!==b[e].property&&void 0!==b[e].value&&this.$canvas.find(".repeater-list-items tr").each(j)},a.fn.repeater.defaults=a.extend({},a.fn.repeater.defaults,{list_columnRendered:null,list_columnSizing:!0,list_columnSyncing:!0,list_infiniteScroll:!1,list_noItemsHTML:"",list_selectable:!1,list_sortClearing:!1,list_rowRendered:null}),a.fn.repeater.views.list={dataOptions:function(a,b){this.list_sortDirection&&(a.sortDirection=this.list_sortDirection),this.list_sortProperty&&(a.sortProperty=this.list_sortProperty),b(a)},initialize:function(a,b){this.list_sortDirection=null,this.list_sortProperty=null,b()},selected:function(a,b){var c,d=this.options.list_infiniteScroll;this.list_firstRender=!0,this.$loader.addClass("noHeader"),d&&(c="object"==typeof d?d:{},this.infiniteScrolling(!0,c)),b({})},renderer:{complete:function(a,c){b.call(this,a,c)},nested:[{complete:function(b,c){var d,e,f,g,h=[],i=this;if(!this.options.list_columnSizing||this.list_columnsSame)c();else{if(d=0,g=0,b.item.find("td").each(function(){var b,c=a(this),e=0===c.next("td").length?!0:!1;void 0!==i.list_columns[d].width?(b=i.list_columns[d].width,c.outerWidth(b),g+=c.outerWidth(),e?c.outerWidth(""):i.list_columns[d]._auto_width=b):h.push({col:c,index:d,last:e}),d++}),e=h.length,e>0)for(f=Math.floor((this.$canvas.width()-g)/e),d=0;e>d;d++)h[d].last||(h[d].col.outerWidth(f),this.list_columns[h[d].index]._auto_width=f);c()}},render:function(a,b){var c=function(a,b){var c,d,e;if(!a)return!0;if(!b)return!1;for(c=0,e=b.length;e>c;c++){if(!a[c])return!0;for(d in b[c])if(a[c][d]!==b[c][d])return!0}return!1};this.list_firstRender||c(this.list_columns,a.data.columns)?(this.$element.find(".repeater-list-header").remove(),this.list_columns=a.data.columns,this.list_columnsSame=!1,this.list_firstRender=!1,this.$loader.removeClass("noHeader"),b({action:"prepend",item:'<table class="table repeater-list-header" data-preserve="deep" role="grid" aria-readonly="true"><tr data-container="true"></tr></table>'})):(this.list_columnsSame=!0,b({skipNested:!0}))},nested:[{render:function(b,c){var d,e,f,g,h="glyphicon-chevron",i=h+"-down",j=h+"-up",k=b.index,l=this,m=b.subset;d=m[k].cssClass,e=a('<td><span class="glyphicon"></span></td>'),e.addClass(void 0!==d?d:"").prepend(m[k].label),g=e.find("span.glyphicon:first"),f=m[k].sortable,f&&(e.addClass("sortable"),e.on("click.fu.repeater-list",function(){l.list_sortProperty="string"==typeof f?f:m[k].property,e.hasClass("sorted")?g.hasClass(j)?(g.removeClass(j).addClass(i),l.list_sortDirection="desc"):l.options.list_sortClearing?(e.removeClass("sorted"),g.removeClass(i),l.list_sortDirection=null,l.list_sortProperty=null):(g.removeClass(i).addClass(j),l.list_sortDirection="asc"):(b.container.find("td").removeClass("sorted"),g.removeClass(i).addClass(j),l.list_sortDirection="asc",e.addClass("sorted")),l.render({clearInfinite:!0,pageIncrement:null})})),("asc"===m[k].sortDirection||"desc"===m[k].sortDirection)&&(b.container.find("td").removeClass("sorted"),e.addClass("sortable sorted"),"asc"===m[k].sortDirection?(g.addClass(j),this.list_sortDirection="asc"):(g.addClass(i),this.list_sortDirection="desc"),this.list_sortProperty="string"==typeof f?f:m[k].property),c({item:e})},repeat:"data.columns"}]},{after:function(a,b){var c=this.$canvas,d=c.find(".repeater-list-header");this.staticHeight&&a.item.height(c.height()-d.outerHeight()),b()},render:function(b,c){var d,e=this.$canvas.find(".repeater-list-wrapper"),f={};e.length>0?f.action="none":e=a('<div class="repeater-list-wrapper" data-infinite="true"><table class="table repeater-list-items" data-container="true" role="grid" aria-readonly="true"></table></div>'),f.item=e,b.data.items.length<1?(f.skipNested=!0,d=a('<tr class="empty"><td></td></tr>'),d.find("td").append(this.options.list_noItemsHTML),e.find(".repeater-list-items").append(d)):e.find(".repeater-list-items tr.empty:first").remove(),c(f)},nested:[{complete:function(a,b){var c={container:a.container};void 0!==a.item&&(c.item=a.item),this.options.list_rowRendered?this.options.list_rowRendered(c,function(){b()}):b()},render:function(b,c){var d=a('<tr data-container="true"></tr>'),e=this;this.options.list_selectable&&(d.addClass("selectable"),d.attr("tabindex",0),d.data("item_data",b.subset[b.index]),d.on("click.fu.repeater-list",function(){var b=a(this);b.hasClass("selected")?(b.removeClass("selected"),b.find(".repeater-list-check").remove(),e.$element.trigger("itemDeselected.fu.repeater",b)):("multi"!==e.options.list_selectable&&(e.$canvas.find(".repeater-list-check").remove(),e.$canvas.find(".repeater-list-items tr.selected").each(function(){a(this).removeClass("selected"),e.$element.trigger("itemDeselected.fu.repeater",a(this))})),b.addClass("selected"),b.find("td:first").prepend('<div class="repeater-list-check"><span class="glyphicon glyphicon-ok"></span></div>'),e.$element.trigger("itemSelected.fu.repeater",b))}),d.keyup(function(a){13===a.keyCode&&d.trigger("click.fu.repeater-list")})),this.list_curRowIndex=b.index,c({item:d})},repeat:"data.items",nested:[{after:function(a,b){var c={container:a.container};void 0!==a.item&&(c.item=a.item),this.options.list_columnRendered?this.options.list_columnRendered(c,function(){b()}):b()},render:function(b,c){var d=b.subset[b.index].cssClass,e=b.data.items[this.list_curRowIndex][b.subset[b.index].property],f=a("<td></td>"),g=b.subset[b.index]._auto_width;f.addClass(void 0!==d?d:"").append(e),void 0!==g&&f.outerWidth(g),c({item:f})},repeat:"this.list_columns"}]}]}]},resize:function(a,c){b.call(this,{data:{items:[""]}},c)}};var b=function(b,c){var d,e,f=0,g=[];!this.options.list_columnSyncing||b.data.items.length<1?c():(d=this.$element.find(".repeater-list-header:first"),e=this.$element.find(".repeater-list-items:first"),e.find("tr:first td").each(function(){g.push(a(this).outerWidth())}),g.pop(),d.find("td").each(function(){void 0!==g[f]&&a(this).outerWidth(g[f]),f++}),c())}}}(a),function(a){a.fn.repeater&&(a.fn.repeater.defaults=a.extend({},a.fn.repeater.defaults,{thumbnail_infiniteScroll:!1,thumbnail_itemRendered:null,thumbnail_template:'<div class="thumbnail repeater-thumbnail" style="background-color: {{color}};"><img height="75" src="{{src}}" width="65"><span>{{name}}</span></div>'}),a.fn.repeater.views.thumbnail={selected:function(a,b){var c,d=this.options.thumbnail_infiniteScroll;d&&(c="object"==typeof d?d:{},this.infiniteScrolling(!0,c)),b({})},renderer:{render:function(b,c){var d,e=this.$element.find(".repeater-thumbnail-cont"),f={};e.length>0?f.action="none":e=a('<div class="clearfix repeater-thumbnail-cont" data-container="true" data-infinite="true" data-preserve="shallow"></div>'),f.item=e,b.data.items.length<1?(f.skipNested=!0,d=a('<div class="empty"></div>'),d.append(this.options.thumbnail_noItemsHTML),e.append(d)):e.find(".empty:first").remove(),c(f)},nested:[{after:function(a,b){var c={container:a.container};void 0!==a.item&&(c.item=a.item),this.options.thumbnail_itemRendered?this.options.thumbnail_itemRendered(c,function(){b()}):b()},render:function(b,c){var d=b.subset[b.index],e=function(b){for(var c=!1,e=function(){var e,f,g;f=b.indexOf("{{"),e=b.indexOf("}}",f+2),f>-1&&e>-1?(g=a.trim(b.substring(f+2,e)),g=void 0!==d[g]?d[g]:"",b=b.substring(0,f)+g+b.substring(e+2)):c=!0};!c&&b.search("{{")>=0;)e(b);return b};c({item:e(this.options.thumbnail_template)})},repeat:"data.items"}]}})}(a),function(a){var b=a.fn.scheduler,c=function(b,c){var d=this;this.$element=a(b),this.options=a.extend({},a.fn.scheduler.defaults,c),this.$startDate=this.$element.find(".start-datetime .start-date"),this.$startTime=this.$element.find(".start-datetime .start-time"),this.$timeZone=this.$element.find(".timezone-container .timezone"),this.$repeatIntervalPanel=this.$element.find(".repeat-every-panel"),this.$repeatIntervalSelect=this.$element.find(".repeat-options"),this.$repeatIntervalSpinbox=this.$element.find(".repeat-every"),this.$repeatIntervalTxt=this.$element.find(".repeat-every-text"),this.$end=this.$element.find(".repeat-end"),this.$endSelect=this.$end.find(".end-options"),this.$endAfter=this.$end.find(".end-after"),this.$endDate=this.$end.find(".end-on-date"),this.$recurrencePanels=this.$element.find(".repeat-panel"),this.$repeatIntervalSelect.selectlist(),this.$element.find(".selectlist").selectlist(),this.$startDate.datepicker(),this.$startTime.combobox(),""===this.$startTime.find("input").val()&&this.$startTime.combobox("selectByIndex",0),this.$repeatIntervalSpinbox.spinbox("0"===this.$repeatIntervalSpinbox.find("input").val()?{value:1,min:1}:{min:1}),this.$endAfter.spinbox({value:1,min:1}),this.$endDate.datepicker(),this.$element.find(".radio-custom").radio(),this.$repeatIntervalSelect.on("changed.fu.selectlist",a.proxy(this.repeatIntervalSelectChanged,this)),this.$endSelect.on("changed.fu.selectlist",a.proxy(this.endSelectChanged,this)),this.$element.find(".repeat-days-of-the-week .btn-group .btn").on("change.fu.scheduler",function(a,b){d.changed(a,b,!0)}),this.$element.find(".combobox").on("changed.fu.combobox",a.proxy(this.changed,this)),this.$element.find(".datepicker").on("changed.fu.datepicker",a.proxy(this.changed,this)),this.$element.find(".selectlist").on("changed.fu.selectlist",a.proxy(this.changed,this)),this.$element.find(".spinbox").on("changed.fu.spinbox",a.proxy(this.changed,this)),this.$element.find(".repeat-monthly .radio, .repeat-yearly .radio").on("change.fu.scheduler",a.proxy(this.changed,this))};c.prototype={constructor:c,destroy:function(){var b;return this.$element.find("input").each(function(){a(this).attr("value",a(this).val())}),this.$element.find(".datepicker .calendar").empty(),b=this.$element[0].outerHTML,this.$element.find(".combobox").combobox("destroy"),this.$element.find(".datepicker").datepicker("destroy"),this.$element.find(".selectlist").selectlist("destroy"),this.$element.find(".spinbox").spinbox("destroy"),this.$element.find("[type=radio]").radio("destroy"),this.$element.remove(),b},changed:function(b,c,d){d||b.stopPropagation(),this.$element.trigger("changed.fu.scheduler",{data:void 0!==c?c:a(b.currentTarget).data(),originalEvent:b,value:this.getValue()})},disable:function(){this.toggleState("disable")},enable:function(){this.toggleState("enable")},endSelectChanged:function(a,b){var c,d;b?d=b.value:(c=this.$endSelect.selectlist("selectedItem"),d=c.value),this.$endAfter.parent().addClass("hide"),this.$endAfter.parent().attr("aria-hidden","true"),this.$endDate.parent().addClass("hide"),this.$endDate.parent().attr("aria-hidden","true"),"after"===d?(this.$endAfter.parent().removeClass("hide"),this.$endAfter.parent().attr("aria-hidden","false")):"date"===d&&(this.$endDate.parent().removeClass("hide"),this.$endDate.parent().attr("aria-hidden","false"))},getValue:function(){var b,c=this.$repeatIntervalSpinbox.spinbox("value"),d="",e=this.$repeatIntervalSelect.selectlist("selectedItem").value,f=this.$startTime.combobox("selectedItem").text.toLowerCase(),g=this.$timeZone.selectlist("selectedItem");b=function(a,b){var c,d="";return d+=a.getFullYear(),d+=b,c=a.getMonth()+1,d+=10>c?"0"+c:c,d+=b,c=a.getDate(),d+=10>c?"0"+c:c};var h,i,j,k,l,m,n,o;n=""+b(this.$startDate.datepicker("getDate"),"-"),n+="T",j=f.search("am")>=0,k=f.search("pm")>=0,f=a.trim(f.replace(/am/g,"").replace(/pm/g,"")).split(":"),f[0]=parseInt(f[0],10),f[1]=parseInt(f[1],10),j&&f[0]>11?f[0]=0:k&&f[0]<12&&(f[0]+=12),n+=f[0]<10?"0"+f[0]:f[0],n+=":",n+=f[1]<10?"0"+f[1]:f[1],n+="+00:00"===g.offset?"Z":g.offset,"none"===e?d="FREQ=DAILY;INTERVAL=1;COUNT=1;":"hourly"===e?(d="FREQ=HOURLY;",d+="INTERVAL="+c+";"):"daily"===e?(d+="FREQ=DAILY;",d+="INTERVAL="+c+";"):"weekdays"===e?(d+="FREQ=DAILY;",d+="BYDAY=MO,TU,WE,TH,FR;",d+="INTERVAL=1;"):"weekly"===e?(i=[],this.$element.find(".repeat-days-of-the-week .btn-group input:checked").each(function(){i.push(a(this).data().value)}),d+="FREQ=WEEKLY;",d+="BYDAY="+i.join(",")+";",d+="INTERVAL="+c+";"):"monthly"===e?(d+="FREQ=MONTHLY;",d+="INTERVAL="+c+";",o=this.$element.find("input[name=repeat-monthly]:checked").val(),"bymonthday"===o?(h=parseInt(this.$element.find(".repeat-monthly-date .selectlist").selectlist("selectedItem").text,10),d+="BYMONTHDAY="+h+";"):"bysetpos"===o&&(i=this.$element.find(".month-days").selectlist("selectedItem").value,m=this.$element.find(".month-day-pos").selectlist("selectedItem").value,d+="BYDAY="+i+";",d+="BYSETPOS="+m+";")):"yearly"===e&&(d+="FREQ=YEARLY;",o=this.$element.find("input[name=repeat-yearly]:checked").val(),"bymonthday"===o?(l=this.$element.find(".repeat-yearly-date .year-month").selectlist("selectedItem").value,h=this.$element.find(".year-month-day").selectlist("selectedItem").text,d+="BYMONTH="+l+";",d+="BYMONTHDAY="+h+";"):"bysetpos"===o&&(i=this.$element.find(".year-month-days").selectlist("selectedItem").value,m=this.$element.find(".year-month-day-pos").selectlist("selectedItem").value,l=this.$element.find(".repeat-yearly-day .year-month").selectlist("selectedItem").value,d+="BYDAY="+i+";",d+="BYSETPOS="+m+";",d+="BYMONTH="+l+";"));var p=this.$endSelect.selectlist("selectedItem").value,q="";"none"!==e&&("after"===p?q="COUNT="+this.$endAfter.spinbox("value")+";":"date"===p&&(q="UNTIL="+b(this.$endDate.datepicker("getDate"),"")+";")),d+=q;var r={startDateTime:n,timeZone:{name:g.name,offset:g.offset},recurrencePattern:d};return r},repeatIntervalSelectChanged:function(a,b){var c,d,e;switch(b?(d=b.value,e=b.text):(c=this.$repeatIntervalSelect.selectlist("selectedItem"),d=c.value,e=c.text),this.$repeatIntervalTxt.text(e),d.toLowerCase()){case"hourly":case"daily":case"weekly":case"monthly":this.$repeatIntervalPanel.removeClass("hide"),this.$repeatIntervalPanel.attr("aria-hidden","false");break;default:this.$repeatIntervalPanel.addClass("hide"),this.$repeatIntervalPanel.attr("aria-hidden","true")}this.$recurrencePanels.addClass("hide"),this.$recurrencePanels.attr("aria-hidden","true"),this.$element.find(".repeat-"+d).removeClass("hide"),this.$element.find(".repeat-"+d).attr("aria-hidden","false"),"none"===d?(this.$end.addClass("hide"),this.$end.attr("aria-hidden","true")):(this.$end.removeClass("hide"),this.$end.attr("aria-hidden","false"))},setValue:function(b){var c,d,e,f,g,h,i,j;if(b.startDateTime&&(j=b.startDateTime.split("T"),this.$startDate.datepicker("setDate",j[0]),j[1]&&(j[1]=j[1].split(":"),c=parseInt(j[1][0],10),g=j[1][1]?parseInt(j[1][1].split("+")[0].split("-")[0].split("Z")[0],10):0,h=12>c?"AM":"PM",0===c?c=12:c>12&&(c-=12),g=10>g?"0"+g:g,j=c+":"+g+" "+h,this.$startTime.find("input").val(j),this.$startTime.combobox("selectByText",j))),e="li[data",b.timeZone?(e+="string"==typeof b.timeZone?'-name="'+b.timeZone:b.timeZone.name?'-name="'+b.timeZone.name:'-offset="'+b.timeZone.offset,e+='"]',this.$timeZone.selectlist("selectBySelector",e)):b.startDateTime&&(j=b.startDateTime.split("T")[1],j=j?j.search(/\+/)>-1?"+"+a.trim(j.split("+")[1]):j.search(/\-/)>-1?"-"+a.trim(j.split("-")[1]):"+00:00":"+00:00",e+='-offset="'+j+'"]',this.$timeZone.selectlist("selectBySelector",e)),b.recurrencePattern){for(i={},j=b.recurrencePattern.toUpperCase().split(";"),d=0,f=j.length;f>d;d++)""!==j[d]&&(e=j[d].split("="),i[e[0]]=e[1]);if("DAILY"===i.FREQ)e="MO,TU,WE,TH,FR"===i.BYDAY?"weekdays":"1"===i.INTERVAL&&"1"===i.COUNT?"none":"daily";else if("HOURLY"===i.FREQ)e="hourly";else if("WEEKLY"===i.FREQ){if(i.BYDAY)for(e=this.$element.find(".repeat-days-of-the-week .btn-group"),e.find("label").removeClass("active"),j=i.BYDAY.split(","),d=0,f=j.length;f>d;d++)e.find('input[data-value="'+j[d]+'"]').parent().addClass("active");e="weekly"}else"MONTHLY"===i.FREQ?(this.$element.find(".repeat-monthly input").removeAttr("checked").removeClass("checked"),this.$element.find(".repeat-monthly label.radio-custom").removeClass("checked"),i.BYMONTHDAY?(j=this.$element.find(".repeat-monthly-date"),j.find("input").addClass("checked").attr("checked","checked"),j.find("label.radio-custom").addClass("checked"),j.find(".selectlist").selectlist("selectByValue",i.BYMONTHDAY)):i.BYDAY&&(j=this.$element.find(".repeat-monthly-day"),j.find("input").addClass("checked").attr("checked","checked"),j.find("label.radio-custom").addClass("checked"),i.BYSETPOS&&j.find(".month-day-pos").selectlist("selectByValue",i.BYSETPOS),j.find(".month-days").selectlist("selectByValue",i.BYDAY)),e="monthly"):"YEARLY"===i.FREQ?(this.$element.find(".repeat-yearly input").removeAttr("checked").removeClass("checked"),this.$element.find(".repeat-yearly label.radio-custom").removeClass("checked"),i.BYMONTHDAY?(j=this.$element.find(".repeat-yearly-date"),j.find("input").addClass("checked").attr("checked","checked"),j.find("label.radio-custom").addClass("checked"),i.BYMONTH&&j.find(".year-month").selectlist("selectByValue",i.BYMONTH),j.find(".year-month-day").selectlist("selectByValue",i.BYMONTHDAY)):i.BYSETPOS&&(j=this.$element.find(".repeat-yearly-day"),j.find("input").addClass("checked").attr("checked","checked"),j.find("label.radio-custom").addClass("checked"),j.find(".year-month-day-pos").selectlist("selectByValue",i.BYSETPOS),i.BYDAY&&j.find(".year-month-days").selectlist("selectByValue",i.BYDAY),i.BYMONTH&&j.find(".year-month").selectlist("selectByValue",i.BYMONTH)),e="yearly"):e="none";i.COUNT?(this.$endAfter.spinbox("value",parseInt(i.COUNT,10)),this.$endSelect.selectlist("selectByValue","after")):i.UNTIL&&(j=i.UNTIL,8===j.length&&(j=j.split(""),j.splice(4,0,"-"),j.splice(7,0,"-"),j=j.join("")),this.$endDate.datepicker("setDate",j),this.$endSelect.selectlist("selectByValue","date")),this.endSelectChanged(),i.INTERVAL&&this.$repeatIntervalSpinbox.spinbox("value",parseInt(i.INTERVAL,10)),this.$repeatIntervalSelect.selectlist("selectByValue",e),this.repeatIntervalSelectChanged()}},toggleState:function(a){this.$element.find(".combobox").combobox(a),this.$element.find(".datepicker").datepicker(a),this.$element.find(".selectlist").selectlist(a),this.$element.find(".spinbox").spinbox(a),this.$element.find("[type=radio]").radio(a),a="disable"===a?"addClass":"removeClass",this.$element.find(".repeat-days-of-the-week .btn-group")[a]("disabled")},value:function(a){return a?this.setValue(a):this.getValue()}},a.fn.scheduler=function(b){var d,e=Array.prototype.slice.call(arguments,1),f=this.each(function(){var f=a(this),g=f.data("fu.scheduler"),h="object"==typeof b&&b;g||f.data("fu.scheduler",g=new c(this,h)),"string"==typeof b&&(d=g[b].apply(g,e))});return void 0===d?f:d},a.fn.scheduler.defaults={},a.fn.scheduler.Constructor=c,a.fn.scheduler.noConflict=function(){return a.fn.scheduler=b,this},a(document).on("mousedown.fu.scheduler.data-api","[data-initialize=scheduler]",function(b){var c=a(b.target).closest(".scheduler");c.data("fu.scheduler")||c.scheduler(c.data())}),a(function(){a("[data-initialize=scheduler]").each(function(){var b=a(this);b.data("scheduler")||b.scheduler(b.data())})})}(a)});
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/jquery/js/jquery.js b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/jquery/js/jquery.js
deleted file mode 100644
index 83589daa707a25a1fb3e4112075d382e9a1611ab..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/jquery/js/jquery.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jQuery v1.8.3 jquery.com | jquery.org/license */
-(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window);
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/LICENSE.txt b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/LICENSE.txt
deleted file mode 100644
index becb6be5b962b2a5b7fa80fe2dd32bead7044e98..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/LICENSE.txt
+++ /dev/null
@@ -1 +0,0 @@
-MIT license
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/VERSION.txt b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/VERSION.txt
deleted file mode 100644
index 0e2c93950bb65d053566355a9458a743878b70d8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/VERSION.txt
+++ /dev/null
@@ -1 +0,0 @@
-0.7
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/js/naturalSort.js b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/js/naturalSort.js
deleted file mode 100644
index f6dc3951c1367acc151a52c5dd9421addddd390c..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/html/lib/naturalsort/js/naturalSort.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
-* 
-* Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
-* Author: Jim Palmer (based on chunking idea from Dave Koelle)
-* 
-* @param a first string to compare
-* @param b second string to compare
-* @return 1 if a > b, 0 if a == b, -1 if a < b
-* 
-* @see http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm-with-unicode-support/
-*/
-naturalSort = function(a, b) {
-	var re  = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
-		sre = /(^[ ]*|[ ]*$)/g,
-		dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
-		hre = /^0x[0-9a-f]+$/i,
-		ore = /^0/,
-		i = function(s) {
-			return naturalSort.insensitive && ('' + s).toLowerCase() || '' + s;
-		},
-		// convert all to strings strip whitespace
-		x = i(a).replace(sre, '') || '',
-		y = i(b).replace(sre, '') || '',
-		// chunk/tokenize
-		xN = x.replace(re, '\0$1\0').replace(/\0$/, '').replace(/^\0/,'').split('\0'),
-		yN = y.replace(re, '\0$1\0').replace(/\0$/, '').replace(/^\0/,'').split('\0'),
-		// numeric, hex or date detection
-		xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
-		yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null, oFxNcL, oFyNcL;
-	// first try and sort Hex codes or Dates
-	if (yD)
-		if (xD < yD)
-			return -1;
-		else if (xD > yD)
-			return 1;
-	// natural sorting through split numeric strings and default strings
-	for (var cLoc = 0, numS = Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
-		// find floats not starting with '0', string or 0 if not defined (Clint Priest)
-		oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
-		oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
-		// handle numeric vs string comparison - number < string - (Kyle Adams)
-		if (isNaN(oFxNcL) !== isNaN(oFyNcL)) {
-			return (isNaN(oFxNcL)) ? 1 : -1;
-		}
-		// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
-		else if (typeof oFxNcL !== typeof oFyNcL) {
-			oFxNcL += '';
-			oFyNcL += '';
-		}
-		if (oFxNcL < oFyNcL)
-			return -1;
-		if (oFxNcL > oFyNcL)
-			return 1;
-	}
-return 0;
-};
diff --git a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/plugin.properties b/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/plugin.properties
deleted file mode 100644
index 7386c4873030d2d7423dcfedbcb0a618abb2ef64..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/fuelux/1/as/webapps/fuelux-widget-webapp/plugin.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-label = FuelUX Widget
-webapp-folder = html
-openbisui-contexts = experiment-details-view
-experiment-entity-types = .*
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/BioFormatsProcessor.py b/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/BioFormatsProcessor.py
deleted file mode 100644
index e319c0d6cc7f02309dae12615a3987012fee94ce..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/BioFormatsProcessor.py
+++ /dev/null
@@ -1,440 +0,0 @@
-"""
-Created on Feb 6, 2014
-
-@author: Aaron Ponti, Franz-Josef Elmer
-"""
-
-from loci.formats import FormatTools
-from loci.formats import ChannelSeparator
-from loci.formats import ChannelFiller
-from loci.formats import MetadataTools
-from ch.systemsx.cisd.imagereaders import ImageReaderFactory
-
-class BioFormatsProcessor:
-    """The BioFormatsProcessor class scans a file using the bio-formats library and
-    extracts relevant metadata information for registration."""
-
-    # File path
-    _filePath = None
-
-    # LOCI reader object
-    _reader = None
-
-    # OME metadata store object
-    _metadataStore = None
-
-    # Number of series in the file
-    _nSeries = 0
-
-    # Array of metadata disctionaries (one per series)
-    _metadata = []
-
-
-    def __init__(self, file):
-        """
-        Constructor.
-        """
-
-        # Microscopy file path
-        self._filePath = file.getPath()
-
-        # Initialize the LOCI reader
-        self._reader = ChannelSeparator(ChannelFiller())
-        self._reader.setMetadataStore(MetadataTools.createOMEXMLMetadata())
-
-        # Set the filename
-        self._reader.setId(self._filePath)
-
-        # Store a reference to the OME metadata store
-        self._metadataStore = self._reader.getMetadataStore()
-
-        # Initialize the metadata structure
-        self._initMetadata()
-        reader = ImageReaderFactory.tryGetReaderForFile("BioFormats", self._filePath)
-        
-        print ">>>>>>>>>>>>>"
-        print "File: %s" % file
-        print "Reader: %s" % reader.getName()
-        imageIDs = reader.getImageIDs(file)
-        print "ImageIDs: %s" % imageIDs
-        seriesIndex = -1
-        for id in imageIDs:
-            if seriesIndex != id.seriesIndex:
-                seriesIndex = id.seriesIndex
-                metaData = reader.readMetaData(file, id, None)
-                print "Meta data for image ID '%s'" % id
-                for k in metaData:
-                    try:
-                        print "  %s: %s" % (k, metaData[k])
-                    except:
-                        pass
-
-    def extractMetadata(self):
-        """Extract and store needed metadata"""
-
-        # Dataset sizes
-        self._getDatasetSizes()
-
-        # Data types
-        self._getDataTypes()
-
-        # Voxel sizes
-        self._getVoxelSizes()
-
-        # Acquisition dates
-        self._getAcquisitionDates()
-
-        # Mark thumbnails
-        self._markThumbnails()
-
-        # Channel names
-        self._getChannelNames()
-
-        # Channel colors
-        self._getChannelColors()
-
-        # Get wavelengths
-        self._getWavelengths()
-
-        # Get time stamps
-        self._getTimeStamps()
-
-
-    def getMetadata(self):
-        """
-        Return the extracted metadata.
-        """
-
-        return self._metadata
-
-
-    def getNumSeries(self):
-        """
-        Return the number of series in file.
-        """
-
-        return self._nSeries
-
-
-    # # #
-    # # # PRIVATE METHODS
-    # # #
-
-    def _initMetadata(self):
-
-        # Initialize metadata dictionary
-        metadata = {'seriesNumber'      : 0,
-                    'nImages'           : 0,
-                    'sizeX'             : 0,
-                    'sizeY'             : 0,
-                    'sizeZ'             : 0,
-                    'sizeC'             : 0,
-                    'sizeT'             : 0,
-                    'voxelSizeX'        : 0,
-                    'voxelSizeY'        : 0,
-                    'voxelSizeZ'        : 0,
-                    'datatype'          : None,
-                    'isLittleEndian'    : False,
-                    'isSigned'          : False,
-                    'isThumbnail'       : False,
-                    'acquisitionDate'   : '',
-                    'channelNames'      : [],
-                    'channelColors'     : [],
-                    'emWavelengths'     : [],
-                    'exWavelengths'     : [],
-                    'NumericalAperture' : 0,
-                    'timestamps'        : []}
-
-        # Get and store the number of series
-        self._nSeries = self._reader.getSeriesCount()
-
-        # Initialize metadata dictionaries (one per series)
-        n = 0
-        while n < self._nSeries:
-            self._metadata.append(metadata.copy())
-            n += 1
-
-
-    def _getAcquisitionDates(self):
-        """
-        Extract the acquisition dates from all series.
-        """
-
-        # Get and store all acquisition dates
-        for n in range(self._nSeries):
-
-            # Change to current series
-            self._reader.setSeries(n)
-
-            acqDate = self._metadataStore.getImageAcquisitionDate(n)
-            if acqDate is None:
-                acqDate = ''
-            else:
-                acqDate = acqDate.getValue()
-
-            self._metadata[n]['acquisitionDate'] = acqDate
-
-
-    def _getChannelColors(self):
-        """
-        Extracts the colors as RGBA vectors of all channels from all series.
-        """
-
-        # Get and store all channel names
-        for n in range(self._nSeries):
-
-            # Initialize
-            self._metadata[n]['channelColors'] = []
-
-            # Change to series
-            self._reader.setSeries(n)
-
-            # Get the number of channels in this series
-            nChannels = self._reader.getSizeC()
-
-            for ch in range(nChannels):
-
-                # Get the channel color
-                color = self._metadataStore.getChannelColor(n, ch)
-                if color is None:
-                    colorsRGBA = [255, 255, 255, 255]
-                else:
-                    colorsRGBA = [color.getRed(), color.getGreen(),
-                                  color.getBlue(), color.getAlpha()]
-
-                # Store color for current channel in current series
-                self._metadata[n]['channelColors'].append(colorsRGBA)
-
-
-    def _getChannelNames(self):
-        """
-        Extracts the names of all channels from all series.
-        """
-
-        # Get and store all channel names
-        for n in range(self._nSeries):
-
-            # Initialize
-            self._metadata[n]['channelNames'] = []
-
-            # Change to series
-            self._reader.setSeries(n)
-
-            # Get the number of channels in this series
-            nChannels = self._reader.getSizeC()
-
-            for ch in range(nChannels):
-
-                # Get channel name
-                name = self._metadataStore.getChannelName(n, ch)
-                if name is None:
-                    name = "No name"
-
-                # Remove 0-byte at the end of the string if present
-                if name.endswith('\x00'):
-                    name = name[:-1]
-
-                # Store name for current channel in current series
-                self._metadata[n]['channelNames'].append(name)
-
-
-    def _getDatasetSizes(self):
-        """
-        Extract dataset sizes for all series.
-        """
-
-        # Get and store all dataset sizes for all series
-        for n in range(self._nSeries):
-
-            # Change to current series
-            self._reader.setSeries(n)
-
-            # Get sizes
-            self._metadata[n]['nImages'] = self._reader.getImageCount();
-            self._metadata[n]['sizeX'] = self._reader.getSizeX();
-            self._metadata[n]['sizeY'] = self._reader.getSizeY();
-            self._metadata[n]['sizeZ'] = self._reader.getSizeZ();
-            self._metadata[n]['sizeC'] = self._reader.getSizeC();
-            self._metadata[n]['sizeT'] = self._reader.getSizeT();
-
-
-    def _getDataTypes(self):
-        """
-        Get data types for all series.
-        """
-
-        # Get and store all dataset sizes for all series
-        for n in range(self._nSeries):
-
-            # Change to current series
-            self._reader.setSeries(n)
-
-            # Get the pixel type
-            pixelType = self._reader.getPixelType()
-
-            # Bytes per pixel
-            BytesPerPixel = FormatTools.getBytesPerPixel(pixelType)
-            if BytesPerPixel == 1:
-                datatype = 'uint8'
-            elif BytesPerPixel == 2:
-                datatype = 'uint16'
-            elif BytesPerPixel == 4:
-                # This is 32-bit floating point
-                datatype = 'single'
-            else:
-                datatype = "unsupported"
-
-            # Is the data type signed?
-            isSigned = FormatTools.isSigned(pixelType)
-
-            # Endianity
-            isLittleEndian = self._reader.isLittleEndian()
-
-            # Store data type information
-            self._metadata[n]['datatype'] = datatype
-            self._metadata[n]['isLittleEndian'] = isLittleEndian
-            self._metadata[n]['isSigned'] = isSigned
-
-
-    def _getNAs(self):
-        """
-        Get the numerical aperture for all series.
-        """
-
-        # Get and store all numerical apertures
-        for n in range(self._nSeries):
-
-            # Initialize
-            self._metadata[n]['NumericalAperture'] = []
-
-            # Change to series
-            self._reader.setSeries(n)
-
-            # Get the number of instruments and objectives for this series
-            # Expected: 1 and 1.
-            nInstr = self._metadataStore.getInstrumentCount()
-            nObj = self._metadataStore.getObjectiveCount()
-
-            for i in range(nInstr):
-                for o in range(nObj):
-                    NA = self._metadataStore.getObjectiveLensNA(i, o)
-                    self._metadata[n]['NumericalAperture'].append(NA)
-
-
-    def _getTimeStamps(self):
-        """
-        Extracts the timestamps from all series.
-        """
-
-        # Get and store all channel names
-        for n in range(self._nSeries):
-
-            # Initialize
-            self._metadata[n]['timestamps'] = []
-
-            # Change to series
-            self._reader.setSeries(n)
-
-            # Number of time stamps to retrieve
-            nTimepoints = self._reader.getSizeT()
-
-            # Iterate over the keys and get the values
-            for tp in range(nTimepoints):
-
-                option = 'timestamp ' + str(tp)
-                t = self._reader.getSeriesMetadataValue(option)
-                if t is None:
-                    t = "NaN"
-
-                # Store timestamps for current series
-                self._metadata[n]['timestamps'].append(t)
-
-
-    def _getVoxelSizes(self):
-        """
-        Extract voxel sizes for all series.
-        """
-
-        # Get and store all voxel sizes for all series
-        for n in range(self._nSeries):
-
-            # Change to current series
-            self._reader.setSeries(n)
-
-            # Voxel size X
-            voxelX = self._metadataStore.getPixelsPhysicalSizeX(n)
-            if voxelX is None:
-                voxelX = 0;
-            else:
-                voxelX = voxelX.value()
-
-            self._metadata[n]['voxelSizeX'] = voxelX
-
-            # Voxel size Y
-            voxelY = self._metadataStore.getPixelsPhysicalSizeY(n)
-            if voxelY is None:
-                voxelY = 0;
-            else:
-                voxelY = voxelY.value()
-
-            self._metadata[n]['voxelSizeY'] = voxelY
-
-            # Voxel size Z
-            voxelZ = self._metadataStore.getPixelsPhysicalSizeZ(n)
-            if voxelZ is None:
-                voxelZ = 0;
-            else:
-                voxelZ = voxelZ.value()
-
-            self._metadata[n]['voxelSizeZ'] = voxelZ
-
-
-    def _getWavelengths(self):
-        """
-        Extracts the excitation and emission wavelengths of all channels
-        from all series.
-        """
-
-        # Get and store all channel names
-        for n in range(self._nSeries):
-
-            # Initialize
-            self._metadata[n]['exWavelengths'] = []
-            self._metadata[n]['emWavelengths'] = []
-
-            # Change to series
-            self._reader.setSeries(n)
-
-            # Get the number of channels in this series
-            nChannels = self._reader.getSizeC()
-
-            for ch in range(nChannels):
-
-                # Get and store emission wavelength for current channel in
-                # current series
-                em = self._metadataStore.getChannelEmissionWavelength(n, ch)
-                if em is None:
-                    em = "NaN"
-                self._metadata[n]['emWavelengths'].append(em)
-
-                # Get and store excitation wavelength for current channel in
-                # current series
-                ex = self._metadataStore.getChannelExcitationWavelength(n, ch)
-                if ex is None:
-                    ex = "NaN"
-                self._metadata[n]['exWavelengths'].append(ex)
-
-
-    def _markThumbnails(self):
-        """
-        Mark which series contain thumbnails.
-        """
-
-        # Mark all series whether they are thumbnails or not
-        for n in range(self._nSeries):
-
-            # Change to current series
-            self._reader.setSeries(n)
-
-            # Check if thumbnail
-            self._metadata[n]['isThumbnail'] = self._reader.isThumbnailSeries()
diff --git a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/MicroscopySingleDatasetConfig.py b/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/MicroscopySingleDatasetConfig.py
deleted file mode 100644
index a904afb2f542ff3024692baa14545d29d85fb70e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/MicroscopySingleDatasetConfig.py
+++ /dev/null
@@ -1,187 +0,0 @@
-"""
-
-@author: Aaron Ponti, Franz-Josef Elmer
-"""
-
-import re
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import SimpleImageDataConfig
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import SimpleImageContainerDataConfig
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import ChannelColor
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import ImageIdentifier
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import ImageMetadata
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import OriginalDataStorageFormat
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import ChannelColorRGB
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import Channel
-from ch.systemsx.cisd.openbis.dss.etl.dto.api.impl import MaximumIntensityProjectionGenerationAlgorithm
-
-class MicroscopySingleDatasetConfig(SimpleImageContainerDataConfig):
-    # MetadataReader used to extract relevant metadata information using
-    # the LOCI bio-formats library.
-    _metadataReader = None
-
-    # Number of the series to register (for a multi-series dataset.
-    _seriesNum = 0
-
-    def __init__(self, metadataReader, seriesNum=0):
-        """Constructor.
-
-        @param metadataReader: MetadataReader object (with extracted metadata)
-        @param seriesNum: Int Number of the series to register. All other series in
-                   the file will be ignored.
-        """
-
-        self._metadataReader = metadataReader
-        self._seriesNum = seriesNum
-
-        self.setMicroscopyData(True)
-        self.setDataSetType("MICROSCOPY_IMG")
-        self.setOriginalDataStorageFormat(OriginalDataStorageFormat.UNCHANGED)
-        self.setImageLibrary("BioFormats")
-        self.setRecognizedImageExtensions(['lsm', 'stk', 'lif', 'nd2', 'gel', 'tiff'])
-        self.setGenerateThumbnails(True)
-
-        self.setUseImageMagicToGenerateThumbnails(True)
-        
-#        self.setGenerateHighQuality8BitThumbnails(False)
-        self.addGeneratedImageRepresentationWithResolution("1000x1000")
-        self.addGeneratedImageRepresentationWithResolution("250x250")
-        self.setImageGenerationAlgorithm(
-                MaximumIntensityProjectionGenerationAlgorithm("ELN_PREVIEW", 250, 250,"thumbnail.png").useThumbnails())
-        
-    def createChannel(self, channelCode):
-        """Create a channel from the channelCode with the name as read from
-        the file via the MetadataReader.
-
-        @param channelCode Code of the channel as generated by extractImagesMetadata().
-        """
-
-        # Get the indices of series and channel from the channel code
-        (seriesIndx, channelIndx) = self._getSeriesAndChannelNumbers(channelCode)
-
-        if seriesIndx != self._seriesNum:
-            return
-
-        # Try extracting the channel colors for the given series
-        try:
-            channelNames = self._metadataReader.getMetadata()[seriesIndx]['channelNames']
-        except IndexError:
-            raise("Could not channel name for series " + str(seriesIndx) + " from MetadataReader.")
-
-        # Try extracting the name
-        try:
-            name = channelNames[channelIndx]
-        except:
-            raise("Could not extract name with index " + channelIndx)
-
-        # In case no name was found, assign default name
-        if name == "":
-            name = "No name"
-
-        # Return the color
-        return Channel(channelCode, name, self._getChannelColorRGB(channelCode))
-
-
-    def extractImagesMetadata(self, imagePath, imageIdentifiers):
-        """Overrides extractImagesMetadata method making sure to store
-        both series and channel indices in the channel code to be reused
-        later to extract color information and other metadata.
-
-        The channel code is in the form SERIES-(\d+)_CHANNEL-(\d+).
-
-        Only metadata for the relevant series number is returned!
-
-        @param imagePath Full path to the file to process
-        @param imageIdentifiers Array of ImageIdentifier's
-
-        @see constructor.
-        """
-
-        # Initialize array of metadata entries
-        metaData = []
-
-        # Iterate over all image identifiers
-        for id in imageIdentifiers:
-
-            # Extract the info from the image identifier
-            ch = id.colorChannelIndex
-            plane = id.focalPlaneIndex
-            series = id.seriesIndex
-            timepoint = id.timeSeriesIndex
-
-            # Make sure to process only the relevant series
-            if series != self._seriesNum:
-                continue
-
-            # Build the channel code
-            channelCode = "SERIES-" + str(series) + "_CHANNEL-" + str(ch)
-
-            # Initialize a new ImageMetadata object
-            imageMetadata = ImageMetadata();
-
-            # Fill in all information
-            imageMetadata.imageIdentifier = id
-            imageMetadata.seriesNumber = series
-            imageMetadata.timepoint = timepoint
-            imageMetadata.depth = plane
-            imageMetadata.channelCode = channelCode
-            imageMetadata.well = "IGNORED"
-            imageMetadata.tileNumber = 1
-
-            # Append metadata for current image
-            metaData.append(imageMetadata)
-        return metaData
-
-
-    def _getChannelColorRGB(self, channelCode):
-        """Returns a ChannelColorRGB instantiated with the RGB color components
-        extracted from the file by the MetadataReader.
-
-        @param channelCode Code of the channel as generated by extractImagesMetadata().
-        """
-
-        # Get the indices of series and channel from the channel code
-        (seriesIndx, channelIndx) = self._getSeriesAndChannelNumbers(channelCode)
-
-        if seriesIndx != self._seriesNum:
-            return
-
-        # Try extracting the channel colors for the given series
-        try:
-            channelColors = \
-            self._metadataReader.getMetadata()[seriesIndx]['channelColors']
-        except IndexError:
-            raise("Could not extract channel colors for series " + str(seriesIndx) + " from MetadataReader.")
-
-        # Try extracting the color
-        try:
-            color = channelColors[channelIndx]
-            R = color[0]
-            G = color[1]
-            B = color[2]
-            print "Channel: %s, Color: %s" % (channelCode, color)
-        except:
-            raise("Could not extract color with index " + channelIndx)
-
-        return ChannelColorRGB(R, G, B)
-
-
-    def _getSeriesAndChannelNumbers(self, channelCode):
-        """Extract series and channel number from channel code in
-        the form SERIES-(\d+)_CHANNEL-(\d+) to a tuple
-        (seriesIndx, channelIndx).
-
-        @param channelCode Code of the channel as generated by extractImagesMetadata().
-        """
-
-        # Get the indices of series and channel from the channel code
-        p = re.compile("SERIES-(\d+)_CHANNEL-(\d+)")
-        m = p.match(channelCode)
-        if m is None or len(m.groups()) != 2:
-            raise Exception("Could not extract series and channel number!")
-
-        # Now assign the indices
-        seriesIndx = int(m.group(1))
-        channelIndx = int(m.group(2))
-
-        # Return them
-        return seriesIndx, channelIndx
diff --git a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/plugin.properties b/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/plugin.properties
deleted file mode 100644
index bfad624bbb24dbbaad6a1aebdcc9da82eb31134f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/plugin.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#incoming-dir = ${incoming-root-dir}/ias_typhoon/openbis6000user_folder_test
-#incoming-dir = ${incoming-root-dir}/incoming-typhoon
-incoming-dir = /home/openbis/sonas_share_02/ias_typhoon/openbis6000user_folder_test/
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.openbis.dss.etl.jython.v2.JythonPlateDataSetHandlerV2
-script-path = simple-microscopy-dropbox.py
-storage-processor = ch.systemsx.cisd.openbis.dss.etl.MicroscopyStorageProcessor
-storage-processor.data-source = imaging-db
-#incoming-share-id=2
-preferred-share-id=1
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/simple-microscopy-dropbox.py b/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/simple-microscopy-dropbox.py
deleted file mode 100644
index 6bbd20188e84f27e64136225517fcc04eeae75a1..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/gruissem-typhoon-dropbox/1/dss/drop-boxes/gruissem-typhoon-dropbox/simple-microscopy-dropbox.py
+++ /dev/null
@@ -1,91 +0,0 @@
-import os
-import time
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import SimpleImageDataConfig
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import ImageMetadata
-from ch.systemsx.cisd.openbis.dss.etl.dto.api import ChannelColor
-from BioFormatsProcessor import BioFormatsProcessor
-from MicroscopySingleDatasetConfig import MicroscopySingleDatasetConfig
-
-SPACE_CODE = "TYPHOON"
-PROJECT_CODE = "TYPHOON"
-PROJECT_ID = "/%(SPACE_CODE)s/%(PROJECT_CODE)s" % vars()
-EXPERIMENT_CODE = "TYPHOON_INCOMING"
-EXPERIMENT_ID = "/%(SPACE_CODE)s/%(PROJECT_CODE)s/%(EXPERIMENT_CODE)s" % vars()
-
-#SAMPLE_CODE = "SERIES1"
-#SAMPLE_ID = "/%(SPACE_CODE)s/%(SAMPLE_CODE)s" % vars()
-#path_name, fileExtension = os.path.splitext(incoming.getPath())
-#SAMPLE_CODE = path_name
-#SAMPLE_ID = "/%(SPACE_CODE)s/%(SAMPLE_CODE)s" % vars()
-
-
-def create_space_if_needed(transaction):
-    space = transaction.getSpace(SPACE_CODE)
-    if None == space:
-        space = transaction.createNewSpace(SPACE_CODE, None)
-        space.setDescription("A demo space")
-
-def create_project_if_needed(transaction):
-    project = transaction.getProject(PROJECT_ID)
-    if None == project:
-        create_space_if_needed(transaction)
-        project = transaction.createNewProject(PROJECT_ID)
-        project.setDescription("A demo project")
-        
-def create_experiment_if_needed(transaction):
-    """ Get the specified experiment or register it if necessary """
-    exp = transaction.getExperiment(EXPERIMENT_ID)
-    if None == exp:
-        create_project_if_needed(transaction)
-        print 'Creating new experiment : ' + EXPERIMENT_ID
-        exp = transaction.createNewExperiment(EXPERIMENT_ID, 'TYPHOON')
-        
-    return exp
-    
-def create_sample_if_needed(transaction):
-    """ Get the specified sample or register it if necessary """
-
-    incoming = transaction.getIncoming()
-    path_name = os.path.basename(incoming.getPath())
-    SAMPLE_CODE = os.path.splitext(path_name)[0]
-    SPACE_CODE = "TYPHOON"
-    MILLIS = int(round(time.time() * 1000))
-    SAMPLE_ID = "/%(SPACE_CODE)s/%(SAMPLE_CODE)s-%(MILLIS)s" % vars()
-	
-    print SAMPLE_ID
-
-    samp = transaction.getSample(SAMPLE_ID)
-
-    if None == samp:
-        exp = create_experiment_if_needed(transaction)
-        samp = transaction.createNewSample(SAMPLE_ID, 'TYPHOON_IMG')
-        samp.setExperiment(exp)
-        
-    return samp
-
-     
-def printMetaData(metaDataReader):
-    num_series = metaDataReader.getNumSeries()
-
-    print "Meta data: number of series: %s" % num_series
-    for i in range(num_series):
-        metadata = metaDataReader.getMetadata()[i]
-        print "  meta data for series %s:" % i
-        for k in metadata:
-            print "    %s = %s" % (k, metadata[k]) 
-
-
-def process(transaction): 
-    incoming = transaction.getIncoming()
-    metaDataReader = BioFormatsProcessor(incoming)
-    metaDataReader.extractMetadata()
-    printMetaData(metaDataReader)
-    imageDatasetConfig = MicroscopySingleDatasetConfig(metaDataReader)
-    sample = create_sample_if_needed(transaction)
-    containerDataset = transaction.createNewImageDataSet(imageDatasetConfig, incoming)
-    containerDataset.setSample(sample)
-    thumbnailDatasets = containerDataset.getThumbnailDatasets()
-    for thumbnailDataset in thumbnailDatasets:
-        if thumbnailDataset.getDataSetType() == "ELN_PREVIEW":
-            thumbnailDataset.getRegistrationDetails().getDataSetInformation().setLinkSample(True)
-    transaction.moveFile(incoming.getPath(), containerDataset)
diff --git a/plasmid/source/core-plugins/pankemigration/1/as/definitions.py b/plasmid/source/core-plugins/pankemigration/1/as/definitions.py
deleted file mode 100644
index 9e82f9c468d56d5e6c3f51d95e1bc780c3f09d48..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/as/definitions.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Documentation
-##
-## Properties starting by "+" will be created in openBIS, but will not be read from FileMaker but if set programmatically will be put back in openBIS.
-## Properties starting by "-" will not be created in openBIS but will be read from FileMaker.
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-#
-# Scripts
-#
-commentsScriptName = "COMMENTS";
-annotationsScriptName="ANNOTATIONS"
-geneticModificationsScriptName = "GENETIC_MODIFICATIONS";
-
-seqFileDefinition = [
-    ["NAME", "General", "Name", DataType.VARCHAR, None,    "Name", None, None, False],
-    ["NOTES", "General information", "Notes", DataType.MULTILINE_VARCHAR, None, "Notes regarding the dataset", None, None,False],
-    ["XMLCOMMENTS",    "Comments","Comments List",    DataType.XML,    None,    "Several comments can be added by different users", "COMMENTS_DATA_SET", None,False]
-];
-
-
-#
-#Sample Types
-#
-
-
-strainDefinition = [
-    ["NAME",                             "General",                  "Name",                             DataType.VARCHAR,       None,  "", None, None, False],      
-    ["BBPL_NUM",                         "General",                  "bBPL Number",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["PLASMID",                          "General",                  "Plasmid",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["GENOTYPE",                         "General",                  "Genotype",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],
-    ["SOURCE",                           "General",                  "Source",                             DataType.VARCHAR,       None,  "", None, None, False],
-    ["DEPOSITOR",                        "General",                  "Depositor",                             DataType.CONTROLLEDVOCABULARY,       "LAB_MEMBERS",  "", None, None, False],       
-    ["REFERENCE",                        "General",                  "Reference",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],
-    ["OTHER_COLLECTION_NUMBER",          "General",                  "Other Collection Number",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["MEDIUM",                           "General",                  "Medium",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["RESISTANCE",                       "General",                  "Resistance",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["REMARKS",                          "General",                  "Application/Remarks",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["DATE",                             "General",                  "Date",                             DataType.TIMESTAMP,       None,  "", None, None, False],    
-    ["OTHER",                            "General",                  "Other",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["-BPL_NUMBER",                       "General",                  "BPL Number",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["+GENETIC_MODIFICATIONS",           "Genotype",                 "Genetic modifications",            DataType.MULTILINE_VARCHAR,        None,   "", None, geneticModificationsScriptName, False],
-    ["+STORAGE_NAMES",                   "Physical Storage",         "Storage Name",            DataType.CONTROLLEDVOCABULARY,        "STORAGE_NAMES",    "Storage Name", None, None, False],
-    ["+STORAGE_ROW",                     "Physical Storage",         "Storage Row",            DataType.INTEGER,                    None,                "Storage Row", None, None, False],
-    ["+STORAGE_COLUMN",                  "Physical Storage",         "Storage Column",        DataType.INTEGER,                    None,                "Storage Column", None, None, False],
-    ["STORAGE_BOX_NAME",                 "Physical Storage",         "Box",        DataType.VARCHAR,                    None,                "Storage Box Name", None, None, False],
-    ["+STORAGE_BOX_SIZE",                "Physical Storage",         "Storage Box Size",        DataType.CONTROLLEDVOCABULARY,        "STORAGE_BOX_SIZE",    "Storage Box Size", None, None, False],
-    ["+STORAGE_USER",                    "Physical Storage",         "Storage User Id",        DataType.VARCHAR,                    None,                "Storage User Id", None, None, False],
-    ["STORAGE_POSITION",                 "Physical Storage",         "Location",        DataType.VARCHAR,                    None,                "Storage Position", None, None, False],
-    ["+ANNOTATIONS_STATE",               "Comments",                " Annotations State",                    DataType.XML,                    None,"Annotations State", annotationsScriptName, None, False]
-];
-
-oligoDefinition = [
-    ["NAME",                             "General",                  "Name",                             DataType.VARCHAR,       None,  "", None, None, False],      
-    ["DESCRIPTION",                         "General",                  "Description",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["DEPOSITOR",                        "General",                  "Depositor",                             DataType.CONTROLLEDVOCABULARY,       "LAB_MEMBERS",  "", None, None, False],       
-    ["DATE",                             "General",                  "Date",                             DataType.TIMESTAMP,       None,  "", None, None, False],    
-    ["REMARKS",                          "General",                  "Application/Remarks",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["SEQUENCE",                        "General",                  "Sequence",                             DataType.VARCHAR,       None,  "", None, None, False],
-    ["ALTERNATE_OL_NAME",          "General",                  "Alternate Oligo Name",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["OBPL_NUMBER",                       "General",                  "oBPL Number",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["+STORAGE_NAMES",                   "Physical Storage",         "Storage Name",            DataType.CONTROLLEDVOCABULARY,        "STORAGE_NAMES",    "Storage Name", None, None, False],
-    ["+STORAGE_ROW",                     "Physical Storage",         "Storage Row",            DataType.INTEGER,                    None,                "Storage Row", None, None, False],
-    ["+STORAGE_COLUMN",                  "Physical Storage",         "Storage Column",        DataType.INTEGER,                    None,                "Storage Column", None, None, False],
-    ["STORAGE_BOX_NAME",                 "Physical Storage",         "Box",        DataType.VARCHAR,                    None,                "Storage Box Name", None, None, False],
-    ["+STORAGE_BOX_SIZE",                "Physical Storage",         "Storage Box Size",        DataType.CONTROLLEDVOCABULARY,        "STORAGE_BOX_SIZE",    "Storage Box Size", None, None, False],
-    ["+STORAGE_USER",                    "Physical Storage",         "Storage User Id",        DataType.VARCHAR,                    None,                "Storage User Id", None, None, False],
-    ["STORAGE_POSITION",                 "Physical Storage",         "Location",        DataType.VARCHAR,                    None,                "Storage Position", None, None, False],
-    ["+ANNOTATIONS_STATE",               "Comments",                " Annotations State",                    DataType.XML,                    None,"Annotations State", annotationsScriptName, None, False]
-];
-
-plasmidDefinition = [
-    ["NAME",                             "General",                  "Name",                             DataType.VARCHAR,       None,  "", None, None, False],      
-    ["DESCRIPTION",                         "General",                  "Description",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["SOURCE",                           "General",                  "Source",                             DataType.VARCHAR,       None,  "", None, None, False],
-    ["DEPOSITOR",                        "General",                  "Depositor",                             DataType.CONTROLLEDVOCABULARY,       "LAB_MEMBERS",  "", None, None, False],       
-    ["DATE",                             "General",                  "Date",                             DataType.TIMESTAMP,       None,  "", None, None, False],    
-    ["REFERENCE",                        "General",                  "Reference",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],
-    ["DERIVATIVE_OF",                    "General",                  "Derivative of",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["RESISTANCE",                       "General",                  "Resistance",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["REMARKS",                          "General",                  "Application/Remarks",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["ALTERNATE_PL_NUMBER",              "General",                  "Alternate Plasmid Number",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["PL_NUMBER",                        "General",                  "Plasmid Number",                             DataType.INTEGER,       None,  "", None, None, False],    
-    ["ORIGIN",                            "General",                  "Origin",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["VERIFIED_BY",                            "General",                  "Verified by:",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["VERIFIED_BY_2",                            "General",                  "Verified by 2",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["VERIFIED_BY_3",                            "General",                  "Verified by 3",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["VERIFIED_BY_4",                            "General",                  "Verified by 4",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["GLYCEROL",                            "General",                  "Glycerol",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["PROMOTER",                            "General",                  "Promoter",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["-SEQUENCE",                            "General",                  "Sequence",                             DataType.VARCHAR,       None,  "", None, None, False],    
-    ["+STORAGE_NAMES",                   "Physical Storage",         "Storage Name",            DataType.CONTROLLEDVOCABULARY,        "STORAGE_NAMES",    "Storage Name", None, None, False],
-    ["+STORAGE_ROW",                     "Physical Storage",         "Storage Row",            DataType.INTEGER,                    None,                "Storage Row", None, None, False],
-    ["+STORAGE_COLUMN",                  "Physical Storage",         "Storage Column",        DataType.INTEGER,                    None,                "Storage Column", None, None, False],
-    ["STORAGE_BOX_NAME",                 "Physical Storage",         "Box",        DataType.VARCHAR,                    None,                "Storage Box Name", None, None, False],
-    ["+STORAGE_BOX_SIZE",                "Physical Storage",         "Storage Box Size",        DataType.CONTROLLEDVOCABULARY,        "STORAGE_BOX_SIZE",    "Storage Box Size", None, None, False],
-    ["+STORAGE_USER",                    "Physical Storage",         "Storage User Id",        DataType.VARCHAR,                    None,                "Storage User Id", None, None, False],
-    ["STORAGE_POSITION",                 "Physical Storage",         "Location",        DataType.VARCHAR,                    None,                "Storage Position", None, None, False],
-    ["+ANNOTATIONS_STATE",               "Comments",                " Annotations State",                    DataType.XML,                    None,"Annotations State", annotationsScriptName, None, False]
-];
-
-
diff --git a/plasmid/source/core-plugins/pankemigration/1/as/definitionsVoc.py b/plasmid/source/core-plugins/pankemigration/1/as/definitionsVoc.py
deleted file mode 100644
index ed5783d05f2a4f04769d5b0f2eb6a7bd15fd4fd4..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/as/definitionsVoc.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                          "LAB_MEMBERS": [
-                                            ["TANIA_ROBERTS", "Tania Roberts"],
-                                            ["Andreas_Meyer", "Andreas Meyer"],
-                                            ["Sonja_Billerbeck", "Sonja Billerbeck"],
-                                            ["Marcel_Walser", "Marcel Walser"],
-                                            ["Angelika_Ress", "Angelika Ress"],
-                                            ["Andreas_Bosshart", "Andreas Bosshart"],
-                                            ["Alex_Nilsson", "Alex Nilsson"],
-                                            ["Matthias_Bujara", "Matthias Bujara"],
-                                            ["Michael_Eichenberger", "Michael Eichenberger"],
-                                            ["Jaroslav_Michalko", "Jaroslav Michalko"],
-                                            ["Sven_Panke", "Sven Panke"],
-                                            ["Giorgia_Valesia", "Giorgia Valesia"],
-                                            ["Stefan", "Stefan"],
-                                            ["Sonja_Billerback", "Sonja Billerback"],
-                                            ["Johannes_Haerle", "Johannes Haerle"],
-                                            ["Alexandra_Schulz", "Alexandra Schulz"],
-                                            ["Diana_Ostos_Rangel", "Diana Ostos Rangel"],
-                                            ["Sabine_Oesterle", "Sabine Österle"],
-                                            ["Katja_Becker", "Katja Becker"]
-
-                                        ],
-                         "STORAGE_NAMES":   [
-                                                ["BENCH", "Bench"],
-                                                ["DEFAULT_STORAGE", "Default Storage"]
-                                            ],
-                         
-                         
-                        "STORAGE_BOX_SIZE": [
-                                                ["1X1", "1 x 1 box"],
-                                                ["4X4", "4 x 4 box"],
-                                                ["20X40", "20 x 40 box"]
-                                        ]                         
-
-                         
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/pankemigration/1/as/initialize-master-data.py b/plasmid/source/core-plugins/pankemigration/1/as/initialize-master-data.py
deleted file mode 100644
index 8f659d2f93e551eb7689ecd8d1abaa1c7f816af9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/as/initialize-master-data.py
+++ /dev/null
@@ -1,200 +0,0 @@
-#
-# Copyright 2014 ETH Zuerich, Scientific IT Services
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##
-## Configuration
-##
-#PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/juanf/Documents/workspace/openbis/source/core-plugins/petermigration/1/compatibility/";
-PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/barillac/openbis-panke/servers/core-plugins/filemaker_migration/1/compatibility/";
-
-# MasterDataRegistrationTransaction Class
-import definitions
-import definitionsVoc
-import os
-import copy
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Globals
-##
-vocabulariesCache = {};
-propertiesCache = {};
-samplesCache = {};
-tr = service.transaction()
-
-##
-## API Facade
-##
-def createVocabularyWithTerms(vocabularyCode, terms):
-    vocabulary = tr.createNewVocabulary(vocabularyCode);
-    vocabulary.setChosenFromList(True);
-    addTerms(vocabulary, terms);
-    vocabulariesCache[vocabularyCode] = vocabulary;
-    
-def addTerms(vocabulary, terms):
-    for term in terms:
-        addTermWithLabel(vocabulary, term[0], term[1])
-    
-def addTermWithLabel(vocabulary, termCode, termLabel):
-    newTerm = tr.createNewVocabularyTerm(termCode);
-    newTerm.setLabel(termLabel);
-    vocabulary.addTerm(newTerm);
-    
-def createSampleTypeWithProperties(sampleTypeCode, description, properties):
-    newSampleType = tr.getOrCreateNewSampleType(sampleTypeCode);
-    newSampleType.setDescription(description);
-    newSampleType.setShowParents(True);
-    newSampleType.setAutoGeneratedCode(True);
-    newSampleType.setGeneratedCodePrefix(sampleTypeCode[:3]);
-    addProperties(newSampleType, properties);
-    samplesCache[sampleTypeCode] = newSampleType;
-    
-def createDataSetTypeWithProperties(dataSetCode, description, properties):
-    newDataSet = tr.getOrCreateNewDataSetType(dataSetCode);
-    newDataSet.setDescription(description);
-    addProperties(newDataSet, properties);
-    
-def createExperimentTypeWithProperties(experimentTypeCode, description, properties):
-    newExperiment = tr.getOrCreateNewExperimentType(experimentTypeCode);
-    newExperiment.setDescription(description);
-    addProperties(newExperiment, properties);
-
-def addPropertiesToSamples(sampleTypeCodes, properties):
-    for sampleTypeCode in sampleTypeCodes:
-        sampleType = samplesCache[sampleTypeCode];
-        addProperties(sampleType, properties);
-    
-def addProperties(entity, properties):
-    for property in properties:
-        propertyCode = property[0];
-        if propertyCode.startswith("-"):
-            continue
-        elif propertyCode.startswith("+"):
-            propertyCode = propertyCode[1:];
-        
-        addProperty(entity, propertyCode, property[1], property[2], property[3], property[4], property[5], property[6], property[7], property[8]);
-    
-def addProperty(entity, propertyCode, section, propertyLabel, dataType, vocabularyCode, propertyDescription, managedScript, dynamicScript, isMandatory):
-    property = None;
-    
-    if propertyCode in propertiesCache:
-        property = propertiesCache[propertyCode];
-    else:
-        property = createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode);
-    
-    propertyAssignment = tr.assignPropertyType(entity, property);
-    propertyAssignment.setSection(section);
-    propertyAssignment.setMandatory(isMandatory);
-    propertyAssignment.setShownEdit(True);
-    
-    if managedScript != None:
-        propertyAssignment.setManaged(True);
-        propertyAssignment.setScriptName(managedScript);
-    if dynamicScript != None:
-        propertyAssignment.setDynamic(True);
-        propertyAssignment.setShownEdit(False);
-        propertyAssignment.setScriptName(dynamicScript);
-
-def createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode):
-    property = tr.getOrCreateNewPropertyType(propertyCode, dataType);
-    property.setDescription(propertyDescription);
-    property.setLabel(propertyLabel);
-    propertiesCache[propertyCode] = property;
-    if dataType == DataType.CONTROLLEDVOCABULARY:
-        property.setVocabulary(vocabulariesCache[vocabularyCode]);
-    return property;
-
-#Valid Script Types: DYNAMIC_PROPERTY, MANAGED_PROPERTY, ENTITY_VALIDATION 
-def createScript(path, name, description, scriptType, entityType):
-    scriptAsString = open(path, 'r').read();
-    script = tr.getOrCreateNewScript(name);
-    script.setName(name);
-    script.setDescription(description);
-    script.setScript(scriptAsString);
-    script.setScriptType(scriptType);
-    script.setEntityForScript(entityType);
-    return script;
-
-
-def createAnnotationsScriptForType(sampleTypeCode):
-    annotationsScriptName = None;
-    if PATH_TO_MANAGE_PROPERTIES_SCRIPTS != None:
-        annotationsScriptName = "ANNOTATIONS_" + sampleTypeCode;
-        annotationsScriptAsString = open(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "managed.py", 'r').read();
-        annotationsScriptAsString = annotationsScriptAsString.replace("<REPLACE_WITH_ANNOTABLE_TYPE>", sampleTypeCode);
-        annotationsScript = tr.getOrCreateNewScript(annotationsScriptName);
-        annotationsScript.setName(annotationsScriptName);
-        annotationsScript.setDescription("Annotations Handler for " + sampleTypeCode);
-        annotationsScript.setScript(annotationsScriptAsString);
-        annotationsScript.setScriptType("MANAGED_PROPERTY");
-        annotationsScript.setEntityForScript("SAMPLE");
-    return annotationsScriptName;    
-##
-## Managed properties scripts
-##
-commentsScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "comments.py",
-                                  definitions.commentsScriptName,
-                                  "Comments Handler",
-                                  "MANAGED_PROPERTY",
-                                  "SAMPLE");
-
-##
-## Dynamic properties scripts
-##
-
-
-geneticModificationsScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "genetic_modifications.py",
-                                  definitions.geneticModificationsScriptName,
-                                  "genetic modifications",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-
-    
-
-
-##
-## Vocabulary Types
-##
-for vocabularyCode, vocabularyValues in definitionsVoc.vocabularyDefinitions.iteritems():
-    createVocabularyWithTerms(vocabularyCode, vocabularyValues)
-
-##
-## Experiment Types
-##
-#createExperimentTypeWithProperties("DEFAULT_EXPERIMENT", "Default Experiment", definitions.experimentDefinition);
-#createExperimentTypeWithProperties("MATERIAL", "FOLDER FOR ORGANIZING MATERIALS SAMPLES", []);
-#createExperimentTypeWithProperties("METHOD", "FOLDER FOR ORGANIZING METHODS SAMPLES", []);
-
-#createDatasetTypeWithProperties("SEQ_FILE", "Sequence fasta files", []);
-createDataSetTypeWithProperties("SEQ_FILE", "Sequence fasta files", definitions.seqFileDefinition);
-
-##
-## Sample Types
-##
-annotationsScriptName = createAnnotationsScriptForType("STRAIN");
-createSampleTypeWithProperties("STRAIN", "", definitions.strainDefinition);
-#===================================================================================================
-annotationsScriptName = createAnnotationsScriptForType("PLASMID");
-createSampleTypeWithProperties("PLASMID", "", definitions.plasmidDefinition);
-annotationsScriptName = createAnnotationsScriptForType("OLIGO");
-createSampleTypeWithProperties("OLIGO", "", definitions.oligoDefinition);
-
-#===================================================================================================
-
-
-    
-    
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/pankemigration/1/compatibility/comments.py b/plasmid/source/core-plugins/pankemigration/1/compatibility/comments.py
deleted file mode 100644
index 02c50d2364afd8bf0dce2d50297c6bff2ccb35bf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/compatibility/comments.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from java.util import Date
-
-"""
-Example XML property value handled by this script:
-<root>
-  <commentEntry date="2011-02-20 14:15:28 GMT+01:00" person="buczekp">Here is the 1st  entry text.<commentEntry>
-  <commentEntry date="2011-02-20 14:16:28 GMT+01:00" person="kohleman">Here is the 2nd  entry text - a warning!<commentEntry>
-  <commentEntry date="2011-02-20 14:17:28 GMT+01:00" person="tpylak">Here is the 3rd  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:18:28 GMT+01:00" person="brinn">Here is the 4th  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:19:28 GMT+01:00" person="felmer">Here is the 5th  entry text - a warning!<commentEntry>
-</root>
-"""
-  
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-
-""" labels of table columns and corresponding input fields """
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-  
-""" names of attributes of XML elements for comment entries """
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-  
-""" action labels (shown as button labels in UI) """
-ADD_ACTION_LABEL = 'Add Comment Entry'
-EDIT_ACTION_LABEL = 'Edit'
-DELETE_ACTION_LABEL = 'Delete'
-  
-  
-def configureUI():
-    """Create table builder and add headers of columns."""
-    builder = createTableBuilder()
-    builder.addHeader(DATE_LABEL, 250) # date and comment text values are long, override default width (150)
-    builder.addHeader(PERSON_LABEL)
-    builder.addHeader(COMMENT_TEXT_LABEL, 400)
-      
-    """
-       Extract XML elements from property value to a Python list.
-       For each element (comment entry) add add a row to the table.  
-    """
-    elements = list(propertyConverter().convertToElements(property))
-    for commentEntry in elements:
-        row = builder.addRow()
-        row.setCell(DATE_LABEL, Date(long(commentEntry.getAttribute(DATE_ATTRIBUTE))))
-        row.setCell(PERSON_LABEL, commentEntry.getAttribute(PERSON_ATTRIBUTE))
-        row.setCell(COMMENT_TEXT_LABEL, commentEntry.getData())
-  
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(builder.getTableModel())
-  
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new comment entry,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add a new comment entry:')
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL)\
-                            .setMandatory(True)
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected comment entry,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected comment entry:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL).setMandatory(True)
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(COMMENT_TEXT_LABEL, COMMENT_TEXT_LABEL)
-  
-    """
-       3. delete selected comment entries.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected comment entry?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-  
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new comment entry element with values from input fields
-           and add it to existing elements.
-        """
-        element = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-        """Fill element attributes with appropriate values."""
-        element.addAttribute(DATE_ATTRIBUTE, str(Date().getTime()))            # current date
-        element.addAttribute(PERSON_ATTRIBUTE, action.getPerson().getUserId()) # invoker the action
-        """Retrieve values from input fields filled by user on the client side."""
-
-        """Set comment text as a text element, not an attribute."""
-        element.setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        """Add the new entry to the end of the element list."""
-        elements.append(element)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the comment entry element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        
-        selectedRowId = action.getSelectedRows()[0]
-        xmlUser = elements[selectedRowId].getAttribute(PERSON_ATTRIBUTE)
-        if action.getPerson().getUserId() == xmlUser:
-          elements[selectedRowId].setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        else:
-          raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the entries that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-              xmlUser = elements[rowId].getAttribute(PERSON_ATTRIBUTE)
-              if action.getPerson().getUserId() == xmlUser:
-                elements.pop(rowId)
-              else:
-                raise ValidationException('Comment creator and current user differ:\n' +  str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def _createCommentEntry(comment_text_list):
-    #if comment_text_list is not None:
-    commentEntry = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-                     
-    commentEntry.addAttribute(PERSON_ATTRIBUTE, person.getUserId())
-    commentEntry.addAttribute(DATE_ATTRIBUTE,str(Date().getTime()))
-    commentEntry.setData(comment_text_list)
-    return commentEntry   
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [COMMENT_ENTRY_ELEMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        comment_text_list = item.get('COMMENTENTRY')
-        sampleLink = _createCommentEntry(comment_text_list)
-        elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        commentEntry = _createCommentEntry(input)
-        elements.append(commentEntry)
-        property.value = propertyConverter().convertToString(elements)
diff --git a/plasmid/source/core-plugins/pankemigration/1/compatibility/genetic_modifications.py b/plasmid/source/core-plugins/pankemigration/1/compatibility/genetic_modifications.py
deleted file mode 100644
index b91679ab633450063cacdf52d6c25a0665026535..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/compatibility/genetic_modifications.py
+++ /dev/null
@@ -1,97 +0,0 @@
-import xml.dom.minidom
-from ch.systemsx.cisd.common.exceptions import UserFailureException
-
-configuration = {}
-configuration["YEAST"] = ["PLASMID"]
-configuration["BACTERIA"] = ["PLASMID"]
-configuration["CELL_LINE"] = ["PLASMID"]
-configuration["FLY"] = ["PLASMID"]
-
-def getSampleTypeCode(sampleAdaptor):
-    return sampleAdaptor.samplePE().getSampleType().getCode()
-
-def calculate():
-    #Configuration
-    sampleTypeCode = getSampleTypeCode(entity)
-    typesForGenotype = configuration[sampleTypeCode]
-    
-    genotypeResult = ""
-    isFirst = True
-    parentIterables = [{
-                        "child" : entity,
-                        "parents" : entity.parents(),
-                        "lost" : []
-                        }]
-
-    while len(parentIterables) > 0:
-        parentGroup = parentIterables.pop(0)
-        parents = parentGroup["parents"]
-        child = parentGroup["child"]
-        lostList = parentGroup["lost"][:]
-        
-        newLostList = []
-        newParentIterables = []
-        for parent in parents:
-            parentTypeCode = getSampleTypeCode(parent)
-            if parentTypeCode in typesForGenotype:
-                parentCode = parent.code()
-                #Add the code
-                annotationMap = getAnnotationsForParent(parent, child)
-                if(annotationMap["PLASMID_RELATIONSHIP"] == "LOT"):
-                    newLostList.append(parent.entityPE().getPermId())
-                elif parent.entityPE().getPermId() not in lostList:
-                     #Check if is the first to add the separator or not
-                    if isFirst:
-                        isFirst = False
-                    else:
-                        genotypeResult = genotypeResult + "\n"
-                    genotypeResult = genotypeResult + parent.code() + " " + getAnnotationString(annotationMap)
-            else:
-                newParentIterables.append({
-                                        "child" : parent,
-                                        "parents" : parent.parents()
-                                        })
-        for newParentIterable in newParentIterables:
-            lostList.extend(newLostList);
-            newParentIterable["lost"] = lostList;
-            parentIterables.append(newParentIterable);
-    return genotypeResult
-
-def getAnnotationString(annotationMap):
-    return annotationMap["PLASMID_RELATIONSHIP"] + " " + annotationMap["PLASMID_ANNOTATION"]
-
-def getAnnotationsForParent(parent, child):
-    permId = parent.entityPE().getPermId()
-    annotations = child.propertyValue("ANNOTATIONS_STATE")
-    if (annotations is not None) and ('<root' in annotations):
-        relationshipValue = getAnnotationFromPermId(annotations, permId, "PLASMID_RELATIONSHIP")
-        if relationshipValue is None:
-            relationshipValue = "None"
-        annotationValue = getAnnotationFromPermId(annotations, permId, "PLASMID_ANNOTATION");
-        if annotationValue is None:
-            annotationValue = ""
-        annotation = "\"" + str(annotationValue) + "\""
-        return {"PLASMID_RELATIONSHIP" : str(relationshipValue), "PLASMID_ANNOTATION" : str(annotation)}; 
-    return "No Annotations Found"
-    
-def getAnnotationFromPermId(annotations, permId, key):
-    dom = xml.dom.minidom.parseString(annotations)
-    for child in dom.childNodes[0].childNodes:
-        if child.localName != None:
-            permIdFound = child.attributes["permId"].value
-            if permIdFound == permId:
-                keys = child.attributes.keys();
-                for keyFound in keys:
-                    if keyFound == key:
-                        return child.attributes[key].value
-    return None
-    
-def getValueOrNull(map, key):
-    if key in map:
-        value = map[key]
-        if not value: #Check for null strings
-            return None
-        else:
-            return value
-    else:
-        return None
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/pankemigration/1/compatibility/managed.py b/plasmid/source/core-plugins/pankemigration/1/compatibility/managed.py
deleted file mode 100644
index 6d6312c0f92b6c8bcc7e59032b5bbad4d7005858..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/compatibility/managed.py
+++ /dev/null
@@ -1,331 +0,0 @@
-from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider
-
-##
-## Configuration
-##
-
-# This needs to be edited for each sample type to match the Profile.js ANNOTATION_PROPERTIES map.
-configuration = {}
-configuration["MEDIA"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["SOLUTION_BUFFER"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["GENERAL_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "GENERAL_PROTOCOL" : {"COMMENTS" : False }
-                         };
-
-configuration["PCR_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["WESTERN_BLOTTING_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["PLASMID"] = {
-                          "PLASMID" : {"COMMENTS" : False }
-                         };
-
-configuration["BACTERIA"] = {
-                          "BACTERIA" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False }
-                         };
-
-configuration["YEAST"] = {
-                          "YEAST" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False, "CONTAINED" : False }
-                         };
-
-configuration["CELL_LINE"] = {
-                          "CELL_LINE" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False },
-                          "FLY" : {"COMMENTS" : False }
-                         };
-
-configuration["FLY"] = {
-                          "FLY" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False }
-                         };
-
-configuration["EXPERIMENTAL_STEP"] = {
-                          "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "BACTERIA" : {"COMMENTS" : False },
-                          "CELL_LINE" : {"COMMENTS" : False },
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "FLY" : {"COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "OLIGO" : {"COMMENTS" : False },
-                          "PLASMID" : {"COMMENTS" : False },
-                          "RNA" : {"COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "YEAST" : {"COMMENTS" : False },
-                          "GENERAL_PROTOCOL" : {"COMMENTS" : False },
-                          "PCR_PROTOCOL" : {"COMMENTS" : False },
-                          "WESTERN_BLOTTING_PROTOCOL" : {"COMMENTS" : False }
-                         };
-
-configurationCopyParents = {}
-configurationCopyParents["YEAST"] = { "YEAST" : "PLASMID" };
-
-#Global Variables
-annotableType = "<REPLACE_WITH_ANNOTABLE_TYPE>"
-propertyTypes = None
-def getPropertyTypes():
-    global propertyTypes
-    if propertyTypes is None:
-        server = CommonServiceProvider.getCommonServer()
-        contextOrNull = server.tryToAuthenticateAsSystem()
-        propertyTypes = server.listPropertyTypes(contextOrNull.getSessionToken(), False)
-    return propertyTypes;
-
-##
-## Help Methods
-##
-def getAllAnnotableSampleTypesForType(fromAnnotableType):
-    allTypes = {};
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    allTypes[sampleTypeWithAnnotationsForType] = True;
-    return allTypes;
-
-def getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCodeToFind, fromAnnotableType):
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    if sampleTypeWithAnnotationsForType == sampleTypeCodeToFind:
-                            return configuration[sampleTypeWithAnnotations][sampleTypeWithAnnotationsForType];
-    return None;
-    
-def getPropertyType(propertyTypeCode):
-    for propertyType in getPropertyTypes():
-        if propertyType.code == propertyTypeCode:
-            return propertyType
-    return None;
-
-def createAnnotationsFor(identifier, annotations, sampleType):
-    permId = entityInformationProvider().getSamplePermId(identifier);
-    newAnnotation = elementFactory().createSampleLink(permId)
-    
-    newAnnotation.addAttribute("identifier", identifier)
-    newAnnotation.addAttribute("sampleType", sampleType)
-    for annotation in annotations:
-        newAnnotation.addAttribute(annotation, annotations[annotation])
-    return newAnnotation
-
-def getWidgetForAdd(sampleTypeCode, annotableType):
-    #print "sampleTypeCode:" + sampleTypeCode + " - " + annotableType #Deleting this comment causes the thing to break
-    widgets = []
-    widgetIdentifier = inputWidgetFactory().createTextInputField("identifier")\
-                            .setMandatory(True)\
-                            .setValue("")\
-                            .setDescription("")
-    widgets.append(widgetIdentifier)
-    for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-        propertyType = getPropertyType(propertyTypeCode)
-        widget = inputWidgetFactory().createTextInputField(propertyType.label)\
-                        .setMandatory(getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType)[propertyTypeCode])\
-                        .setValue("")\
-                        .setDescription(propertyType.description)
-        widgets.append(widget)
-    return widgets;
-
-def isValid(dataType, value):
-    return True
-
-##
-## Registration form (EXPERIMENTAL)
-##
-
-# def inputWidgets():
-#     print "EXECUTING inputWidgets START"
-#     widgetsToCopyFrom = []
-#     if annotableType in configurationCopyParents:
-#         toCopyFrom = configurationCopyParents[annotableType]
-#         if(toCopyFrom is not None):
-#             for key in toCopyFrom:
-#                 widgetLabel = key + " to copy " + toCopyFrom[key]
-#                 print "EXECUTING inputWidgets key: " + widgetLabel
-#                 widgetToCopyFrom = inputWidgetFactory().createTextInputField(widgetLabel).setMandatory(False)
-#                 widgetsToCopyFrom.append(widgetToCopyFrom)
-#     print "EXECUTING inputWidgets " + str(len(widgetsToCopyFrom))
-#     return widgetsToCopyFrom
-# 
-# def updateFromRegistrationForm(bindings):
-#     print "EXECUTING updateFromaRegistrationForm"
-#     for key in bindings:
-#         print "MANAGED WITH KEY: " + str(key)
-
-##
-## Main Methods
-##
-def configureUI():
-    # Add Headers
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader("identifier")
-    tableBuilder.addHeader("sampleType")
-    tableBuilder.addHeader("name")
-    
-    usedTableHeaders = {"identifier" : True, "sampleType" : True, "name" : True }
-    
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            if propertyTypeCode not in usedTableHeaders:
-                tableBuilder.addHeader(propertyTypeCode)
-                usedTableHeaders[propertyTypeCode] = True
-
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    # Add Rows
-    samples = list(propertyConverter().convertToElements(property))
-    for sample in samples:
-        row = tableBuilder.addRow()
-        permId = sample.getAttribute("permId")
-        
-        nameValue = entityInformationProvider().getSamplePropertyValue(permId, "NAME")
-        if nameValue is not None:
-            row.setCell("name", nameValue)
-        
-        for annotation in sample.getAttributes():
-            if annotation != "permId":
-                if annotation == "identifier":
-                    row.setCell(annotation, sample, sample.getAttribute(annotation))
-                else:
-                    row.setCell(annotation, sample.getAttribute(annotation))
-            
-    # Add Create buttons
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        title = "Add " + sampleTypeCode;
-        addAction = uiDescription.addTableAction(title).setDescription(title)
-        widgets = getWidgetForAdd(sampleTypeCode, annotableType)
-        addAction.addInputWidgets(widgets)
-
-    # TO-DO Edit button for each type with different hooks to the columns depending on the type
-    # Add Edit Button (EXPERIMENTAL)
-#     editAction = uiDescription.addTableAction('Edit').setDescription('Edit selected table row')
-#     editAction.setRowSelectionRequiredSingle()
-#     editWidgets = []
-#     for headerKey in usedTableHeaders:
-#         editWidgets.append(inputWidgetFactory().createTextInputField(headerKey))
-#         editAction.addBinding(headerKey, headerKey)
-#     editAction.addInputWidgets(editWidgets)
-
-    # Add Delete button
-    deleteAction = uiDescription.addTableAction("Delete")\
-                                .setDescription('Are you sure you want to delete selected annotation?')
-    deleteAction.setRowSelectionRequired() # Delete is enabled when at least 1 row is selected.
-    
-def updateFromUI(action):
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-    
-    if action.name.startswith("Add"):
-        sampleTypeCode = action.name[4:]
-        identifier = action.getInputValue("identifier")
-        annotations = { }
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            propertyType = getPropertyType(propertyTypeCode)
-            propertyTypeValue = action.getInputValue(propertyType.label)
-            if not isValid(propertyType.dataType, propertyTypeValue):
-                raise ValidationException("Property " + str(propertyType.label) + " with invalid value " + str(propertyTypeValue))
-            if propertyTypeValue is None:
-                propertyTypeValue = ""
-            annotations[propertyTypeCode] = propertyTypeValue
-        newAnnotation = createAnnotationsFor(identifier, annotations, sampleTypeCode)
-        elements.append(newAnnotation)
-    
-    if action.name.startswith("Delete"):
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()
-        for rowId in rowIds:
-            elements.pop(rowId) 
-    
-    property.value = converter.convertToString(elements)
-
-##
-## Batch Import Methods
-##
-def batchColumnNames():
-    allTypes = []
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        allTypes.append(sampleTypeCode)
-    return allTypes
-
-def updateFromBatchInput(bindings):
-    #print "--------> UPDATE FROM BATCH INPUT: "
-    elements = []
-    
-    #Links Configuration
-    typesToCopyFrom = []
-    if annotableType in configurationCopyParents:
-        typesToCopyFrom = configurationCopyParents[annotableType]
-                
-    for annotableSampleType in getAllAnnotableSampleTypesForType(annotableType):
-        annotatedSamples = bindings.get(annotableSampleType)
-        #print "-----> TYPE: " + str(annotableSampleType) + " BINDINGS: " + str(annotatedSamples)
-        if (annotatedSamples != None and annotatedSamples != ""):
-            #Annotations
-            #print "-----> Annotations"
-            if annotableSampleType not in typesToCopyFrom:
-                for sampleLine in annotatedSamples.split("\\"):
-                    propertyTypes = getPropertyTypesForSampleTypeFromAnnotableType(annotableSampleType, annotableType)
-                    identifier = None
-                    permId = None
-                    sampleLink = None
-                    for sampleProperty in sampleLine.split(";"):
-                        propertyName = sampleProperty.split(":")[0]
-                        propertyValue = sampleProperty.split(":")[1]
-                        if propertyName == "identifier":
-                            identifier = propertyValue
-                            permId = entityInformationProvider().getSamplePermId(propertyValue)
-                            sampleLink = elementFactory().createSampleLink(permId)
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                            sampleLink.addAttribute('sampleType', annotableSampleType)
-                        elif propertyName in propertyTypes:
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                        else:
-                            raise NameError('Found invalid property: ' + propertyName + " on type " + annotableSampleType)
-                    if identifier is not None:
-                        elements.append(sampleLink)
-    #Links
-    #print "-----> links"
-    for typeToCopyFrom in typesToCopyFrom:
-        typeToCopy = typesToCopyFrom[typeToCopyFrom]
-        #print "-----> TYPE TO COPY FROM: " + str(typeToCopyFrom)
-        #print "-----> TYPE TO COPY: " + str(typeToCopy)
-        identifiersToCopyFrom = bindings.get(typeToCopyFrom)
-        if identifiersToCopyFrom is not None:
-            #print "-----> IDENTIFIERS TO COPY FROM: " + str(identifiersToCopyFrom)
-            identifiersForCopy = identifiersToCopyFrom.split(',')
-            for identifierToCopyFrom in identifiersForCopy:
-                #print "-----> IDENTIFIER TO COPY FROM: " + str(identifierToCopyFrom)
-                permIdFromIdentifier = entityInformationProvider().getSamplePermId(identifierToCopyFrom)
-                #print "-----> PERMID TO COPY FROM: " + str(permIdFromIdentifier)
-                parentsToCopyFromPermId = entityInformationProvider().getSamplePropertyValue(permIdFromIdentifier, "ANNOTATIONS_STATE")
-                #print "-----> ELEMENTS TO COPY: " + str(parentsToCopyFromPermId)
-                parentElements = list(propertyConverter().convertStringToElements(parentsToCopyFromPermId))
-                for parentAnnotation in parentElements:
-                    if parentAnnotation.getAttribute("sampleType") == typeToCopy:
-                        parentAnnotation.addAttribute("CONTAINED", identifierToCopyFrom)
-                        #print "-----> COPYING: " + str(parentAnnotation.getAttribute('identifier'))
-                        elements.append(parentAnnotation)
-    property.value = propertyConverter().convertToString(elements)
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/defs/definitions.py b/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/defs/definitions.py
deleted file mode 100644
index 67f4986e22a26dc0aed0b7262676b19cb2e559b2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/defs/definitions.py
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-#
-# Scripts
-#
-commentsScriptName = "COMMENTS";
-adenosineScriptName = "ADENOSINE_COUNT"
-cytosineScriptName= "CYTOSINE_COUNT"
-gcScriptName= "GC"
-guanosineScriptName= "GUANOSINE_COUNT"
-lengthScriptName= "SEQUENCE_LENGTH"
-nucelotideScriptName= "ONUCLEOTIDE_COUNT"
-thymidineScriptName= "THYMIDINE_COUNT"
-tmScriptName= "TM"
-
-#
-# Storage 
-#
-numberOfStorageGroups = 65
-
-def getStorageGroupPropertyCodes():
-    propertyCodes = [];
-    for property in getStorageGroupDefinition():
-        propertyCodes.append(property[0]);
-    return propertyCodes;
-
-def getStorageGroupDefinition():
-    return [
-    ["STORAGE_NAME",         "Physical Storage",        "location",         DataType.CONTROLLEDVOCABULARY,      "FREEZER",            "Storage Name",       None, None, False],
-    ["STORAGE_ROW",          "Physical Storage",        "Storage Row",      DataType.INTEGER,                    None,                "Storage Row",        None, None, False],
-    ["STORAGE_COLUMN",       "Physical Storage",        "Storage Column",   DataType.INTEGER,                    None,                "Storage Column",     None, None, False],
-    ["STORAGE_BOX_NAME",     "Physical Storage",        "box label",        DataType.VARCHAR,                    None,                "Storage Box Name",   None, None, False],
-    ["STORAGE_USER",         "Physical Storage",        "frozen by",        DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",    "Storage User Id",    None, None, False],
-    ["STORAGE_BOX_POSITION", "Physical Storage",        "position",         DataType.VARCHAR,                    None,                "Storage Box Position",    None, None, False]
-];
-
-#
-# Experiment Types
-#
-experimentDefinition = [
-    ["NAME",                   "General", "Name",                     DataType.VARCHAR,             None,    "Name", None, None, False],
-    ["EXPERIMENTAL_GOALS",     "General", "Experimental goals",       DataType.MULTILINE_VARCHAR,   None,    "Goal of the experiment", None, None, False],
-    ["GRANT",                  "General", "Grant",                    DataType.VARCHAR,             None,    "grant name", None, None, False],
-    ["START_DATE",             "General", "Start Date",               DataType.TIMESTAMP,           None,    "Start Date", None, None, False],
-    ["END_DATE",               "General", "End Date",                 DataType.TIMESTAMP,           None,    "End Date", None, None, False],
-    ["EXPERIMENTAL_RESULTS",   "General", "Experimental results",     DataType.MULTILINE_VARCHAR,   None,    "Brief summary of the results obtained", None, None, False],
-    ["XMLCOMMENTS",            "Comments","Comments List",            DataType.XML,                 None,    "Several comments can be added by different users", commentsScriptName, None, False]
-];
-
-#
-# Sample Types
-#
-antibodyDefinition = [
-    ["NAME",                           "General",                "antibody ID",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_ID_NR",                 "General",                "antibody_id_nr",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIGEN",                        "General",                "antigen",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE",                        "General",                "barcode",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                  "General",                "barcode label",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_FACS_BLOCK",            "General",                "block facs",                         DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["ANTIBODY_IF_BLOCK",              "General",                "block IFF",                          DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["ANTIBODY_WB_BLOCK",              "General",                "block western",                      DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["CATALOGUE_NUMBER",               "General",                "catalog id #",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CLASS",                          "General",                "class",                              DataType.CONTROLLEDVOCABULARY,       "CLASS",  "", None, None, False],
-    ["CLONE",                          "General",                "clone",                              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMPANY",                        "General",                "company",                            DataType.CONTROLLEDVOCABULARY,       "COMPANY",  "", None, None, False],
-    ["ANTIBODY_FACS_CONC",             "General",                "conc facs",                          DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_FACS",  "", None, None, False],
-    ["ANTIBODY_IF_CONC",               "General",                "conc IFF",                           DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_FACS",  "", None, None, False],
-    ["ANTIBODY_IP_CONC",               "General",                "conc ip",                            DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_IP",  "", None, None, False],
-    ["ANTIBODY_WB_CONC",               "General",                "conc western",                       DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_WESTERN",  "", None, None, False],
-    ["ANTIBODY_CONCENTRATION",         "General",                "concentration",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_CROSSREACTIVITY",       "General",                "crossreactivity",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_FACS_FIX",              "General",                "fix facs",                           DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["ANTIBODY_IF_FIX",                "General",                "fix IFF",                            DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["ANTIBODY_WB_FIX",                "General",                "fix western",                        DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["INVESTIGATOR",                   "General",                "investigator",                       DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LABEL",                          "General",                "label",                              DataType.CONTROLLEDVOCABULARY,       "LABEL",  "", None, None, False],
-    ["LOTNUMBER",                      "General",                "lotnumber",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFIED_BY",                    "General",                "modified by",                        DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MONO_POLYCLONAL",                "General",                "mono/polyclonal",                    DataType.CONTROLLEDVOCABULARY,       "MONO-POLYCLONAL",  "", None, None, False],
-    ["ANTIBODY_FACS_NOTES",            "General",                "notes FACS",                         DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_IF_NOTES",              "General",                "notes IFF",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_IP_NOTES",              "General",                "notes IP",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_WB_NOTES",              "General",                "notes western",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SERIAL_NUMBER",                  "General",                "serial number",                      DataType.INTEGER,                    None,  "", None, None, False],
-    ["ANTIGEN_SIZE",                   "General",                "size",                               DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SOURCE",                         "General",                "source",                             DataType.CONTROLLEDVOCABULARY,       "SOURCE",  "", None, None, False],
-    ["CREATION_DATE",                  "General",                "creation date",                      DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFICATION_DATE",              "General",                "modification date",                  DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["FROZEN",                         "General",                "frozen",                             DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["BOX",                            "Storage",                "box",                                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["RACK",                           "Storage",                "rack",                               DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                   "Reference",              "reference",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                       "Comments",               "info",                               DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-cellDefinition = [
-    ["CO2",                             "General",                "%CO2",                                DataType.CONTROLLEDVOCABULARY,       "CO2",  "", None, None, False],
-    ["ATCC_NUM",                        "General",                "ATCC No.",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE",                         "General",                "barcode",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                "barcode label",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_NR",                      "General",                "cell_id_nr",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_NR_COPY",                 "General",                "cell_id_nr Copy",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["NAME",                            "General",                "cell ID",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_COPY",                    "General",                "cell ID Copy",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CLONE",                           "General",                "clone #",                             DataType.INTEGER,                    None,  "", None, None, False],
-    ["COMPARE_FIELD",                   "General",                "compare field",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC1",                           "General",                "conc.1",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT1",                      "General",                "concentration unit 1",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC2",                           "General",                "conc.2",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT2",                      "General",                "concentration unit 2",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC3",                           "General",                "conc.3",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT3",                      "General",                "concentration unit 3",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC4",                           "General",                "conc.4",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT4",                      "General",                "concentration unit 4",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CREATION_DATE",                   "General",                "creation date",                       DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["DATE",                            "General",                "date",                                DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["FROZEN",                          "General",                "frozen",                              DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["GROWTH_TEMPERATURE",              "General",                "growth temperature",                  DataType.CONTROLLEDVOCABULARY,       "GROWTH_TEMPERATURE",  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                "investigator",                        DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LINE_NAME",                       "General",                "line name",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MEDIUM",                          "General",                "medium",                              DataType.CONTROLLEDVOCABULARY,       "MEDIUM",  "", None, None, False],
-    ["MEDIUM_SPECIALS",                 "General",                "medium specials",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                "modification date",                   DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                "modified by",                         DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MYCOPLASM_TESTED",                "General",                "mycoplasm_tested",                    DataType.BOOLEAN,                    None,  "", None, None, False],
-    ["OBTAINED_FROM",                   "General",                "obtained from",                       DataType.CONTROLLEDVOCABULARY,       "CELL_OBTAINED_FROM",  "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                "page number",                         DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PARENTAL_CELL",                   "General",                "parental cell",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PASSAGE",                         "General",                "passage",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PERS_CELL_NUMBER",                "General",                "PersCellNumber",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID1",                     "General",                "plasmid ID 1",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID2",                     "General",                "plasmid ID 2",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION_PLASMID1",              "General",                "sel.1",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SELECTION_PLASMID2",              "General",                "sel.2",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SELECTION_PLASMID3",              "General",                "sel.3",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],    
-    ["SELECTION_PLASMID4",              "General",                "sel.4",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                "serial number",                       DataType.INTEGER,                    None,  "", None, None, False],
-    ["SPECIES",                         "General",                "species",                             DataType.CONTROLLEDVOCABULARY,       "CELL_SPECIES",  "", None, None, False],
-    ["VIRUS_ID1",                       "General",                "virus ID 1",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["VIRUS_ID2",                       "General",                "virus ID 2",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "Reference",              "reference",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                        "Comments",               "info",                                DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-strainDefinition = [
-    ["CO2",                             "General",                  "%CO2",                             DataType.CONTROLLEDVOCABULARY,       "CO2",  "", None, None, False],
-    ["BACKGROUND",                      "General",                  "background",                       DataType.CONTROLLEDVOCABULARY,       "STRAIN_BACKGROUND",  "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CIR",                             "General",                  "cir",                              DataType.CONTROLLEDVOCABULARY,       "CIR",  "", None, None, False],
-    ["CONC_INDUCER1",                   "General",                  "conc. inducer 1",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC_INDUCER2",                   "General",                  "conc. inducer 2",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC_INDUCER3",                   "General",                  "conc. inducer 3",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC1",                           "General",                  "conc.1",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT1",                      "General",                  "concentration unit 1",             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC2",                           "General",                  "conc.2",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT2",                      "General",                  "concentration unit 2",             DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC3",                           "General",                  "conc.3",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT3",                      "General",                  "concentration unit 3",             DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["DERIVATION",                      "General",                  "derivation",                       DataType.CONTROLLEDVOCABULARY,       "DERIVATION",  "", None, None, False],
-    ["EXPRESSED_PROTEIN1",              "General",                  "expressed protein 1",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["EXPRESSED_PROTEIN2",              "General",                  "expressed protein 2",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["EXPRESSED_PROTEIN3",              "General",                  "expressed protein 3",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FREE_PLASMID",                    "General",                  "freeplasmid",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FREEZEDATE",                      "General",                  "freezedate",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["GAL",                             "General",                  "gal",                              DataType.CONTROLLEDVOCABULARY,       "GAL",  "", None, None, False],
-    ["GENE_EXPRESSION1",                "General",                  "gene expression 1",                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["GENE_EXPRESSION2",                "General",                  "gene expression 2",                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["GROWTH_TEMPERATURE",              "General",                  "growth temperature",               DataType.CONTROLLEDVOCABULARY,       "GROWTH_TEMPERATURE",  "", None, None, False],
-    ["INDUCER1",                        "General",                  "inducer 1",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INDUCER2",                        "General",                  "inducer 2",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INDUCER3",                        "General",                  "inducer 3",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                        "General",                  "info",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MARKERS",                         "General",                  "markers",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MAT",                             "General",                  "mat",                              DataType.CONTROLLEDVOCABULARY,       "MAT",  "", None, None, False],
-    ["MEDIUM",                          "General",                  "medium",                           DataType.CONTROLLEDVOCABULARY,       "MEDIUM",  "", None, None, False],
-    ["MEDIUM_SPECIALS",                 "General",                  "medium specials",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["NUMBER",                          "General",                  "number",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_OBTAINED_FROM",            "General",                  "obtained from",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ORF",                             "General",                  "orf",                              DataType.VARCHAR,                    None,  "", None, None, False],    
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PARENTAL_CELL",                   "General",                  "parental cell",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PASSAGE",                         "General",                  "passage",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PERSYEASTNUMBER",                 "General",                  "persyeastnumber",                  DataType.INTEGER,                    None,  "", None, None, False],
-    ["PETERYEASTNUMBER",                "General",                  "peteryeastnumber",                 DataType.INTEGER,                    None,  "", None, None, False],
-    ["PLASMID_ID1",                     "General",                  "plasmid ID 1",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID2",                     "General",                  "plasmid ID 2",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID3",                     "General",                  "plasmid ID 3",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER1",                       "General",                  "promoter 1",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER2",                       "General",                  "promoter 2",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER3",                       "General",                  "promoter 3",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "General",                  "reference",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION1",                      "General",                  "sel.1",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION2",                      "General",                  "sel.2",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION3",                      "General",                  "sel.3",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION",                       "General",                  "selection",                        DataType.CONTROLLEDVOCABULARY,       "SELECTION_YEAST",  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.INTEGER,                    None,  "", None, None, False],
-    ["STRAIN_SOURCE",                   "General",                  "source",                           DataType.CONTROLLEDVOCABULARY,       "STRAIN_SOURCE",  "", None, None, False],
-    ["SPECIES",                         "General",                  "species",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_ID_NR",                    "General",                  "strain_id_nr",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["NAME",                            "General",                  "strain ID",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_NAME",                     "General",                  "strain name",                      DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-oligoDefinition = [
-    ["AMOUNT",                          "General",                  "amount",                           DataType.REAL,                      None, "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                   None, "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                   None, "", None, None, False],
-    ["OLIGO_COMPANY",                   "General",                  "company",                          DataType.CONTROLLEDVOCABULARY,      "OLIGO_COMPANY", "", None, None, False],
-    ["CONCENTRATION",                   "General",                  "concentration",                    DataType.REAL,                      None, "", None, None, False],
-    ["CONCENTRATION_UNIT",              "General",                  "concentration unit",               DataType.CONTROLLEDVOCABULARY,      "CONC_UNITS", "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                   None, "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["GENE_LOCUS",                      "General",                  "gene locus",                       DataType.VARCHAR,                   None, "", None, None, False],
-    ["GRADE",                           "General",                  "grade",                            DataType.CONTROLLEDVOCABULARY,      "OLIGO_GRADE", "", None, None, False],
-    ["COMMENTS",                        "General",                  "Info",                             DataType.VARCHAR,                   None, "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS", "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS", "", None, None, False],
-    ["OD",                              "General",                  "od",                               DataType.INTEGER,                   None, "", None, None, False],
-    ["NAME",                            "General",                  "oligo ID",                         DataType.INTEGER,                   None, "", None, None, False],
-    ["OLIGO_ID_NR",                     "General",                  "oligo_id_nr",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["ORDER_DATE",                      "General",                  "order date",                       DataType.VARCHAR,                   None, "", None, None, False],
-    ["OLIGO_ORGANISM",                  "General",                  "organism",                         DataType.CONTROLLEDVOCABULARY,      "OLIGO_ORGANISM", "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["PRIMER_PARTNER",                  "General",                  "primer partner",                   DataType.VARCHAR,                   None, "", None, None, False],
-    ["PRIMER_POSITION",                 "General",                  "primer position",                  DataType.CONTROLLEDVOCABULARY,      "PRIMER_POSITION", "", None, None, False],
-    ["PUBLISHED_IN",                    "General",                  "PublishedIn",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["RESTRICTION_SITE",                "General",                  "restriction site",                 DataType.CONTROLLEDVOCABULARY,      "RESTRICTION", "", None, None, False],
-    ["SEQUENCE",                        "General",                  "sequence",                         DataType.VARCHAR,                   None, "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.VARCHAR,                   None, "", None, None, False],
-    ["USAGE",                           "General",                  "usage",                            DataType.CONTROLLEDVOCABULARY,      "OLIGO_USAGE", "", None, None, False],
-    ["ADENOSINE",                       "Calculated fields",        "adenosine",                        DataType.INTEGER,                   None, "", adenosineScriptName, None, False],
-    ["CYTOSINE",                        "Calculated fields",        "cytosine",                         DataType.INTEGER,                   None, "", cytosineScriptName, None, False],
-    ["GUANOSINE",                       "Calculated fields",        "guanosine",                        DataType.INTEGER,                   None, "", guanosineScriptName, None, False],
-    ["THYMIDINE",                       "Calculated fields",        "thymidine",                        DataType.INTEGER,                   None, "", thymidineScriptName, None, False],
-    ["LENGTH",                          "Calculated fields",        "length",                           DataType.INTEGER,                   None, "", lengthScriptName, None, False],
-    ["GC",                              "Calculated fields",        "gc",                               DataType.REAL,                      None, "", gcScriptName, None, False],
-    ["TM",                              "Calculated fields",        "tm",                               DataType.REAL,                      None, "", tmScriptName, None, False],
-    ["O_NUCLEOTIDE",                    "Calculated fields",        "O nucleotide",                     DataType.INTEGER,                   None, "", nucelotideScriptName, None, False]
-];
-
-plasmidDefinition = [
-    ["BACKBONE",                        "General",                  "backbone",                         DataType.CONTROLLEDVOCABULARY,      "BACKBONE",  "", None, None, False],
-    ["BACKUP_STORAGE",                  "General",                  "backup storage",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BACTERIAL_HOST",                  "General",                  "bacterial host",                   DataType.CONTROLLEDVOCABULARY,      "BACTERIAL_HOST",  "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BIOSAFETY_LEVEL",                 "General",                  "biosafety level",                  DataType.CONTROLLEDVOCABULARY,      "BIOSAFETY_LEVEL",  "", None, None, False],
-    ["BOXNR",                           "General",                  "boxNr",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CONCENTRATION_UNIT",              "General",                  "concentration unit",               DataType.CONTROLLEDVOCABULARY,      "CONC_UNITS",  "", None, None, False],
-    ["CONSTRUCTION_METHOD",             "General",                  "construction method",              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["CTERMTAG",                        "General",                  "Ctermtag",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["DATE_OF_CONSTRUCTION",            "General",                  "date of construction",             DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["DERIVATIVE_OF",                   "General",                  "Derivative of",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ECOLI_STRAIN",                    "General",                  "E.coli strain",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXCISE_INSERT",                   "General",                  "excise insert",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXCISE_INSERT2",                  "General",                  "excise insert 2",                  DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FREEZEDATE",                      "General",                  "freezedate",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["FUNCTIONAL_ELEMENTS_INSERT",      "General",                  "functional elements insert",       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["HYPERCARD_FILE",                  "General",                  "hypercard file",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INFO",                            "General",                  "info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INSERT",                          "General",                  "insert",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INSERTION_SITE",                  "General",                  "insertion site",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LINEARIZE",                       "General",                  "linearize",                        DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MARKER",                          "General",                  "Marker",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["NAME_OF_PARENTAL_CLONE",          "General",                  "name of parental clone",           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NAME_OF_VECTOR",                  "General",                  "name of vector",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NTERMTAG",                        "General",                  "Ntermtag",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NUCLEOTIDE_SEQUENCE",             "General",                  "nucleotide sequence",              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OLIGOS_USED",                     "General",                  "oligos used",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ORGANISM",                        "General",                  "organism",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ORIGIN_OF_REPLICATION",           "General",                  "origin of replication",            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OTHER_MARKER",                    "General",                  "other marker",                     DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PERSPLASMIDNUM",                  "General",                  "persPlasmidnum",                   DataType.REAL,                      None,  "", None, None, False],
-    ["PETERPLASMIDNUM",                 "General",                  "PeterPlasmidNum",                  DataType.INTEGER,                   None,  "", None, None, False],
-    ["NAME",                            "General",                  "plasmid ID",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMID_ID_NR",                   "General",                  "plasmid_id_nr",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMIDNAME",                     "General",                  "plasmidname",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PRIMERS",                         "General",                  "primers",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PROMOTER",                        "General",                  "promoter",                         DataType.CONTROLLEDVOCABULARY,      "PROMOTER",  "", None, None, False],
-    ["SELECTION_IN_BACTERIA",           "General",                  "selection in bacteria",            DataType.CONTROLLEDVOCABULARY,      "SELECTION_IN_BACTERIA",  "", None, None, False],
-    ["SELECTION_IN_EUKARYOTES",         "General",                  "selection in eukaryotes",          DataType.CONTROLLEDVOCABULARY,      "SELECTION_IN_EUKARYOTES",  "", None, None, False],
-    ["SEQUENCE_FILE_NAME",              "General",                  "sequence file name",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SEQUENCING_DATE",                 "General",                  "sequencing date",                  DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.INTEGER,                   None,  "", None, None, False],
-    ["SHELF",                           "General",                  "shelf",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIZE_INSERT",                     "General",                  "size insert",                      DataType.REAL,                      None,  "", None, None, False],
-    ["SIZE_OF_INSERT",                  "General",                  "size of insert",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIZE_VECTOR",                     "General",                  "size vector",                      DataType.REAL,                      None,  "", None, None, False],
-    ["PLASMID_SOURCE",                  "General",                  "source",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMID_SPECIES",                 "General",                  "species",                          DataType.CONTROLLEDVOCABULARY,      "PLASMID_ORGANISM",  "", None, None, False],
-    #["TUBES",                           "General",                 "TUBES",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["URL",                             "Reference",                "url",                              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "Reference",                "published in",                     DataType.VARCHAR,                   None,  "", None, None, False]
-];
-
-chemicalDefinition = [
-    ["ARTICLE",                         "General",                  "Article",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["COMPANY",                         "General",                  "Company",                          DataType.CONTROLLEDVOCABULARY,      "COMPANY",  "", None, None, False],
-    ["ARTICLE_NUM",                     "General",                  "Article Number",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["RECORD_NUMBER",                   "General",                  "RecordNumber",                     DataType.VARCHAR,                   None,  "", None, None, False],
-    ["LOCATION",                        "Location",                  "Location",                         DataType.VARCHAR,                   None,  "", None, None, False]   
-];
-
-siRNADefinition = [
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["GENE_LOCUS",                      "General",                  "gene locus",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXON_OR_THREE_PRIME",             "General",                  "exon or three prime",              DataType.CONTROLLEDVOCABULARY,      "EXON_OR_THREE_PRIME",  "", None, None, False],
-    ["EXON",                            "General",                  "exon #",                           DataType.INTEGER,                   None,  "", None, None, False],
-    ["3_PRIME_POSITION",                "General",                  "3' position",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_SPECIES",                   "General",                  "species",                          DataType.CONTROLLEDVOCABULARY,      "SIRNA_SPECIES",  "", None, None, False],
-    ["SEQUENCE",                        "General",                  "SEQUENCE",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_COMPANY",                   "General",                  "Company",                          DataType.CONTROLLEDVOCABULARY,      "SIRNA_COMPANY",  "", None, None, False],
-    ["STOCK_CONCENTRATION",             "General",                  "Stock concentration",              DataType.REAL,                      None,  "", None, None, False],
-    ["WORKING_CONCENTRATION",           "General",                  "Working concentration",            DataType.REAL,                      None,  "", None, None, False],
-    ["EFFICIENCY",                      "General",                  "Efficiency",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_QPCR",                 "General",                  "Efficiency_qPCR",                  DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_WESTERN",              "General",                  "Efficiency_Western",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_OTHER",                "General",                  "Efficiency_other",                 DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OFF_TARGET_EFFECTS",              "General",                  "Off target effects",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INFO",                            "General",                  "Info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SPECIFIC_SPLICE_VARIANT",         "General",                  "Specific splice variant",          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["TRANSFECTION_AGENT",              "General",                  "Transfection agent",               DataType.CONTROLLEDVOCABULARY,      "TRANSFECTION_AGENT",  "", None, None, False],
-    ["LIBRARY",                         "General",                  "Library",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CHARACTERIZED_BY_COMPANY",        "General",                  "Characterized by company",         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NUMBERINPOOL",                    "General",                  "NumberINpool",                     DataType.INTEGER,                   None,  "", None, None, False],
-    ["TEST",                            "General",                  "Test",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CHEMICAL_MODIFICATION",           "General",                  "Chemical modification",            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OLIGO_NAME",                      "General",                  "Oligo name",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_OLIGONUMBER",               "General",                  "siRNA_OligoNumber",                DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_FREEZER_LOCATION",          "General",                  "Freezer Location",                 DataType.CONTROLLEDVOCABULARY,      "SIRNA_FREEZER_LOCATION",  "", None, None, False],
-    ["DRAWER",                          "General",                  "Drawer",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PUBLISHED",                       "Reference",                "Published",                        DataType.VARCHAR,                   None,  "", None, None, False]
-];
-
-#
-# Data Set Types
-#
-documentDefinition = [
-    ["CREATION_DATE",                   "General",                  "date created",                     DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "date modified",                    DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["INFO",                            "General",                  "info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ID_NR",                           "General",                  "id_nr",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FILE",                            "General",                  "file",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SERIAL",                          "General",                  "serial",                           DataType.INTEGER,                   None,  "", None, None, False]
- 
-];
diff --git a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/defs/definitionsVoc.py b/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/defs/definitionsVoc.py
deleted file mode 100644
index 83fc17f19b34ba3d65064d86fb5089432afbf91c..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/defs/definitionsVoc.py
+++ /dev/null
@@ -1,846 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                          "ALL_LAB_MEMBERS" : [
-                                        ["ANNA_DEPLAZES",   "Anna Deplazes"],
-                                        ["ANNE-CHRISTINE_BUTTY",   "Anne-Christine Butty"],
-                                        ["BRIAN_LUKE",   "Brian Luke"],
-                                        ["CAROLINE_ZBINDEN",   "Caroline Zbinden"],
-                                        ["CELINE_LAFOURCADE",   "Celine Lafourcade"],
-                                        ["CHRISTINE_RUPP",   "Christine Rupp"],
-                                        ["CLAUDINE_KRAFT",   "Claudine Kraft"],
-                                        ["EDYTA_SIERGIEJUK",   "Edyta Siergiejuk"],
-                                        ["FABIAN_HERZOG",   "Fabian Herzog"],
-                                        ["FABIAN_RUDOLF",   "Fabian Rudolf"],
-                                        ["FRANK_VAN_DROGEN",   "Frank Van Drogen"],
-                                        ["GERDA_JORRITSMA",   "Gerda Jorritsma"],
-                                        ["GWEN_RABUT",   "Gw\xe9nael Rabut"],
-                                        ["INGRID_STOFFEL-STUDER",   "Ingrid Stoffel-Studer"],
-                                        ["IRAM_ZAIDI",   "Iram Zaidi"],
-                                        ["IZABELA_SUMARA",   "Izabela Sumara"],
-                                        ["LIONEL_PINTARD",   "Lionel Pintard"],
-                                        ["MALIKAJAQUENOUD",   "MalikaJaquenoud"],
-                                        ["MARC_SOHRMANN",   "Marc Sohrmann"],
-                                        ["MARIE-LYN_HECHT",   "Marie-Lyn Hecht"],
-                                        ["MARIE-PIERRE_GULLI",   "Marie-Pierre Gulli"],
-                                        ["MATTHIAS_PETER",   "Matthias Peter"],
-                                        ["MICHAEL_OLMA",   "Michael Olma"],
-                                        ["MICHAEL_SCHNEIDER",   "Michael Schneider"],
-                                        ["MICHELE_KNAUS",   "Michele Knaus"],
-                                        ["MONIKA_GERSBACH",   "Monika Gersbach"],
-                                        ["NATHALIE_MEYER-SCHALLER",   "Nathalie Meyer-Schaller"],
-                                        ["NATHALIE_PERRINJAQUET",   "Nathalie Perrinjaquet"],
-                                        ["NICOLAS_DARD",   "Nicolas Dard"],
-                                        ["NICOLAS_PAGE",   "Nicolas Page"],
-                                        ["PATRICK_PEDRIOLI",   "Patrick Pedrioli"],
-                                        ["PHILIPPE_WIGET",   "Philippe Wiget"],
-                                        ["PIERRE_MAILLARD",   "Pierre Maillard"],
-                                        ["REINHARD_DECHANT",   "Reinhard Dechant"],
-                                        ["SANDER_SPRINGER",   "Sander Springer"],
-                                        ["SARAH_GLASER",   "Sarah Glaser"],
-                                        ["SARAH_MAERKI",   "Sarah  M\xe4rki"],
-                                        ["SEBASTIAN_LEIDEL",   "Sebastian Leidel"],
-                                        ["SERGE_PELET",   "Serge Pelet"],
-                                        ["STEFAN_MUELLER",   "Stefan M�ller"],
-                                        ["TANIA_ROBERTS",   "Tania Roberts"],
-                                        ["THIMO_KURZ",   "Thimo Kurz"],
-                                        ["TOBIAS_BRAUN",   "Tobias Braun"],
-                                        ["VANESSA_REZGUI",   "Vanessa Rezgui"],
-                                        ["WOJCIECH_PIWKO",   "Wojciech Piwko"],
-                                        ["YUKIKO_SHIMADA",   "Yukiko Shimada"],
-                                        ["YVONNE_GLOOR",   "Yvonne Gloor"],
-                                        ["JOCHEN_BECK",   "Jochen Beck"],
-                                        ["MONIKA_KIJANSKA",   "Monika Kijanska"],
-                                        ["ANGIE_RAGHEB",   "Angie Ragheb"],
-                                        ["ANNE_PACQUELET",   "Anne Pacquelet"],
-                                        ["BJORN_HEGEMANN",   "Bj\xf6rn Hegemann"],
-                                        ["JANNY_TILMA",   "Janny Tilma"],
-                                        ["THIBAULT_COURTHEOUX",   "Thibault Courtheoux"],
-                                        ["SAMUEL_GILBERTO",   "Samuel Gilberto"],
-                                        ["REMY_BUSER",   "Remy Buser"],
-                                        ["RADOSLAV_ENCHEV",   "Radoslav Enchev"],
-                                        ["MICHAELA_HUBNER",   "Michaela Hubner"],
-                                        ["MIA_LI",   "Mia Li"],
-                                        ["JULIEN_MOUYSSET",   "Julien Mouysset"]
-                                    ],
-                           "LAB_MEMBERS_INITIALS" : [
-                                        ["AD", "AD"],
-                                        ["ACB", "ACB"],
-                                        ["BL", "BL"],
-                                        ["CZ", "CZ"],
-                                        ["CL", "CL"],
-                                        ["CR", "CR"],
-                                        ["CK", "CK"],
-                                        ["ES", "ES"],
-                                        ["FH", "FH"],
-                                        ["FR", "FR"],
-                                        ["FD", "FD"],
-                                        ["GJ", "GJ"],
-                                        ["GR", "GR"],
-                                        ["ISS", "ISS"],
-                                        ["IZ", "IZ"],
-                                        ["IS", "IS"],
-                                        ["LP", "LP"],
-                                        ["MJ", "MJ"],
-                                        ["MSO", "MSo"],
-                                        ["MH", "MH"],
-                                        ["MG", "MG"],
-                                        ["MP", "MP"],
-                                        ["MO", "MO"],
-                                        ["MSC", "MSc"],
-                                        ["MK", "MK"],
-                                        ["MG", "MG"],
-                                        ["NS", "NS"],
-                                        ["NPE", "NPe"],
-                                        ["ND", "ND"],
-                                        ["NPA", "NPa"],
-                                        ["PP", "PP"],
-                                        ["PW", "PW"],
-                                        ["PM", "PM"],
-                                        ["RD", "RD"],
-                                        ["SS", "SS"],
-                                        ["SG", "SG"],
-                                        ["SMA", "SMa"],
-                                        ["SL", "SL"],
-                                        ["SP", "SP"],
-                                        ["SM", "SM"],
-                                        ["TR", "TR"],
-                                        ["TK", "TK"],
-                                        ["TB", "TB"],
-                                        ["VR", "VR"],
-                                        ["WP", "WP"],
-                                        ["YS", "YS"],
-                                        ["YG", "YG"],
-                                        ["JB", "JB"],
-                                        ["MKI", "MKi"]
-                                    ],
-                            "BLOCK" : [
-                                       ["1BSA_01TRITON-X100",  "1% BSA; 0.1% Triton-X100"],
-                                    ],
-                            "CLASS" : [
-                                ["IGM", "IgM"],
-                                ["IGG1",    "IgG1"],
-                                ["IGG2",    "IgG2"]
-                                    ],
-                            "COMPANY" : [
-                                    ["ABCAM", "abcam"],
-                                    ["CELL_SIGNALING", "cell signaling"],
-                                    ["STRATAGEN", "stratagene"],
-                                    ["CLONTECH", "clontech"],
-                                    ["UBI", "ubi"],
-                                    ["SOUTHERN_BIOTECH", "southern biotech"],
-                                    ["PIERCE", "pierce"],
-                                    ["PHARMIGEN", "pharmingen"],
-                                    ["MOLECULAR_PROBES", "molecular probes"],
-                                    ["PHARMACIA", "pharmacia"],
-                                    ["BIORAD", "biorad"],
-                                    ["EUROGENETIC", "eurogentec"],
-                                    ["HOMEMADE", "homemade"],
-                                    ["BD_BIOSCIENCE", "BD bioscience"],
-                                    ["OBTAINED_FROM", "obtained from "],
-                                    ["ZYMED", "Zymed"],
-                                    ["UNKNOWN", "Unknown"],
-                                    ["SANTA_CRUZ", "Santa Cruz"],
-                                    ["BIOLEGEND", "Biolegend"],
-                                    ["BETHYL", "Bethyl"],
-                                    ["UPSTATE", "Upstate"],
-                                    ["ROCKLAND", "Rockland"],
-                                    ["NOVUS_BIOLOGICALS", "Novus Biologicals"],
-                                    ["CHEMICON_INTERNATIONAL", "Chemicon International"],
-                                    ["SIGMA", "Sigma"],
-                                    ["ALPHA_DIAGNOSTIC_INTERNATIONAL", "Alpha Diagnostic International"],
-                                    ["MILLIPORE", "Millipore"],
-                                    ["ACTIVE_MOTIF", "Active motif"],
-                                    ["NEB", "NEB"],
-                                    ["NEOMARKERS", "Neomarkers"],
-                                    ["LUBIOSCIENCE", "LubioScience"],
-                                    ["EBIOSCIENCE", "eBioscience"],
-                                    ["INVITROGEN", "Invitrogen"],
-                                    ["STRESSGEN", "Stressgen"],
-                                    ["COVANCE", "Covance"],
-                                    ["ENZO_LIFE_SCIENCES", "Enzo Life Sciences"],
-                                    ["CALBIOCHEM", "Calbiochem"],
-                                    ["ROCHE", "Roche"],
-                                    ["CYTOSKELETON", "Cytoskeleton"],
-                                    ["OPEN_BIOSYSTEMS", "Open Biosystems"],
-                                    ["BD_TRANSDUCTION", "BD Transduction"],
-                                    ["ATLAS_ANTIBODIES_AB", "Atlas Antibodies AB"],
-                                    ["GENENTECH", "Genentech"],
-                                    ["TRANSDUCTION_LABS", "Transduction Labs"],
-                                    ["ANTIBODIES_INCORPORATED", "Antibodies Incorporated"],
-                                    ["BABCO", "BAbCO"],
-                                    ["ERICH_NIGG_LAB_BASEL", "Erich Nigg lab (Basel)"],
-                                    ["FRANCIS_BARR", "Francis Barr"],
-                                    ["AVIVA_SYSTEMS_BIOLOGY", "Aviva Systems Biology"],
-                                    ["LUCERNACHEM", "LucernaChem"],
-                                    ["LI-COR", "LI-COR"],
-                                    ["ABGENT", "Abgent"],
-                                    ["CHROMOTEK", "Chromotek"],
-                                    ["ABNOVA", "Abnova"],
-                                    ["UNKNOWN", "Unknown"],
-                                    ["ABSEA", "Absea"],
-                                    ["GE_HEALTHCARE", "GE Healthcare"],
-                                    ["GRAMSCH_LABORATORIES", "Gramsch Laboratories"],
-                                    ["ADIPOGEN", "Adipogen"],
-                                    ["COSMO_BIO_CO", "Cosmo bio co."],
-                                    ["BECKTON_DICKINSON", "Beckton Dickinson"],
-                                    ["BIOTIUM", "Biotium"]
-                                    ],
-                            "CONCENTRATION_FACS" : [
-                                            ["1_TO_10", "1 : 10"],
-                                            ["1_TO_20", "1 : 20"],
-                                            ["1_TO_30", "1 : 30"],
-                                            ["1_TO_40", "1 : 40"],
-                                            ["1_TO_50", "1 : 50"],
-                                            ["1_TO_100", "1 : 100"],
-                                            ["1_TO_200", "1 : 200"],
-                                            ["1_TO_500", "1 : 500"],
-                                            ["1_TO_1000", "1 : 1000"],
-                                            ["1_TO_2000", "1 : 2000"],
-                                            ["1_TO_3000", "1 : 3000"],
-                                            ["NOT_TESTED", "not tested"],
-                                            ["NOT_WORKING", "not working"]
-                                    ],
-                            "CONCENTRATION_IP" : [
-                                            ["1UL", "1 �l"],
-                                            ["5UL", "5 �l"],
-                                            ["10UL", "10 �l"],
-                                            ["15UL", "15 �l"],
-                                            ["20UL", "20 �l"],
-                                            ["NOT_TESTED", "not tested"],
-                                            ["NOT_WORKING", "not working"]
-                                    ],
-                            "CONCENTRATION_WESTERN" : [
-                                                ["1_TO_100", "1 : 100"],
-                                                ["1_TO_500", "1 : 500"],
-                                                ["1_TO_1000", "1 : 1000"],
-                                                ["1_TO_2000", "1 : 2000"],
-                                                ["1_TO_3000", "1 : 3000"],
-                                                ["1_TO_5000", "1 : 5000"],
-                                                ["1_TO_10000", "1 : 10000"],
-                                                ["1_TO_20000", "1 : 20000"],
-                                                ["1_TO_25000", "1 : 25000"],
-                                                ["NOT_TESTED", "not tested"],
-                                                ["NOT_WORKING", "not working"]
-                                    ],
-                          "CURRENT_LAB_MEMBERS" : [
-                                            ["CAROLINE_ZBINDEN", "Caroline Zbinden"],
-                                            ["FRANK_VAN_DROGEN", "Frank Van Drogen"],
-                                            ["INGRID_STOFFEL-STUDER", "Ingrid Stoffel-Studer"],
-                                            ["MATTHIAS_PETER", "Matthias Peter"],
-                                            ["REINHARD_DECHANT", "Reinhard Dechant"],
-                                            ["WOJCIECH_PIWKO", "Wojciech Piwko"],
-                                            ["JOCHEN_BECK", "Jochen Beck"]
-                                    ],
-                          "FIX" : [
-                                ["1H-RT", "1h, RT"],
-                                ["PTEMF", "PTEMF"],
-                                ["PFA", "PFA"],
-                                ["MEOH", "MeOH"]
-                                    ],
-                          "LABEL" : [
-                                ["HRP", "hrp"],
-                                ["AP", "ap"],
-                                ["FITC", "fitc"],
-                                ["CY3", "Cy3"],
-                                ["ALEXA647", "Alexa 647"]
-                                    ],
-                          "ANTIBODY_LOCATION" : [
-                                    ["SMALL_PETER_LAB", "Small Peter Lab"],
-                                    ["BIG_PETER_LAB", "Big Peter Lab"],
-                                    ["NEW_PETER_LAB", "New Peter Lab"],
-                                    ["MINUS20_C-FLOOR", "-20C C-Floor"]
-                                    ],
-                          "MONO-POLYCLONAL" : [
-                                            ["MONOCLONAL",  "Monoclonal"],
-                                            ["POLYCLONAL",  "Polyclonal"],
-                                            ["UNKNOWN", "Unknown"]
-                                    ],
-                          "SOURCE" : [
-                                ["MOUSE",  "Mouse"],
-                                ["RABBIT",  "Rabbit"],
-                                ["HAMSTER",  "Hamster"],
-                                ["GOAT",  "Goat"],
-                                ["RAT",  "Rat"],
-                                ["CHICKEN",  "Chicken"],
-                                ["SHEEP",  "Sheep"],
-                                ["HUMAN",  "Human"],
-                                ["GUINEA_PIG",  "Guinea pig"],
-                                ["DONEKY",  "Donkey"],
-                                ["UNKNOWN",  "Unknown"]
-                                    ],
-                          "CELL_LOCATION" : [
-                                ["FRIDGE",  "fridge"],
-                                ["FREEZER",  "freezer"],
-                                ["REFCO",  "refco"],
-                                ["TANK",  "tank"]
-                                    ],
-                          "SELECTION" : [
-                                ["NEOMYCIN_G418",  "Neomycin/G418"],
-                                ["HYGROMYCIN",  "Hygromycin"],
-                                ["MPA",  "MPA"],
-                                ["G418",  "G418"],
-                                ["PUROMYCIN",  "puromycin"],
-                                ["BLASTICIDIN",  "Blasticidin"],
-                                ["ZEOCIN",  "Zeocin"] 
-                                    ],
-                          "CO2" : [
-                                ["5",  "5"],
-                                ["7.5",  "7.5"]
-                                    ],
-                          "GROWTH_TEMPERATURE" : [
-                                ["37",  "37"],
-                                ["28",  "28"],
-                                ["34",  "34"]
-                                    ],
-                          "MEDIUM" : [
-                                ["RPMI1640",  "RPMI 1640"],
-                                ["ISCOVES",  "Iscoves"],
-                                ["DMEM",  "DMEM"],
-                                ["LB",  "LB"],
-                                ["DMEM_NUTRIENT",  "DMEM nutrient mixture F-12 HAM [D8437]"]
-                                    ], 
-                          "CELL_OBTAINED_FROM" : [
-                                ["FREIBURG",  "Freiburg"],
-                                ["ATCC",  "ATCC"],
-                                ["DANIEL_GERLICH",  "Daniel Gerlich"],
-                                ["ERICH_NIGG",  "Erich Nigg"],
-                                ["KREK",  "Krek"],
-                                ["TONY_HEYMAN",  "Tony Heyman"],
-                                ["THOMAS-WILD_ULRIKE-KUTAY",  "Thomas Wild/Ulrike Kutay"],
-                                ["JAN_MICHAEL_PETERS",  "Jan-Michael Peters"],
-                                ["M_BRANDEIS",  "M Brandeis"],
-                                ["ARI_HELENIUS",  "Ari Helenius"],
-                                ["ROMEO_RICCI",  "Romeo Ricci"]
-                                    ],  
-                          "CELL_SPECIES" : [
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],
-                                ["CHINESE_HAMSTER",  "chines hamster"],
-                                ["HYBRIDOMA",  "hybridoma (human & mouse)"]                                
-                                    ],  
-                          "CONC_UNITS" : [
-                                ["MICROG_MICROL",  "�g/�l"],
-                                ["MG_ML",  "mgl/ml"],
-                                ["UG_ML",  "ug/ml"]                               
-                                    ],  
-                          "STRAIN_SOURCE" : [
-                                ["F_CHANG", "F. Chang"],
-                                ["J_CHANT", "J. Chant"],
-                                ["R_DESHAIES", "R. Deshaies"],
-                                ["E_ELION", "E. Elion"],
-                                ["P_HIETER", "P. Hieter"],
-                                ["I_HERSKOWITZ", "I. Herskowitz"],
-                                ["A_NEIMAN", "A. Neiman"],
-                                ["P_SORGER", "P. Sorger"],
-                                ["T_STEARNS", "T. Stearns"],
-                                ["MARC_BONDEL", "Marc Bondel"],
-                                ["G_SUMARA", "G. Sumara"],
-                                ["MICHAEL_ALTMANN", "Michael Altmann"],
-                                ["HETEROZYGOUS_DIPLOID_COLLECTION", "Heterozygous diploid collection"],
-                                ["ANNE-CHRISTINE_BUTTY", "Anne-Christine Butty"],
-                                ["ANNE_PAQUELET", "Anne Paquelet"],
-                                ["YAGMUR-TURGAY_KUTAY-GROUP", "Yagmur Turgay - Kutay group"],
-                                ["BARBAR_CATARIN", "Barbar Catarin"],
-                                ["FRANK_VAN-DROGEN", "Frank van Drogen"],
-                                ["HEMMO_MEYER", "Hemmo Meyer"],
-                                ["JEAN-MARC_GALLAND", "Jean-Marc Galland"],
-                                ["JEFF_PARVIN", "Jeff Parvin"],
-                                ["MARIE-PIERRE_GULLI", "Marie-Pierre Gulli"],
-                                ["MIKIKO_TAKAHASHI", "Mikiko Takahashi"],
-                                ["SANDRA_HENCHOZ", "Sandra Henchoz"],
-                                ["MALIKA_JAQUENOUD", "Malika Jaquenoud"],
-                                ["GERDA_JORRITSMA", "Gerda Jorritsma"],
-                                ["CELINE_LAFOURCADE", "Céline Lafourcade"],
-                                ["CELINE_LONGARETTI", "Céline Longaretti"],
-                                ["BRIAN_LUKE", "Brian Luke"],
-                                ["GUY_NIEDERHAUSER", "Guy Niederhäuser"],
-                                ["NICOLAS_PAGE", "Nicolas Pag�"],
-                                ["NATHALIE_PERRINJAQUET", "Nathalie Perrinjaquet"],
-                                ["MATTHIAS_PETER", "Matthias Peter"],
-                                ["AUDREY_PETIT", "Audrey Petit"],
-                                ["LIONEL_PINTARD", "Lionel Pintard"],
-                                ["YUKIKO_SHIMADA", "Yukiko Shimada"],
-                                ["PHILIPPE_WIGET", "Philippe Wiget"],
-                                ["VOLKER_STUCKE", "Volker Stucke"],
-                                ["KATRIN_PETER", "Katrin Peter"],
-                                ["MARC_BLONDEL", "marc blondel"],
-                                ["M_FUNK", "M. Funk"],
-                                ["ATTILA_BECSKEI", "Attila Becskei"],
-                                ["GWENAEL_RABUT", "Gwenael Rabut"],
-                                ["PHILIP_JERMANN", "Philip Jermann"],
-                                ["P_PRYCIAK", "P.Pryciak"],
-                                ["LINDA_HICKE", "Linda Hicke"],
-                                ["RZPD", "RZPD"],
-                                ["OPENBIO", "OpenBio"],
-                                ["F_POSAS", "F. Posas"],
-                                ["HAPLOID_COLLECTION", "Haploid collection"],
-                                ["MIRIAM_BORTFELD", "Miriam Bortfeld"],
-                                ["EUROSCARF", "Euroscarf"],
-                                ["TS_COLLECTION", "ts collection"],
-                                ["CONZELMANN_LAB", "Conzelmann lab"],
-                                ["SEBASTIAN_LEIDEL", "Sebastian Leidel"],
-                                ["ANNA_DEPLAZES", "Anna Deplazes"],
-                                ["BIBOU", "Bibou"],
-                                ["MARC_SOHRMANN", "Marc sohrmann"]
-                                    ],
-                          "SELECTION_YEAST" : [
-                                ["NONE",  "None"],
-                                ["URA",  "Ura"],
-                                ["LEU",  "Leu"], 
-                                ["TRP",  "Trp"], 
-                                ["HIS",  "His"], 
-                                ["VIABILITY",  "Viability"], 
-                                ["NAT",  "nat"], 
-                                ["KAN",  "kan"], 
-                                ["KAN_NAT",  "kan + nat"], 
-                                ["HIS_KAN",  "HIS + kan"], 
-                                ["HIS_KAN_NAT",  "HIS + kan + nat"], 
-                                ["HIS",  "HIS"], 
-                                ["LEU_NAT",  "leu + nat"], 
-                                ["ADE2",  "ade2"]
-                                    ],  
-                         "DERIVATION" : [
-                                ["GAMMA_INTEG",  "gamma integ"],
-                                ["DELTA_INTEG",  "� integ"],
-                                ["5FAO_LOOPOUT",  "5-FAO loopout"],
-                                ["PLASMID_SHUFFLE",  "plasmid shuffle"],
-                                ["TETRAD",  "tetrad"],
-                                ["LOOP-IN_LOOP-OUT",  "loop-in/loop-out"],
-                                ["GALPHO",  "GalpHO mating type switch"],
-                                ["DELETION",  "Deletion"],
-                                ["INTEGRATION",  "Integration"]
-                                    ],
-                         "STRAIN_BACKGROUND" : [
-                                ["W303",  "W303"],
-                                ["K699",  "K699"],
-                                ["K700",  "K700"],
-                                ["S288C",  "S288C"],
-                                ["1278",  "*1278*"],
-                                ["EG123",  "EG123"],
-                                ["DF5",  "DF5"],
-                                ["SIGMA",  "Sigma"],
-                                ["UNKNOWN",  "Don't know"],
-                                ["BY7092",  "BY7092"],
-                                ["BY5565",  "BY5565"],
-                                ["BY4741",  "BY4741"]
-                                    ],
-                        "CIR" : [
-                                ["CIR_PLUS",  "cir+"],
-                                ["CIR_DEG",  "cir�"],
-                                    ],
-                        "GAL" : [
-                                ["PLUS",  "Plus"],
-                                ["PLUS_PLUS",  "Plus/Plus"],
-                                ["GAL1",  "gal1"],
-                                ["GAL1_GAL1",  "gal1/gal1"],      
-                                ["GAL2",  "gal2"],                                 
-                                ["GAL2_GAL2",  "gal2/gal2"],                                                         
-                                    ],
-                        "MAT" : [
-                                ["AT",  "@"],
-                                ["A",  "a"],
-                                ["ALPHA",  "alpha"],
-                                ["DIPLOID",  "diploid"],      
-                                ["UNKNOWN",  "unknown"]                                                      
-                                    ],
-                        "OLIGO_ORGANISM" : [
-                                ["BMV",  "BMV"],
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],      
-                                ["XENOPUS",  "xenopus"],
-                                ["DROSOPHILA",  "drosophila"],
-                                ["YEAST",  "yeast"],
-                                ["ECOLI",  "E.coli"],
-                                ["SYNTHETIC",  "synthetic"],
-                                ["HIV1",  "HIV-1"],
-                                ["CELEGANS",  "C.elegans"],
-                                ["MYCOPLASMA",  "mycoplasma"]
-                                    ],
-                        "OLIGO_GRADE" : [
-                                ["DESALTED",  "desalted"],
-                                ["HPLC",  "hplc"],
-                                ["PURITY",  "purity"],
-                                ["UNKNOWN",  "?"]      
-                                    ],     
-                        "PRIMER_POSITION" : [
-                                ["FORWARD",  "forward"],
-                                ["REVERSE",  "reverse"]
-                                    ],  
-                        "OLIGO_COMPANY" : [
-                                ["MWG",  "MWG"],
-                                ["BIG",  "BIG"],
-                                ["PHARMACIA",  "Pharmacia"],
-                                ["IGLOI",  "Igloi"],      
-                                ["INVITROGEN",  "invitrogen"],
-                                ["MICROSYNTH",  "microsynth"]                                                     
-                                    ],                                       
-                        "OLIGO_USAGE" : [
-                                ["PCR",  "pcr"],
-                                ["SEQUENCING",  "sequencing"],
-                                ["HYBRIDIZE",  "hybridize"],
-                                ["MUTAGENESIS",  "mutagenesis"],      
-                                ["RT-PCR",  "Real-Time PCR"]
-                                    ],
-                        "RESTRICTION" : [
-                                ["AATII",  "AatII"],
-                                ["ACCI",  "AccI"],
-                                ["ACII",  "AciI"],
-                                ["AFLII",  "AflII"],
-                                ["AFLIII",  "AflIII"],
-                                ["AGEI",  "AgeI"],
-                                ["ALUI",  "AluI"],
-                                ["ALWI",  "AlwI"],
-                                ["ALWNI",  "AlwNI"],
-                                ["APAI",  "ApaI"],
-                                ["APALI",  "ApaLI"],
-                                ["APOI",  "ApoI"],
-                                ["ASCI",  "AscI"],
-                                ["ASEI",  "AseI"],
-                                ["AVAI",  "AvaI"],
-                                ["AVAII",  "AvaII"],
-                                ["AVRII",  "AvrII"],
-                                ["BAMHI",  "BamHI"],
-                                ["BANI",  "BanI"],
-                                ["BANII",  "BanII"],
-                                ["BBSI",  "BbsI"],
-                                ["BBVI",  "BbvI"],
-                                ["BCGI-1",  "BcgI-1"],
-                                ["BCGI-2",  "BcgI-2"],
-                                ["BCLI",  "BclI"],
-                                ["BFAI",  "BfaI"],
-                                ["BGLI",  "BglI"],
-                                ["BGLII",  "BglII"],
-                                ["BLPI",  "BlpI"],
-                                ["BPMI",  "BpmI"],
-                                ["BSAAI",  "BsaAI"],
-                                ["BSABI",  "BsaBI"],
-                                ["BSAHI",  "BsaHI"],
-                                ["BSAI",  "BsaI"],
-                                ["BSAJI",  "BsaJI"],
-                                ["BSAWI",  "BsaWI"],
-                                ["BSERI",  "BseRI"],
-                                ["BSGI",  "BsgI"],
-                                ["BSIEI",  "BsiEI"],
-                                ["BSIHKAI",  "BsiHKAI"],
-                                ["BSIWI",  "BsiWI"],
-                                ["BSLI",  "BslI"],
-                                ["BSMAI",  "BsmAI"],
-                                ["BSMBI",  "BsmBI"],
-                                ["BSMFI",  "BsmFI"],
-                                ["BSMI",  "BsmI"],
-                                ["BSOFI",  "BsoFI"],
-                                ["BSP1286I",  "Bsp1286I"],
-                                ["BSPEI",  "BspEI"],
-                                ["BSPHI",  "BspHI"],
-                                ["BSPMI",  "BspMI"],
-                                ["BSRBI",  "BsrBI"],
-                                ["BSRDI",  "BsrDI"],
-                                ["BSRFI",  "BsrFI"],
-                                ["BSRGI",  "BsrGI"],
-                                ["BSRI",  "BsrI"],
-                                ["BSSHII",  "BssHII"],
-                                ["BST1107I",  "Bst1107I"],
-                                ["BSTBI",  "BstBI"],
-                                ["BSTEII",  "BstEII"],
-                                ["BSTNI",  "BstNI"],
-                                ["BSTUI",  "BstUI"],
-                                ["BSTXI",  "BstXI"],
-                                ["BSTYI",  "BstYI"],
-                                ["BSU36I",  "Bsu36I"],
-                                ["CAC8I",  "Cac8I"],
-                                ["CLAI",  "ClaI"],
-                                ["CVIJI",  "CviJI"],
-                                ["DDEI",  "DdeI"],
-                                ["DPNI",  "DpnI"],
-                                ["DRAI",  "DraI"],
-                                ["DRAIII",  "DraIII"],
-                                ["DRDI",  "DrdI"],
-                                ["DSAI",  "DsaI"],
-                                ["EAEI",  "EaeI"],
-                                ["EAGI",  "EagI"],
-                                ["EAM1105I",  "Eam1105I"],
-                                ["EARI",  "EarI"],
-                                ["ECO47III",  "Eco47III"],
-                                ["ECO57I",  "Eco57I"],
-                                ["ECONI",  "EcoNI"],
-                                ["ECOO109I",  "EcoO109I"],
-                                ["ECORI",  "EcoRI"],
-                                ["ECORV",  "EcoRV"],
-                                ["FOKI",  "FokI"],
-                                ["FSEI",  "FseI"],
-                                ["FSPI",  "FspI"],
-                                ["HAEII",  "HaeII"],
-                                ["HAEIII",  "HaeIII"],
-                                ["HGAI",  "HgaI"],
-                                ["HHAI",  "HhaI"],
-                                ["HINCII",  "HincII"],
-                                ["HINDIII",  "HindIII"],
-                                ["HINFI",  "HinfI"],
-                                ["HPAI",  "HpaI"],
-                                ["HPAII",  "HpaII"],
-                                ["HPHI",  "HphI"],
-                                ["KPNI",  "KpnI"],
-                                ["MAEII",  "MaeII"],
-                                ["MAEIII",  "MaeIII"],
-                                ["MBOI",  "MboI"],
-                                ["MBOII",  "MboII"],
-                                ["MLUI",  "MluI"],
-                                ["MNLI",  "MnlI"],
-                                ["MSCI",  "MscI"],
-                                ["MSEI",  "MseI"],
-                                ["MSLI",  "MslI"],
-                                ["MSPA1I",  "MspA1I"],
-                                ["MUNI",  "MunI"],
-                                ["MWOI",  "MwoI"],
-                                ["NAEI",  "NaeI"],
-                                ["NARI",  "NarI"],
-                                ["NCII",  "NciI"],
-                                ["NCOI",  "NcoI"],
-                                ["NDEI",  "NdeI"],
-                                ["NHEI",  "NheI"],
-                                ["NLAIII",  "NlaIII"],
-                                ["NLAIV",  "NlaIV"],
-                                ["NOTI",  "NotI"],
-                                ["NRUI",  "NruI"],
-                                ["NSII",  "NsiI"],
-                                ["NSPI",  "NspI"],
-                                ["PACI",  "PacI"],
-                                ["PFLMI",  "PflMI"],
-                                ["PLEI",  "PleI"],
-                                ["PMEI",  "PmeI"],
-                                ["PMLI",  "PmlI"],
-                                ["PPUMI",  "PpuMI"],
-                                ["PSHAI",  "PshAI"],
-                                ["PSP1406I",  "Psp1406I"],
-                                ["PSTI",  "PstI"],
-                                ["PVUI",  "PvuI"],
-                                ["PVUII",  "PvuII"],
-                                ["RSAI",  "RsaI"],
-                                ["RSRII",  "RsrII"],
-                                ["SACI",  "SacI"],
-                                ["SACII",  "SacII"],
-                                ["SALI",  "SalI"],
-                                ["SAPI",  "SapI"],
-                                ["SAU96I",  "Sau96I"],
-                                ["SCAI",  "ScaI"],
-                                ["SCRFI",  "ScrFI"],
-                                ["SEXAI",  "SexAI"],
-                                ["SFANI",  "SfaNI"],
-                                ["SFCI",  "SfcI"],
-                                ["SFII",  "SfiI"],
-                                ["SGFI",  "SgfI"],
-                                ["SGRAI",  "SgrAI"],
-                                ["SMAI",  "SmaI"],
-                                ["SNABI",  "SnaBI"],
-                                ["SPEI",  "SpeI"],
-                                ["SPHI",  "SphI"],
-                                ["SRFI",  "SrfI"],
-                                ["SSE8387I",  "Sse8387I"],
-                                ["SSPI",  "SspI"],
-                                ["STUI",  "StuI"],
-                                ["STYI",  "StyI"],
-                                ["SWAI",  "SwaI"],
-                                ["TAQI",  "TaqI"],
-                                ["TFII",  "TfiI"],
-                                ["TSP45I",  "Tsp45I"],
-                                ["TSP509I",  "Tsp509I"],
-                                ["TTH111I",  "Tth111I"],
-                                ["XBAI",  "XbaI"],
-                                ["XCMI",  "XcmI"],
-                                ["XHOI",  "XhoI"],
-                                ["XMNI",  "XmnI"],
-                                ["SACI_NHEI",  "sacI NheI"],
-                                ["XMAI",  "XmaI"],
-                                ["BAMHI",  "BamHI"],
-                                ["CLAI",  "ClaI"],
-                                ["PACI",  "PacI"],
-                                ["NOTI",  "NotI"],
-                                ["SALI",  "SalI"],
-                                ["XHOI",  "XhoI"],
-                                ["NONE",  "none"]
-                            ],
-                        "BACKBONE" : [
-                                ["PCDNA3",  "pCDNA3"],
-                                ["PABES-NEO2000",  "pABES-neo 2000"],    
-                                ["PUC19",  "pUC 19"],                                
-                                ["PMX-1",  "pMX-1"],
-                                ["PRMHA-3",  "pRmHa-3"]
-                            ],
-                        "BACTERIAL_HOST" : [
-                                ["DH10B",  "DH10B"],
-                                ["JM110",  "JM110"],    
-                                ["BL21",  "BL21"],                                
-                                ["DH5A",  "DH5a"],
-                                ["PB3",  "PB3"],
-                                ["DB31",  "DB3.1"],
-                                ["CCDB_SURVIVAL",  "ccdB survival"]
-                            ],  
-                        "BIOSAFETY_LEVEL" : [
-                                ["S1",  "S1"],
-                                ["S2",  "S2"],    
-                                ["S3",  "S3"]        
-                            ],
-                        "SELECTION_IN_BACTERIA" : [
-                                ["AMPICILLIN",  "Ampicillin"],
-                                ["KANAMYCIN",  "Kanamycin"],    
-                                ["SPECTINOMCIN",  "Spectinomcin"],
-                                ["UNKNOWN",  "Unknown"]                                        
-                            ],
-                        "SELECTION_IN_EUKARYOTES" : [
-                                ["G418_NEO",  "G418/neo"],
-                                ["MPA",  "MPA"],    
-                                ["HYGROMYCIN",  "Hygromycin"]                                 
-                            ],                            
-                        "SOURCE_OF_REPLICON" : [
-                                ["CMV",  "CMV"]                                   
-                            ],
-                        "PLASMID_ORGANISM" : [
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],
-                                ["XENOPUS",  "xenopus"],
-                                ["DROSOPHILA",  "drosophila"],
-                                ["YEAST",  "yeast"],
-                                ["ECOLI",  "E.coli"],
-                                ["SYNTHETIC",  "synthetic"]
-                            ],
-                        "PROMOTER" : [
-                                ["ENDOGENOUS",  "endogenous"],
-                                ["GAL1",  "gal1"],
-                                ["GALL",  "galL"],
-                                ["GALS",  "galS"],
-                                ["TET",  "tet"],
-                                ["ADH",  "adh"],
-                                ["CYC",  "cyc"],
-                                ["GPD",  "gpd"],
-                                ["DASH",  "\"-\""],
-                                ["CMV",  "cmv"],
-                                ["SV40",  "SV40"],
-                                ["TET_ON",  "tet on"],
-                                ["TET_OFF",  "tet off"],
-                                ["RIM1",  "rim1"]
-                            ],
-                        "EXON_OR_THREE_PRIME" : [
-                                ["EXON",  "exon"],
-                                ["3P",  "3'"],
-                                ["5P",  "5'"]
-                            ], 
-                        "SIRNA_SPECIES" : [
-                                ["HUMAN",  "Human"],
-                                ["MOUSE",  "Mouse'"],
-                            ], 
-                        "SIRNA_COMPANY" : [
-                                ["AMBION",  "Ambion"],
-                                ["DHARMACON",  "Dharmacon'"],
-                                ["INVITORGEN",  "Invitrogen'"],
-                                ["MICROSYNTH",  "Microsynth'"],
-                                ["QIAGEN",  "Qiagen'"],
-                                ["GIFT",  "Gift'"]
-                            ], 
-                       "SIRNA_FREEZER_LOCATION" : [
-                                ["BIGLABFREEZER",  "BigLab freezer"],
-                                ["SMALLLAB_BIGFREEZER",  "SmallLab Big freezer'"],
-                                ["FREEZER_G17",  "Freezer G17'"],
-                                ["G93-FRANK",  "G9.3--Frank'"],
-                                ["FREEZER-G17_BOX_NATHALIE",  "Freezer G17 Box Nathalie'"],
-                                ["BOX-THIBAULT-BIGFREEZER-SMALLLAB",  "Box thibault Big freezer small lab'"],
-                                ["BOX-NATHALIE",  "Box Nathalie'"]
-                            ], 
-                       "TRANSFECTION_AGENT" : [
-                                ["FUGENE",  "Fugene"],
-                                ["LIPOFECTAMINE",  "Lipofectamine'"],
-                                ["OLIGOFECTAMINE",  "Oligofectamine'"],
-                                ["RNAIMAX",  "RNAimax'"]
-                            ],                             
-                        "FREEZER" : [
-                                ["G9_FRIDGE-1",  "G9 Fridge 1"],
-                                ["G9_FRIDGE-2",  "G9 Fridge 2"],
-                                ["G9_FREEZER-A",  "-20C Small Peter Lab"],
-                                ["G9_FREEZER-B",  "G9 Freezer B"],
-                                ["G9_FREEZER-C",  "G9 Freezer C"],
-                                ["G10_FREEZER-D",  "G10 Freezer D"],
-                                ["G10_FREEZER-E",  "G10 Freezer E"],
-                                ["G10_FREEZER-F",  "G10 Freezer F"],
-                                ["G10_FREEZER-G",  "G10 Freezer G"],
-                                ["G10_FREEZER-H",  "G10 Freezer H"],
-                                ["G10_FREEZER-I",  "G10 Freezer I"],
-                                ["G10_FRIDGE-3",  "+4C Big Peter Lab"],
-                                ["G10_FRIDGE-4",  "G10 Fridge 4"],
-                                ["G10_FRIDGE-5",  "G10 Fridge 5"],
-                                ["G10_FRIDGE-6",  "G10 Fridge 6"],
-                                ["G10_FRIDGE-7",  "G10 Fridge 7"],
-                                ["G11_FRIDGE-8",  "G10 Fridge 8"],
-                                ["G14_FREEZER-J",  "G14 Freezer J"],
-                                ["G14_FREEZER-K",  "G14 Freezer K"],
-                                ["G14_FREEZER-L",  "G14 Freezer L"],
-                                ["G14_FREEZER-M",  "G14 Freezer M"],
-                                ["G14_FRIDGE-9",  "G14 Fridge 9"],
-                                ["G14_FRIDGE-10",  "G14 Fridge 10"],
-                                ["G17_FRIDGE-11",  "G17 Fridge 11"],
-                                ["G17_FRIDGE-12",  "G17 Fridge 12"],
-                                ["G17_FREEZER-N",  "G17 Freezer N"],
-                                ["USER_BENCH-20",  "Bench -20�C"],
-                                ["USER_BENCH-80",  "Bench -80�C"],
-                                ["USER_BENCH-RT",  "Bench RT"],
-                                ["USER_BENCH",  "Bench"]
-                                    ]
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/doc/fm11_odbc_jdbc_guide_en.pdf b/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/doc/fm11_odbc_jdbc_guide_en.pdf
deleted file mode 100644
index 36aaa0f12220dbde26b7ece4e3b78914087893b0..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/doc/fm11_odbc_jdbc_guide_en.pdf and /dev/null differ
diff --git a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/lib/FileMakerMain.java b/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/lib/FileMakerMain.java
deleted file mode 100644
index a2206338c1ccb79267396fbe2751fbb529304ab8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/lib/FileMakerMain.java
+++ /dev/null
@@ -1,77 +0,0 @@
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-//  STEP By Step:
-//  1. Open the file maker file with file maker pro
-//  2. Go to "File -> Sharing -> ODBC/JDBC" and turn sharing on
-//  3. You can go to see the names of the tables and field to "File -> Manage -> Database"
-//  Without closing file maker pro you can run this script, modify it as needed
-//  More info at http://www.filemaker.com/support/product/docs/fmp/fm11_odbc_jdbc_guide_en.pdf
-
-public class FileMakerMain
-{
-    // NOTE: FileMaker is so dump that you can't get the fileName and the fileData on the same query, the file data will return null, so we make a second call for this
-    public static final String GET_DOCUMENTS = "SELECT CAST(file AS VARCHAR(1000)) AS fileName, info, serial FROM documents";
-    public static final String GET_DOCUMENT_DATA = "SELECT GetAs(file, 'FILE') AS fileData FROM documents WHERE serial = ?";
-    
-    static class Document {
-        String fileName;
-        String info;
-        String serial;
-        
-        public String toString()
-        {
-            return fileName + " " + info;
-        }
-    }
-    
-    public static List<Document> getDocuments(Connection connection) throws SQLException {
-        List<Document> documents = new ArrayList<Document>();
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENTS);
-        ResultSet result = preparedStatement.executeQuery();
-        
-        while(result.next()) {
-            Document document = new Document();
-            document.fileName = result.getString("fileName");
-            document.info = result.getString("info");
-            document.serial = result.getString("serial");
-            documents.add(document);
-        }
-        result.close();
-        preparedStatement.close();
-        return documents;
-    }
-    
-    public static byte[] getFile(Connection connection, Document document) throws SQLException {
-        byte[] bytes = {};
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENT_DATA);
-        preparedStatement.setString(1, document.serial);
-        ResultSet result = preparedStatement.executeQuery();
-        if(result.next()) {
-            byte[] value = result.getBytes("fileData");
-            if(value != null) {
-                bytes = value;
-            }
-        }
-        result.close();
-        preparedStatement.close();
-        return bytes;
-    }
-    
-    public static void main(String[] args) throws Exception {
-        Class.forName("com.filemaker.jdbc.Driver").newInstance();
-        Connection connection = DriverManager.getConnection("jdbc:filemaker://127.0.0.1/BOXIT_documents_Peter.fmp12","designer", "seattle");
-        
-        for(Document document: getDocuments(connection)) {
-            byte[] bytes = getFile(connection, document);
-            System.out.println(document + " " + bytes.length);
-        }
-        connection.close();
-    }
-}
diff --git a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/lib/fmjdbc.jar b/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/lib/fmjdbc.jar
deleted file mode 100644
index 34cae1d60b916205b9039fe765c971229cef1a32..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/lib/fmjdbc.jar and /dev/null differ
diff --git a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/migration.py b/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/migration.py
deleted file mode 100644
index b0219bb64a5cdeebc863d1d3900f5e3a236dd56c..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/migration.py
+++ /dev/null
@@ -1,522 +0,0 @@
-# some_file.py
-import sys
-import traceback
-import definitions
-import definitionsVoc
-import re
-import random
-from datetime import datetime
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria, SearchSubCriteria
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-import java.lang.Class as Class
-import java.sql.DriverManager as DriverManager
-
-
-##
-## Generic Process Method
-##
-notMigratedEntities = {
-                       "ENTITY_TYPE" : {"ENTITY ID" : {"ERROR" : "TIMES" }}
-                      }
-
-def getStringValueOrNone(map, key):
-    if (key in map) and (map[key] is not None) and (map[key] is not ""):
-        return map[key];
-    else:
-        return None;
-
-def addNotMigratedEntity(type, entityID, error):
-    if type not in notMigratedEntities:
-        notMigratedEntities[type] = {}
-    if entityID not in notMigratedEntities[type]:
-        notMigratedEntities[type][entityID] = {}
-    if error not in notMigratedEntities[type][entityID]:
-        notMigratedEntities[type][entityID][error] = 1
-    else:
-        notMigratedEntities[type][entityID][error] += 1
-
-def printNotMigratedEntities():
-    print "--- Not Migrated Entities Report"
-    for type in notMigratedEntities:
-        print "Type: [" + str(type) + "]"
-        for id in notMigratedEntities[type]:
-            for error in notMigratedEntities[type][id]:
-                print "Id: [" + str(id) + "] Error: " + str(error) + " Times: " + str(notMigratedEntities[type][id][error])
-    print "---"
-
-def process(tr):
-    print "START!"
-    createDataHierarchy(tr)
-    for adaptor in adaptors:
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] START"
-        
-        if adaptor.__class__.__name__ == "PlasmidParentAdaptor":
-            print "check hack, dont do please"
-            adaptor.init();
-
-        while adaptor.next():
-            entity = adaptor.getEntity()
-            print "* ENTITY [" + str(entity.getIdentifier(tr)) + "]"
-            try:
-                if not entity.isInOpenBIS(tr):
-                    entity.write(tr)
-                else:
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), "Already in openBIS")
-            except Exception, error:
-                    print traceback.format_exc()
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), str(error.args))
-                    #print entity.getIdentifier(tr) + " - Already up to date"
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] FINISH"
-    print "REPORT START"
-    printNotMigratedEntities()
-    definitionsVoc.printCreatedTerms()
-    print "REPORT FINISH"
-    print "FINISH!"
-##
-## Help Methods
-##
-def setEntityProperties(tr, definition, entity, properties):
-    for origPropertyCode, propertyValue in properties.iteritems():
-            #print repr("setEntityProperties " + origPropertyCode + " : " + unicode(propertyValue))
-            propertyCode = origPropertyCode;
-            if propertyCode.startswith("+"):
-                propertyCode = propertyCode[1:];
-            elif propertyCode.startswith("-"):
-                continue
-            
-            propertyDefinition = definitions.getPropertyDefinitionByCode(definition, origPropertyCode)
-            #print "Prop definition ", propertyDefinition
-            #print "PROP VALUE ", propertyValue
-            if propertyDefinition is not None and propertyValue is not None:
-                propertyValue =  unicode(propertyValue) 
- 
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.REAL and propertyValue is not None:
-                if propertyValue =="?":
-                    propertyValue=""
-
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.CONTROLLEDVOCABULARY and propertyValue is not None:
-                possiblePropertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel(propertyDefinition[4], propertyValue)
-                if possiblePropertyValue is not None:
-                    propertyValue = possiblePropertyValue
-                else:  #We rely on the Add Hock Terms if is None, since there is no API we create a new one
-                    #Create new vocabulary term
-                    codeToUse = re.sub(r'\W+','_',propertyValue)
-                    labelToUse = propertyValue
-                    if len(codeToUse) is 0:
-                        codeToUse = "None" + str(random.random())
-                    if len(codeToUse) > 50:
-                        codeToUse = codeToUse[:50]
-                    #Uses new vocabulary term
-                    newTerm = definitionsVoc.createVocabularyTerm(tr, propertyDefinition[4], codeToUse, labelToUse)
-                    propertyValue = newTerm.getCode()
-                    #print "NEW CODE", propertyValue
-                    print "* WARNING ENTITY [" + entity.getCode() + "]: for Vocabulary [" + propertyDefinition[4] + "], found value not in list: [" + repr(labelToUse) + "]. Created new term with code [" + codeToUse + "]"
-
-
-            if propertyDefinition is not None: #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-
-
-            if propertyDefinition is not None: #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-
-
-##
-## Generic Pattern
-##
-class EntityAdaptor:
-    entities = None
-    entitiesIdx = None
-    definition = None
-    definitionRepeats = None
-    
-    def init(self):
-        self.entities = []
-        self.entitiesIdx = -1
-        pass
-    
-    def next(self):
-        if self.entities is None and self.entitiesIdx is None:
-            self.init()
-        self.entitiesIdx += 1
-        if len(self.entities) > self.entitiesIdx:
-            return True
-        else:
-            return False
-    
-    def addEntity(self, values):
-        self.entities.append(OpenBISDTO(values, self.definition))
-    
-    def getEntity(self):
-        return self.entities[self.entitiesIdx]
-    
-class OpenBISDTO:
-    values = {}
-    definition = None
-    
-    def __init__(self, values, definition):
-        self.values = values
-        self.definition = definition
-    
-    def getIdentifier(self, tr):
-        pass
-    
-    def isInOpenBIS(self, tr):
-        pass
-    
-    def write(self, tr):
-        pass
-
-##
-## Costumer specific logic: generic part
-##
-experimentCache = {}
-sampleCache = {}
-sampleID2Sample = {}
-globalSequences = {};
-
-def getNextGlobalSequence(id, startingAt):
-    currentSequence = None;
-    
-    if id in globalSequences:
-        currentSequence = globalSequences[id]; #Get existing sequence
-    else:
-        if startingAt is not None:
-            currentSequence = startingAt;
-        else:
-            currentSequence = 0; # Create a new one
-
-    #Advance and store new step on the sequence
-    currentSequence = currentSequence+1;
-    globalSequences[id] = currentSequence;
-    
-    #Return the new sequence number
-    return str(currentSequence);
-
-def getExperimentForUpdate(experimentIdentifier, experimentType, tr):
-    experimentType ="MATERIALS"
-    if experimentIdentifier not in experimentCache:
-        print "Cache failed " + experimentIdentifier + ":" + str(experimentType)
-        experiment = tr.getExperimentForUpdate(experimentIdentifier)
-        if experiment is None and experimentType is not None:
-            print "Cache Create " + experimentIdentifier + ":" + str(experimentType)
-            experiment = tr.createNewExperiment(experimentIdentifier, experimentType)
-        if experiment is not None:
-             experimentCache[experimentIdentifier] = experiment
-    else:
-        pass
-        #print "Cache hit " + experimentIdentifier + ":" + str(experimentType)
-    if experimentIdentifier not in experimentCache:
-         return None
-    else:
-         return experimentCache[experimentIdentifier]
-     
-def getSampleForUpdate(sampleIdentifier, sampleType, tr):
-    if sampleIdentifier not in sampleCache:
-         #print "Cache failed " + sampleIdentifier + ":" + str(sampleType)
-         sample = tr.getSampleForUpdate(sampleIdentifier)
-         if sample is None and sampleType is not None:
-             #print "Cache Create " + sampleIdentifier + ":" + str(sampleType)
-             if sampleType == "STRAIN":
-                  experiment = getExperimentForUpdate("/MATERIALS/STRAINS/STRAIN_COLLECTION_1", sampleType, tr)              
-             elif sampleType == "PLASMID":
-                  experiment = getExperimentForUpdate("/MATERIALS/PLASMIDS/PLASMID_COLLECTION_1", sampleType, tr)                         
-             elif sampleType == "OLIGO":
-                  experiment = getExperimentForUpdate("/MATERIALS/POLYNUCLEOTIDES/OLIGO_COLLECTION_1", sampleType, tr)                  
-             sample = tr.createNewSample(sampleIdentifier, sampleType)
-             sample.setExperiment(experiment)
-         if sample is not None:
-             sampleCache[sampleIdentifier] = sample
-    else:
-        pass
-        #print "Cache hit " + sampleIdentifier + ":" + str(sampleType)
-        
-    if sampleIdentifier not in sampleCache:
-         raise None
-    else:
-         return sampleCache[sampleIdentifier]
-
-class FileMakerEntityAdaptor(EntityAdaptor):
-    connection = None
-    selectQuery = None
-    selectQueryRepetitions = None;
-    selectQueryRepetitionsId = None;
-        
-    def __init__(self, fileMakerConnString, fileMakerUser, fileMakerPass, db):
-        Class.forName("com.filemaker.jdbc.Driver").newInstance()
-        self.connection = DriverManager.getConnection(fileMakerConnString+db,fileMakerUser, fileMakerPass)
-    
-    def init(self):
-        EntityAdaptor.init(self)
-        
-        # Default Query (All adaptors should have it)
-        preparedStatement = self.connection.prepareStatement(self.selectQuery)
-        #print "EXECUTED QUERY: " + self.selectQuery
-        result = preparedStatement.executeQuery()
-        
-        while result.next():
-            values = {}
-            for property in self.definition:
-                if property[0].startswith("+"):
-                    pass #Do Nothing
-                elif property[0]=="ANNOTATIONS_STATE":
-                    values[property[0]] = "";
-                else:
-                    propertyCode = property[0];
-                    #print "propertyCode IS: ", propertyCode
-                    propertyValue = result.getString(property[2]);
-                    if property[0].startswith("+"):
-                        propertyCode = property[0][1:];
-                    if property[0].startswith("-"):
-                        propertyCode = property[0][1:];
-                    values[propertyCode] = result.getString(property[2])
-            self.addEntity(values)
-        result.close()
-        preparedStatement.close()
-        # Repetitions Query (Optional)
-        
-        #Extra Repeats Logic
-        if self.definitionRepeats is not None:
-            fields = "";
-            fieldsNames = [];
-            isFirst = True;
-            for field in self.definitionRepeats:
-                propertyCode = field[0];
-                if propertyCode.startswith("+"):
-                    continue
-                
-                if not isFirst:
-                    fields = fields + ", ";
-                
-                fields = fields + field[2];
-                fieldsNames.append(propertyCode);
-                isFirst = False;
-            
-            for entity in self.entities:
-                entityId = entity.values[self.selectQueryRepetitionsId];
-                if entityId is not None:
-                    perEntityQuery = "SELECT " + fields + " FROM " + self.selectQueryRepetitions + "= '" + entityId + "'";
-                    #print "EXECUTED QUERY: " + perEntityQuery
-                    preparedStatement = self.connection.prepareStatement(perEntityQuery)
-                    result = preparedStatement.executeQuery()
-                    
-                    columnCount = result.getMetaData().getColumnCount();
-                    while result.next():    
-                        for cIdx in range(columnCount):
-                            if cIdx is not 0:
-                                columName = result.getMetaData().getColumnName(cIdx);
-                                fieldName = fieldsNames[cIdx];
-                                entity.values[fieldName] = result.getString(cIdx);
-                    result.close()
-                    preparedStatement.close()
-        #
-
-##
-## Customer specific logic: different sample types
-##
-class FMOpenBISDTO(OpenBISDTO):
-        def isSampleCacheable(self):
-            return True
-        
-        def isInOpenBIS(self, tr):
-            return False
-            # code = self.getIdentifier(tr)
-            # if (code is not None) and (' ' not in code):
-            #     if self.isSampleCacheable():
-            #         sample = getSampleForUpdate("/MATERIALS/"+code, None, tr)
-            #         if (self.values["NAME"] is not None and len(self.values["NAME"]) > 0 and self.values["NAME"] not in sampleID2Sample):
-            #             print "Cached Sample with name: '" + self.values["NAME"] + "' for '" + "/MATERIALS/" + code + "' in dict with size: " + str(len(sampleID2Sample))
-            #             parentName = unicode(self.values["NAME"], "utf-8");
-            #             sampleID2Sample[parentName] = sample
-            #     return False
-            # else:
-            #     print "* ERROR [" + str(code) + "] - Invalid Code found for '" + self.__class__.__name__ + "'"
-            #     raise Exception('Invalid Code found ' + str(code))
-
-
-##
-## Strains
-##
-
-globalStrainsCodeCheck = {};
-
-class StrainAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Strain Collection\""
-        
-        self.definition = definitions.strainDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(StrainOpenBISDTO(values, self.definition))
- 
-class StrainOpenBISDTO(FMOpenBISDTO):
-    code = None;
-
-    def isSampleCacheable(self):
-            return False    
-
-    def write(self, tr):
-        code = self.getIdentifier(tr);
-
-        sample = getSampleForUpdate("/MATERIALS/"+code,"STRAIN", tr)
-        setEntityProperties(tr, self.definition, sample, self.values)
-        
-
-    def getIdentifier(self, tr):
-        if self.code is not None:
-            return self.code;
-        elif (self.values["BBPL_NUM"] is not None and self.values["BBPL_NUM"] not in globalStrainsCodeCheck):
-            self.code = "BBPL" + self.values["BBPL_NUM"]
-            globalStrainsCodeCheck[self.values["BBPL_NUM"]] = True
-        else:
-            nextNum = getNextGlobalSequence("BBPL", 0)
-            self.code = "BBPL_missing_" + nextNum;
-            globalStrainsCodeCheck[nextNum] = True
-        return self.code
-
-    # def getIdentifier(self, tr):
-    #     code=""
-    #     if (self.values["BBPL_NUM"] is not None):
-    #         # print "BBPL num", self.values["BBPL_NUM"]
-    #         code = "BBPL" +self.values["BBPL_NUM"]
-    #     else:
-    #         code="BBPL" + getNextGlobalSequence("BBPL", None);
-    #         # print "CODE 0", code
-    #     return code
-
-
-##
-## Plasmids
-##
-
-globalPlasmidsCodeCheck = {};
-globalPlasmidsList = [];
-
-class PlasmidAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Strain Collection\""
-        self.definition = definitions.plasmidDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(PlasmidOpenBISDTO(values, self.definition))
-        
-class PlasmidOpenBISDTO(FMOpenBISDTO):
-    code = None;
-    setParents = False; ## Should be true the second time
-
-    def write(self, tr):
-        code = self.getIdentifier(tr)
-        sample = getSampleForUpdate("/MATERIALS/"+code,"PLASMID", tr)
-        if self.setParents is False:
-            setEntityProperties(tr, self.definition, sample, self.values)
-            globalPlasmidsList.append(self);
-            self.setParents = True;
-            if (self.values["NAME"] is not None and len(self.values["NAME"]) > 0 and self.values["NAME"] not in sampleID2Sample):
-                print "Cached Sample with name: '" + self.values["NAME"] + "' for '" + "/MATERIALS/" + code + "' in dict with size: " + str(len(sampleID2Sample))
-                parentName = unicode(self.values["NAME"], "utf-8");
-                sampleID2Sample[parentName] = sample
-        else:
-            parentsColumn = self.values["DERIVATIVE_OF"];
-            if parentsColumn is not None:
-                print "Looking for parents : '" + parentsColumn + "'"
-                parentsNames = parentsColumn.strip().split(" and ")
-                parentsList = [];
-                for parentName in parentsNames:
-                    parentName = unicode(parentName, "utf-8");
-                    if parentName in sampleID2Sample:
-                        parentObject = sampleID2Sample[parentName]
-                        parentsList.append(parentObject.getSampleIdentifier())
-                    else:
-                        print "Parent name not found : '" + parentName + "' for dict with size : " + str(len(sampleID2Sample))
-                            
-                if len(parentsList) > 0:
-                    sample.setParentSampleIdentifiers(parentsList)
-    
-    def getIdentifier(self, tr):
-        if self.code is not None:
-            return self.code;
-        elif (self.values["PL_NUMBER"] is not None and self.values["PL_NUMBER"] not in globalPlasmidsCodeCheck):
-            self.code = "PBPL" + self.values["PL_NUMBER"]
-            globalPlasmidsCodeCheck[self.values["PL_NUMBER"]] = True
-        else:
-            nextNum = getNextGlobalSequence("PBPL", 0)
-            self.code = "PBPL_missing_" + nextNum;
-            globalPlasmidsCodeCheck[nextNum] = True
-        return self.code
-
-class PlasmidParentAdaptor(EntityAdaptor):    
-    def init(self):
-        self.entities = []
-        self.entitiesIdx = -1
-        for plasmid in globalPlasmidsList:
-            self.entities.append(plasmid);
-
-
-##
-## Oligos
-##
-class OligoAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Strain Collection\""
-        self.definition = definitions.oligoDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(OligoOpenBISDTO(values, self.definition))
-        
-class OligoOpenBISDTO(FMOpenBISDTO):
-    def write(self, tr):
-        code = "OBPL" + self.values["OBPL_NUMBER"];
-        print "CODE IS:", code
-        if code is not None:
-            print "/MATERIALS/"+code
-            sample = getSampleForUpdate("/MATERIALS/"+code,"OLIGO", tr)
-            setEntityProperties(tr, self.definition, sample, self.values)
-        else:
-            print "OLIGO CODE NOT FOUND! "
-    
-    def getIdentifier(self, tr):
-        code=""
-        if (self.values["OBPL_NUMBER"] is not None):
-            code = "OBPL" + self.values["OBPL_NUMBER"]
-        else:
-            code = "OBPL" + getNextGlobalSequence("OBPL", None);
-        return code
-
-
-
-fmConnString = "jdbc:filemaker://127.0.0.1/"
-#fmConnString = "jdbc:filemaker://fmsrv.ethz.ch/"
-fmUser= "admin"
-fmPass = "kanamycin"
-
-
-
-adaptors = [
-             #OligoAdaptor(fmConnString, fmUser, fmPass, "03_BPL_Oligo_Collection"),
-             #PlasmidAdaptor(fmConnString, fmUser, fmPass, "pBPL_Plasmid_Collection_2014"),
-             #PlasmidParentAdaptor(),
-             StrainAdaptor(fmConnString, fmUser, fmPass, "bBPL_Strain_Collection")
-             ]
-
-
-
-
-
-def createDataHierarchy(tr):
-    inventorySpace = tr.getSpace("MATERIALS")
-    if inventorySpace == None:
-        tr.createNewSpace("MATERIALS", None)
-        tr.createNewSpace("METHODS", None)
-        tr.createNewProject("/MATERIALS/STRAINS")
-        tr.createNewProject("/MATERIALS/PLASMIDS")
-        tr.createNewProject("/MATERIALS/POLYNUCLEOTIDES")
-        tr.createNewExperiment("/MATERIALS/STRAINS/STRAIN_COLLECTION_1", "MATERIALS")
-        tr.createNewExperiment("/MATERIALS/PLASMIDS/PLASMID_COLLECTION_1","MATERIALS")
-        tr.createNewExperiment("/MATERIALS/POLYNUCLEOTIDES/OLIGO_COLLECTION_1","MATERIALS")                                   
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/plugin.properties b/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/plugin.properties
deleted file mode 100644
index 5216a708c1df67a5b7c23aad82ddc0e6f6c185d9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/pankemigration/1/dss/drop-boxes/pankemigration/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path = migration.py
-dropbox-name = pankemigration
-incoming-dir = ${root-dir}/pankemigration
diff --git a/plasmid/source/core-plugins/petermigration/1/as/definitions.py b/plasmid/source/core-plugins/petermigration/1/as/definitions.py
deleted file mode 100644
index 5a3adb701cdcc92c44a51a0802ec0c628fcaf8fd..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/as/definitions.py
+++ /dev/null
@@ -1,375 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-#
-# Scripts
-#
-commentsScriptName = "COMMENTS";
-adenosineScriptName = "ADENOSINE_COUNT"
-cytosineScriptName= "CYTOSINE_COUNT"
-gcScriptName= "GC"
-guanosineScriptName= "GUANOSINE_COUNT"
-lengthScriptName= "SEQUENCE_LENGTH"
-nucelotideScriptName= "ONUCLEOTIDE_COUNT"
-thymidineScriptName= "THYMIDINE_COUNT"
-tmScriptName= "TM"
-
-#
-# Storage 
-#
-numberOfStorageGroups = 65
-
-def getStorageGroupPropertyCodes():
-    propertyCodes = [];
-    for property in getStorageGroupDefinition():
-        propertyCodes.append(property[0]);
-    return propertyCodes;
-
-def getStorageGroupDefinition():
-    return [
-    ["STORAGE_NAME",         "Physical Storage",        "location",         DataType.CONTROLLEDVOCABULARY,      "FREEZER",            "Storage Name",       None, None, False],
-    ["STORAGE_ROW",          "Physical Storage",        "Storage Row",      DataType.INTEGER,                    None,                "Storage Row",        None, None, False],
-    ["STORAGE_COLUMN",       "Physical Storage",        "Storage Column",   DataType.INTEGER,                    None,                "Storage Column",     None, None, False],
-    ["STORAGE_BOX_NAME",     "Physical Storage",        "box label",        DataType.VARCHAR,                    None,                "Storage Box Name",   None, None, False],
-    ["STORAGE_USER",         "Physical Storage",        "frozen by",        DataType.VARCHAR,                    None,                "Storage User Id",    None, None, False],
-    ["STORAGE_BOX_SIZE",     "Physical Storage",        "box size",         DataType.CONTROLLEDVOCABULARY,      "STORAGE_BOX_SIZE",   "Storage Box size",   None, None, False],
-    ["STORAGE_BOX_POSITION", "Physical Storage",        "position",         DataType.VARCHAR,                    None,                "Storage Box Position",    None, None, False]
-];
-
-#
-# Experiment Types
-#
-experimentDefinition = [
-    ["NAME",                   "General", "Name",                     DataType.VARCHAR,             None,    "Name", None, None, False],
-    ["EXPERIMENTAL_GOALS",     "General", "Experimental goals",       DataType.MULTILINE_VARCHAR,   None,    "Goal of the experiment", None, None, False],
-    ["GRANT",                  "General", "Grant",                    DataType.VARCHAR,             None,    "grant name", None, None, False],
-    ["START_DATE",             "General", "Start Date",               DataType.TIMESTAMP,           None,    "Start Date", None, None, False],
-    ["END_DATE",               "General", "End Date",                 DataType.TIMESTAMP,           None,    "End Date", None, None, False],
-    ["EXPERIMENTAL_RESULTS",   "General", "Experimental results",     DataType.MULTILINE_VARCHAR,   None,    "Brief summary of the results obtained", None, None, False],
-    ["XMLCOMMENTS",            "Comments","Comments List",            DataType.XML,                 None,    "Several comments can be added by different users", commentsScriptName, None, False]
-];
-
-#
-# Sample Types
-#
-antibodyDefinition = [
-    ["NAME",                           "General",                "antibody ID",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_ID_NR",                 "General",                "antibody_id_nr",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIGEN",                        "General",                "antigen",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE",                        "General",                "barcode",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                  "General",                "barcode label",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_FACS_BLOCK",            "General",                "block facs",                         DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["ANTIBODY_IF_BLOCK",              "General",                "block IFF",                          DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["ANTIBODY_WB_BLOCK",              "General",                "block western",                      DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["CATALOGUE_NUMBER",               "General",                "catalog id #",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CLASS",                          "General",                "class",                              DataType.CONTROLLEDVOCABULARY,       "CLASS",  "", None, None, False],
-    ["CLONE",                          "General",                "clone",                              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMPANY",                        "General",                "company",                            DataType.CONTROLLEDVOCABULARY,       "COMPANY",  "", None, None, False],
-    ["ANTIBODY_FACS_CONC",             "General",                "conc facs",                          DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_FACS",  "", None, None, False],
-    ["ANTIBODY_IF_CONC",               "General",                "conc IFF",                           DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_FACS",  "", None, None, False],
-    ["ANTIBODY_IP_CONC",               "General",                "conc ip",                            DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_IP",  "", None, None, False],
-    ["ANTIBODY_WB_CONC",               "General",                "conc western",                       DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_WESTERN",  "", None, None, False],
-    ["ANTIBODY_CONCENTRATION",         "General",                "concentration",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_CROSSREACTIVITY",       "General",                "crossreactivity",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_FACS_FIX",              "General",                "fix facs",                           DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["ANTIBODY_IF_FIX",                "General",                "fix IFF",                            DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["ANTIBODY_WB_FIX",                "General",                "fix western",                        DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["INVESTIGATOR",                   "General",                "investigator",                       DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LABEL",                          "General",                "label",                              DataType.CONTROLLEDVOCABULARY,       "LABEL",  "", None, None, False],
-    ["LOTNUMBER",                      "General",                "lotnumber",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFIED_BY",                    "General",                "modified by",                        DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MONO_POLYCLONAL",                "General",                "mono/polyclonal",                    DataType.CONTROLLEDVOCABULARY,       "MONO-POLYCLONAL",  "", None, None, False],
-    ["ANTIBODY_FACS_NOTES",            "General",                "notes FACS",                         DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_IF_NOTES",              "General",                "notes IFF",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_IP_NOTES",              "General",                "notes IP",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_WB_NOTES",              "General",                "notes western",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SERIAL_NUMBER",                  "General",                "serial number",                      DataType.INTEGER,                    None,  "", None, None, False],
-    ["ANTIGEN_SIZE",                   "General",                "size",                               DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SOURCE",                         "General",                "source",                             DataType.CONTROLLEDVOCABULARY,       "SOURCE",  "", None, None, False],
-    ["CREATION_DATE",                  "General",                "creation date",                      DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFICATION_DATE",              "General",                "modification date",                  DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["FROZEN",                         "General",                "frozen",                             DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["BOX",                            "Storage",                "box",                                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["RACK",                           "Storage",                "rack",                               DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                   "Reference",              "reference",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                       "Comments",               "info",                               DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-cellDefinition = [
-    ["CO2",                             "General",                "%CO2",                                DataType.CONTROLLEDVOCABULARY,       "CO2",  "", None, None, False],
-    ["ATCC_NUM",                        "General",                "ATCC No.",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE",                         "General",                "barcode",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                "barcode label",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_NR",                      "General",                "cell_id_nr",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_NR_COPY",                 "General",                "cell_id_nr Copy",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["NAME",                            "General",                "cell ID",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_COPY",                    "General",                "cell ID Copy",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CLONE",                           "General",                "clone #",                             DataType.INTEGER,                    None,  "", None, None, False],
-    ["COMPARE_FIELD",                   "General",                "compare field",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC1",                           "General",                "conc.1",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT1",                      "General",                "concentration unit 1",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC2",                           "General",                "conc.2",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT2",                      "General",                "concentration unit 2",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC3",                           "General",                "conc.3",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT3",                      "General",                "concentration unit 3",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC4",                           "General",                "conc.4",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT4",                      "General",                "concentration unit 4",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CREATION_DATE",                   "General",                "creation date",                       DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["DATE",                            "General",                "date",                                DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["FROZEN",                          "General",                "frozen",                              DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["GROWTH_TEMPERATURE",              "General",                "growth temperature",                  DataType.CONTROLLEDVOCABULARY,       "GROWTH_TEMPERATURE",  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                "investigator",                        DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LINE_NAME",                       "General",                "line name",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MEDIUM",                          "General",                "medium",                              DataType.CONTROLLEDVOCABULARY,       "MEDIUM",  "", None, None, False],
-    ["MEDIUM_SPECIALS",                 "General",                "medium specials",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                "modification date",                   DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                "modified by",                         DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MYCOPLASM_TESTED",                "General",                "mycoplasm_tested",                    DataType.BOOLEAN,                    None,  "", None, None, False],
-    ["OBTAINED_FROM",                   "General",                "obtained from",                       DataType.CONTROLLEDVOCABULARY,       "CELL_OBTAINED_FROM",  "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                "page number",                         DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PARENTAL_CELL",                   "General",                "parental cell",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PASSAGE",                         "General",                "passage",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PERS_CELL_NUMBER",                "General",                "PersCellNumber",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID1",                     "General",                "plasmid ID 1",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID2",                     "General",                "plasmid ID 2",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION_PLASMID1",              "General",                "sel.1",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SELECTION_PLASMID2",              "General",                "sel.2",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SELECTION_PLASMID3",              "General",                "sel.3",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],    
-    ["SELECTION_PLASMID4",              "General",                "sel.4",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                "serial number",                       DataType.INTEGER,                    None,  "", None, None, False],
-    ["SPECIES",                         "General",                "species",                             DataType.CONTROLLEDVOCABULARY,       "CELL_SPECIES",  "", None, None, False],
-    ["VIRUS_ID1",                       "General",                "virus ID 1",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["VIRUS_ID2",                       "General",                "virus ID 2",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "Reference",              "reference",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                        "Comments",               "info",                                DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-strainDefinition = [
-    ["CO2",                             "General",                  "%CO2",                             DataType.CONTROLLEDVOCABULARY,       "CO2",  "", None, None, False],
-    ["BACKGROUND",                      "General",                  "background",                       DataType.CONTROLLEDVOCABULARY,       "STRAIN_BACKGROUND",  "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CIR",                             "General",                  "cir",                              DataType.CONTROLLEDVOCABULARY,       "CIR",  "", None, None, False],
-    ["CONC_INDUCER1",                   "General",                  "conc. inducer 1",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC_INDUCER2",                   "General",                  "conc. inducer 2",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC_INDUCER3",                   "General",                  "conc. inducer 3",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC1",                           "General",                  "conc.1",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT1",                      "General",                  "concentration unit 1",             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC2",                           "General",                  "conc.2",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT2",                      "General",                  "concentration unit 2",             DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC3",                           "General",                  "conc.3",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT3",                      "General",                  "concentration unit 3",             DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["DERIVATION",                      "General",                  "derivation",                       DataType.CONTROLLEDVOCABULARY,       "DERIVATION",  "", None, None, False],
-    ["EXPRESSED_PROTEIN1",              "General",                  "expressed protein 1",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["EXPRESSED_PROTEIN2",              "General",                  "expressed protein 2",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["EXPRESSED_PROTEIN3",              "General",                  "expressed protein 3",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FREE_PLASMID",                    "General",                  "freeplasmid",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FREEZEDATE",                      "General",                  "freezedate",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["GAL",                             "General",                  "gal",                              DataType.CONTROLLEDVOCABULARY,       "GAL",  "", None, None, False],
-    ["GENE_EXPRESSION1",                "General",                  "gene expression 1",                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["GENE_EXPRESSION2",                "General",                  "gene expression 2",                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["GROWTH_TEMPERATURE",              "General",                  "growth temperature",               DataType.CONTROLLEDVOCABULARY,       "GROWTH_TEMPERATURE",  "", None, None, False],
-    ["INDUCER1",                        "General",                  "inducer 1",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INDUCER2",                        "General",                  "inducer 2",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INDUCER3",                        "General",                  "inducer 3",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                        "General",                  "info",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MARKERS",                         "General",                  "markers",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MAT",                             "General",                  "mat",                              DataType.CONTROLLEDVOCABULARY,       "MAT",  "", None, None, False],
-    ["MEDIUM",                          "General",                  "medium",                           DataType.CONTROLLEDVOCABULARY,       "MEDIUM",  "", None, None, False],
-    ["MEDIUM_SPECIALS",                 "General",                  "medium specials",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["NUMBER",                          "General",                  "number",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_OBTAINED_FROM",            "General",                  "obtained from",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ORF",                             "General",                  "orf",                              DataType.VARCHAR,                    None,  "", None, None, False],    
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PARENTAL_CELL",                   "General",                  "parental cell",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PASSAGE",                         "General",                  "passage",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PERSYEASTNUMBER",                 "General",                  "persyeastnumber",                  DataType.INTEGER,                    None,  "", None, None, False],
-    ["PETERYEASTNUMBER",                "General",                  "peteryeastnumber",                 DataType.INTEGER,                    None,  "", None, None, False],
-    ["PLASMID_ID1",                     "General",                  "plasmid ID 1",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID2",                     "General",                  "plasmid ID 2",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID3",                     "General",                  "plasmid ID 3",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER1",                       "General",                  "promoter 1",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER2",                       "General",                  "promoter 2",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER3",                       "General",                  "promoter 3",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "General",                  "reference",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION1",                      "General",                  "sel.1",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION2",                      "General",                  "sel.2",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION3",                      "General",                  "sel.3",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION",                       "General",                  "selection",                        DataType.CONTROLLEDVOCABULARY,       "SELECTION_YEAST",  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.INTEGER,                    None,  "", None, None, False],
-    ["STRAIN_SOURCE",                   "General",                  "source",                           DataType.CONTROLLEDVOCABULARY,       "STRAIN_SOURCE",  "", None, None, False],
-    ["SPECIES",                         "General",                  "species",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_ID_NR",                    "General",                  "strain_id_nr",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["NAME",                            "General",                  "strain ID",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_NAME",                     "General",                  "strain name",                      DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-oligoDefinition = [
-    ["AMOUNT",                          "General",                  "amount",                           DataType.REAL,                      None, "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                   None, "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                   None, "", None, None, False],
-    ["OLIGO_COMPANY",                   "General",                  "company",                          DataType.CONTROLLEDVOCABULARY,      "OLIGO_COMPANY", "", None, None, False],
-    ["CONCENTRATION",                   "General",                  "concentration",                    DataType.REAL,                      None, "", None, None, False],
-    ["CONCENTRATION_UNIT",              "General",                  "concentration unit",               DataType.CONTROLLEDVOCABULARY,      "CONC_UNITS", "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                   None, "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["GENE_LOCUS",                      "General",                  "gene locus",                       DataType.VARCHAR,                   None, "", None, None, False],
-    ["GRADE",                           "General",                  "grade",                            DataType.CONTROLLEDVOCABULARY,      "OLIGO_GRADE", "", None, None, False],
-    ["COMMENTS",                        "General",                  "Info",                             DataType.VARCHAR,                   None, "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS", "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS", "", None, None, False],
-    ["OD",                              "General",                  "od",                               DataType.INTEGER,                   None, "", None, None, False],
-    ["NAME",                            "General",                  "oligo ID",                         DataType.INTEGER,                   None, "", None, None, False],
-    ["OLIGO_ID_NR",                     "General",                  "oligo_id_nr",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["ORDER_DATE",                      "General",                  "order date",                       DataType.VARCHAR,                   None, "", None, None, False],
-    ["OLIGO_ORGANISM",                  "General",                  "organism",                         DataType.CONTROLLEDVOCABULARY,      "OLIGO_ORGANISM", "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["PRIMER_PARTNER",                  "General",                  "primer partner",                   DataType.VARCHAR,                   None, "", None, None, False],
-    ["PRIMER_POSITION",                 "General",                  "primer position",                  DataType.CONTROLLEDVOCABULARY,      "PRIMER_POSITION", "", None, None, False],
-    ["PUBLISHED_IN",                    "General",                  "PublishedIn",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["RESTRICTION_SITE",                "General",                  "restriction site",                 DataType.CONTROLLEDVOCABULARY,      "RESTRICTION", "", None, None, False],
-    ["SEQUENCE",                        "General",                  "sequence",                         DataType.VARCHAR,                   None, "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.VARCHAR,                   None, "", None, None, False],
-    ["USAGE",                           "General",                  "usage",                            DataType.CONTROLLEDVOCABULARY,      "OLIGO_USAGE", "", None, None, False],
-    ["ADENOSINE",                       "Calculated fields",        "adenosine",                        DataType.INTEGER,                   None, "", adenosineScriptName, None, False],
-    ["CYTOSINE",                        "Calculated fields",        "cytosine",                         DataType.INTEGER,                   None, "", cytosineScriptName, None, False],
-    ["GUANOSINE",                       "Calculated fields",        "guanosine",                        DataType.INTEGER,                   None, "", guanosineScriptName, None, False],
-    ["THYMIDINE",                       "Calculated fields",        "thymidine",                        DataType.INTEGER,                   None, "", thymidineScriptName, None, False],
-    ["LENGTH",                          "Calculated fields",        "length",                           DataType.INTEGER,                   None, "", lengthScriptName, None, False],
-    ["GC",                              "Calculated fields",        "gc",                               DataType.REAL,                      None, "", gcScriptName, None, False],
-    ["TM",                              "Calculated fields",        "tm",                               DataType.REAL,                      None, "", tmScriptName, None, False],
-    ["O_NUCLEOTIDE",                    "Calculated fields",        "O nucleotide",                     DataType.INTEGER,                   None, "", nucelotideScriptName, None, False]
-];
-
-plasmidDefinition = [
-    ["BACKBONE",                        "General",                  "backbone",                         DataType.CONTROLLEDVOCABULARY,      "BACKBONE",  "", None, None, False],
-    ["BACKUP_STORAGE",                  "General",                  "backup storage",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BACTERIAL_HOST",                  "General",                  "bacterial host",                   DataType.CONTROLLEDVOCABULARY,      "BACTERIAL_HOST",  "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BIOSAFETY_LEVEL",                 "General",                  "biosafety level",                  DataType.CONTROLLEDVOCABULARY,      "BIOSAFETY_LEVEL",  "", None, None, False],
-    ["BOXNR",                           "General",                  "boxNr",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CONCENTRATION_UNIT",              "General",                  "concentration unit",               DataType.CONTROLLEDVOCABULARY,      "CONC_UNITS",  "", None, None, False],
-    ["CONSTRUCTION_METHOD",             "General",                  "construction method",              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["CTERMTAG",                        "General",                  "Ctermtag",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["DATE_OF_CONSTRUCTION",            "General",                  "date of construction",             DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["DERIVATIVE_OF",                   "General",                  "Derivative of",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ECOLI_STRAIN",                    "General",                  "E.coli strain",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXCISE_INSERT",                   "General",                  "excise insert",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXCISE_INSERT2",                  "General",                  "excise insert 2",                  DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FREEZEDATE",                      "General",                  "freezedate",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["FUNCTIONAL_ELEMENTS_INSERT",      "General",                  "functional elements insert",       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["HYPERCARD_FILE",                  "General",                  "hypercard file",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INFO",                            "General",                  "info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INSERT",                          "General",                  "insert",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INSERTION_SITE",                  "General",                  "insertion site",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LINEARIZE",                       "General",                  "linearize",                        DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MARKER",                          "General",                  "Marker",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["NAME_OF_PARENTAL_CLONE",          "General",                  "name of parental clone",           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NAME_OF_VECTOR",                  "General",                  "name of vector",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NTERMTAG",                        "General",                  "Ntermtag",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NUCLEOTIDE_SEQUENCE",             "General",                  "nucleotide sequence",              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OLIGOS_USED",                     "General",                  "oligos used",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ORGANISM",                        "General",                  "organism",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ORIGIN_OF_REPLICATION",           "General",                  "origin of replication",            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OTHER_MARKER",                    "General",                  "other marker",                     DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PERSPLASMIDNUM",                  "General",                  "persPlasmidnum",                   DataType.REAL,                      None,  "", None, None, False],
-    ["PETERPLASMIDNUM",                 "General",                  "PeterPlasmidNum",                  DataType.INTEGER,                   None,  "", None, None, False],
-    ["NAME",                            "General",                  "plasmid ID",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMID_ID_NR",                   "General",                  "plasmid_id_nr",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMIDNAME",                     "General",                  "plasmidname",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PRIMERS",                         "General",                  "primers",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PROMOTER",                        "General",                  "promoter",                         DataType.CONTROLLEDVOCABULARY,      "PROMOTER",  "", None, None, False],
-    ["SELECTION_IN_BACTERIA",           "General",                  "selection in bacteria",            DataType.CONTROLLEDVOCABULARY,      "SELECTION_IN_BACTERIA",  "", None, None, False],
-    ["SELECTION_IN_EUKARYOTES",         "General",                  "selection in eukaryotes",          DataType.CONTROLLEDVOCABULARY,      "SELECTION_IN_EUKARYOTES",  "", None, None, False],
-    ["SEQUENCE_FILE_NAME",              "General",                  "sequence file name",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SEQUENCING_DATE",                 "General",                  "sequencing date",                  DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.INTEGER,                   None,  "", None, None, False],
-    ["SHELF",                           "General",                  "shelf",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIZE_INSERT",                     "General",                  "size insert",                      DataType.REAL,                      None,  "", None, None, False],
-    ["SIZE_OF_INSERT",                  "General",                  "size of insert",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIZE_VECTOR",                     "General",                  "size vector",                      DataType.REAL,                      None,  "", None, None, False],
-    ["PLASMID_SOURCE",                  "General",                  "source",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMID_SPECIES",                 "General",                  "species",                          DataType.CONTROLLEDVOCABULARY,      "PLASMID_ORGANISM",  "", None, None, False],
-    #["TUBES",                           "General",                 "TUBES",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["URL",                             "Reference",                "url",                              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "Reference",                "published in",                     DataType.VARCHAR,                   None,  "", None, None, False]
-];
-
-chemicalDefinition = [
-    ["ARTICLE",                         "General",                  "Article",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["COMPANY",                         "General",                  "Company",                          DataType.CONTROLLEDVOCABULARY,      "COMPANY",  "", None, None, False],
-    ["ARTICLE_NUM",                     "General",                  "Article Number",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["RECORD_NUMBER",                   "General",                  "RecordNumber",                     DataType.VARCHAR,                   None,  "", None, None, False],
-    ["LOCATION",                        "Location",                  "Location",                         DataType.VARCHAR,                   None,  "", None, None, False]   
-];
-
-siRNADefinition = [
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["GENE_LOCUS",                      "General",                  "gene locus",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXON_OR_THREE_PRIME",             "General",                  "exon or three prime",              DataType.CONTROLLEDVOCABULARY,      "EXON_OR_THREE_PRIME",  "", None, None, False],
-    ["EXON",                            "General",                  "exon #",                           DataType.INTEGER,                   None,  "", None, None, False],
-    ["3_PRIME_POSITION",                "General",                  "3' position",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_SPECIES",                   "General",                  "species",                          DataType.CONTROLLEDVOCABULARY,      "SIRNA_SPECIES",  "", None, None, False],
-    ["SEQUENCE",                        "General",                  "SEQUENCE",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_COMPANY",                   "General",                  "Company",                          DataType.CONTROLLEDVOCABULARY,      "SIRNA_COMPANY",  "", None, None, False],
-    ["STOCK_CONCENTRATION",             "General",                  "Stock concentration",              DataType.REAL,                      None,  "", None, None, False],
-    ["WORKING_CONCENTRATION",           "General",                  "Working concentration",            DataType.REAL,                      None,  "", None, None, False],
-    ["EFFICIENCY",                      "General",                  "Efficiency",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_QPCR",                 "General",                  "Efficiency_qPCR",                  DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_WESTERN",              "General",                  "Efficiency_Western",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_OTHER",                "General",                  "Efficiency_other",                 DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OFF_TARGET_EFFECTS",              "General",                  "Off target effects",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INFO",                            "General",                  "Info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SPECIFIC_SPLICE_VARIANT",         "General",                  "Specific splice variant",          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["TRANSFECTION_AGENT",              "General",                  "Transfection agent",               DataType.CONTROLLEDVOCABULARY,      "TRANSFECTION_AGENT",  "", None, None, False],
-    ["LIBRARY",                         "General",                  "Library",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CHARACTERIZED_BY_COMPANY",        "General",                  "Characterized by company",         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NUMBERINPOOL",                    "General",                  "NumberINpool",                     DataType.INTEGER,                   None,  "", None, None, False],
-    ["TEST",                            "General",                  "Test",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CHEMICAL_MODIFICATION",           "General",                  "Chemical modification",            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OLIGO_NAME",                      "General",                  "Oligo name",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_OLIGONUMBER",               "General",                  "siRNA_OligoNumber",                DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_FREEZER_LOCATION",          "General",                  "Freezer Location",                 DataType.CONTROLLEDVOCABULARY,      "SIRNA_FREEZER_LOCATION",  "", None, None, False],
-    ["DRAWER",                          "General",                  "Drawer",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PUBLISHED",                       "Reference",                "Published",                        DataType.VARCHAR,                   None,  "", None, None, False]
-];
-
-#
-# Data Set Types
-#
-documentDefinition = [
-    ["CREATION_DATE",                   "General",                  "date created",                     DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "date modified",                    DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["INFO",                            "General",                  "info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ID_NR",                           "General",                  "id_nr",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FILE",                            "General",                  "file",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SERIAL",                          "General",                  "serial",                           DataType.INTEGER,                   None,  "", None, None, False]
- 
-];
diff --git a/plasmid/source/core-plugins/petermigration/1/as/definitionsVoc.py b/plasmid/source/core-plugins/petermigration/1/as/definitionsVoc.py
deleted file mode 100644
index 3548fcc6f4d1bc87c3af24af4efaf626f84b14a2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/as/definitionsVoc.py
+++ /dev/null
@@ -1,854 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                          "ALL_LAB_MEMBERS" : [
-                                        ["ANNA_DEPLAZES",   "Anna Deplazes"],
-                                        ["ANNE-CHRISTINE_BUTTY",   "Anne-Christine Butty"],
-                                        ["BRIAN_LUKE",   "Brian Luke"],
-                                        ["CAROLINE_ZBINDEN",   "Caroline Zbinden"],
-                                        ["CELINE_LAFOURCADE",   "Celine Lafourcade"],
-                                        ["CHRISTINE_RUPP",   "Christine Rupp"],
-                                        ["CLAUDINE_KRAFT",   "Claudine Kraft"],
-                                        ["EDYTA_SIERGIEJUK",   "Edyta Siergiejuk"],
-                                        ["FABIAN_HERZOG",   "Fabian Herzog"],
-                                        ["FABIAN_RUDOLF",   "Fabian Rudolf"],
-                                        ["FRANK_VAN_DROGEN",   "Frank Van Drogen"],
-                                        ["GERDA_JORRITSMA",   "Gerda Jorritsma"],
-                                        ["GWEN_RABUT",   "Gw\xe9nael Rabut"],
-                                        ["INGRID_STOFFEL-STUDER",   "Ingrid Stoffel-Studer"],
-                                        ["IRAM_ZAIDI",   "Iram Zaidi"],
-                                        ["IZABELA_SUMARA",   "Izabela Sumara"],
-                                        ["LIONEL_PINTARD",   "Lionel Pintard"],
-                                        ["MALIKAJAQUENOUD",   "MalikaJaquenoud"],
-                                        ["MARC_SOHRMANN",   "Marc Sohrmann"],
-                                        ["MARIE-LYN_HECHT",   "Marie-Lyn Hecht"],
-                                        ["MARIE-PIERRE_GULLI",   "Marie-Pierre Gulli"],
-                                        ["MATTHIAS_PETER",   "Matthias Peter"],
-                                        ["MICHAEL_OLMA",   "Michael Olma"],
-                                        ["MICHAEL_SCHNEIDER",   "Michael Schneider"],
-                                        ["MICHELE_KNAUS",   "Michele Knaus"],
-                                        ["MONIKA_GERSBACH",   "Monika Gersbach"],
-                                        ["NATHALIE_MEYER-SCHALLER",   "Nathalie Meyer-Schaller"],
-                                        ["NATHALIE_PERRINJAQUET",   "Nathalie Perrinjaquet"],
-                                        ["NICOLAS_DARD",   "Nicolas Dard"],
-                                        ["NICOLAS_PAGE",   "Nicolas Page"],
-                                        ["PATRICK_PEDRIOLI",   "Patrick Pedrioli"],
-                                        ["PHILIPPE_WIGET",   "Philippe Wiget"],
-                                        ["PIERRE_MAILLARD",   "Pierre Maillard"],
-                                        ["REINHARD_DECHANT",   "Reinhard Dechant"],
-                                        ["SANDER_SPRINGER",   "Sander Springer"],
-                                        ["SARAH_GLASER",   "Sarah Glaser"],
-                                        ["SARAH_MAERKI",   "Sarah  M\xe4rki"],
-                                        ["SEBASTIAN_LEIDEL",   "Sebastian Leidel"],
-                                        ["SERGE_PELET",   "Serge Pelet"],
-                                        ["STEFAN_MUELLER",   "Stefan M�ller"],
-                                        ["TANIA_ROBERTS",   "Tania Roberts"],
-                                        ["THIMO_KURZ",   "Thimo Kurz"],
-                                        ["TOBIAS_BRAUN",   "Tobias Braun"],
-                                        ["VANESSA_REZGUI",   "Vanessa Rezgui"],
-                                        ["WOJCIECH_PIWKO",   "Wojciech Piwko"],
-                                        ["YUKIKO_SHIMADA",   "Yukiko Shimada"],
-                                        ["YVONNE_GLOOR",   "Yvonne Gloor"],
-                                        ["JOCHEN_BECK",   "Jochen Beck"],
-                                        ["MONIKA_KIJANSKA",   "Monika Kijanska"],
-                                        ["ANGIE_RAGHEB",   "Angie Ragheb"],
-                                        ["ANNE_PACQUELET",   "Anne Pacquelet"],
-                                        ["BJORN_HEGEMANN",   "Bj\xf6rn Hegemann"],
-                                        ["JANNY_TILMA",   "Janny Tilma"],
-                                        ["THIBAULT_COURTHEOUX",   "Thibault Courtheoux"],
-                                        ["SAMUEL_GILBERTO",   "Samuel Gilberto"],
-                                        ["REMY_BUSER",   "Remy Buser"],
-                                        ["RADOSLAV_ENCHEV",   "Radoslav Enchev"],
-                                        ["MICHAELA_HUBNER",   "Michaela Hubner"],
-                                        ["MIA_LI",   "Mia Li"],
-                                        ["JULIEN_MOUYSSET",   "Julien Mouysset"]
-                                    ],
-                           "LAB_MEMBERS_INITIALS" : [
-                                        ["AD", "AD"],
-                                        ["ACB", "ACB"],
-                                        ["BL", "BL"],
-                                        ["CZ", "CZ"],
-                                        ["CL", "CL"],
-                                        ["CR", "CR"],
-                                        ["CK", "CK"],
-                                        ["ES", "ES"],
-                                        ["FH", "FH"],
-                                        ["FR", "FR"],
-                                        ["FD", "FD"],
-                                        ["GJ", "GJ"],
-                                        ["GR", "GR"],
-                                        ["ISS", "ISS"],
-                                        ["IZ", "IZ"],
-                                        ["IS", "IS"],
-                                        ["LP", "LP"],
-                                        ["MJ", "MJ"],
-                                        ["MSO", "MSo"],
-                                        ["MH", "MH"],
-                                        ["MG", "MG"],
-                                        ["MP", "MP"],
-                                        ["MO", "MO"],
-                                        ["MSC", "MSc"],
-                                        ["MK", "MK"],
-                                        ["MG", "MG"],
-                                        ["NS", "NS"],
-                                        ["NPE", "NPe"],
-                                        ["ND", "ND"],
-                                        ["NPA", "NPa"],
-                                        ["PP", "PP"],
-                                        ["PW", "PW"],
-                                        ["PM", "PM"],
-                                        ["RD", "RD"],
-                                        ["SS", "SS"],
-                                        ["SG", "SG"],
-                                        ["SMA", "SMa"],
-                                        ["SL", "SL"],
-                                        ["SP", "SP"],
-                                        ["SM", "SM"],
-                                        ["TR", "TR"],
-                                        ["TK", "TK"],
-                                        ["TB", "TB"],
-                                        ["VR", "VR"],
-                                        ["WP", "WP"],
-                                        ["YS", "YS"],
-                                        ["YG", "YG"],
-                                        ["JB", "JB"],
-                                        ["MKI", "MKi"]
-                                    ],
-                            "BLOCK" : [
-                                       ["1BSA_01TRITON-X100",  "1% BSA; 0.1% Triton-X100"],
-                                    ],
-                            "CLASS" : [
-                                ["IGM", "IgM"],
-                                ["IGG1",    "IgG1"],
-                                ["IGG2",    "IgG2"]
-                                    ],
-                            "COMPANY" : [
-                                    ["ABCAM", "abcam"],
-                                    ["CELL_SIGNALING", "cell signaling"],
-                                    ["STRATAGEN", "stratagene"],
-                                    ["CLONTECH", "clontech"],
-                                    ["UBI", "ubi"],
-                                    ["SOUTHERN_BIOTECH", "southern biotech"],
-                                    ["PIERCE", "pierce"],
-                                    ["PHARMIGEN", "pharmingen"],
-                                    ["MOLECULAR_PROBES", "molecular probes"],
-                                    ["PHARMACIA", "pharmacia"],
-                                    ["BIORAD", "biorad"],
-                                    ["EUROGENETIC", "eurogentec"],
-                                    ["HOMEMADE", "homemade"],
-                                    ["BD_BIOSCIENCE", "BD bioscience"],
-                                    ["OBTAINED_FROM", "obtained from "],
-                                    ["ZYMED", "Zymed"],
-                                    ["UNKNOWN", "Unknown"],
-                                    ["SANTA_CRUZ", "Santa Cruz"],
-                                    ["BIOLEGEND", "Biolegend"],
-                                    ["BETHYL", "Bethyl"],
-                                    ["UPSTATE", "Upstate"],
-                                    ["ROCKLAND", "Rockland"],
-                                    ["NOVUS_BIOLOGICALS", "Novus Biologicals"],
-                                    ["CHEMICON_INTERNATIONAL", "Chemicon International"],
-                                    ["SIGMA", "Sigma"],
-                                    ["ALPHA_DIAGNOSTIC_INTERNATIONAL", "Alpha Diagnostic International"],
-                                    ["MILLIPORE", "Millipore"],
-                                    ["ACTIVE_MOTIF", "Active motif"],
-                                    ["NEB", "NEB"],
-                                    ["NEOMARKERS", "Neomarkers"],
-                                    ["LUBIOSCIENCE", "LubioScience"],
-                                    ["EBIOSCIENCE", "eBioscience"],
-                                    ["INVITROGEN", "Invitrogen"],
-                                    ["STRESSGEN", "Stressgen"],
-                                    ["COVANCE", "Covance"],
-                                    ["ENZO_LIFE_SCIENCES", "Enzo Life Sciences"],
-                                    ["CALBIOCHEM", "Calbiochem"],
-                                    ["ROCHE", "Roche"],
-                                    ["CYTOSKELETON", "Cytoskeleton"],
-                                    ["OPEN_BIOSYSTEMS", "Open Biosystems"],
-                                    ["BD_TRANSDUCTION", "BD Transduction"],
-                                    ["ATLAS_ANTIBODIES_AB", "Atlas Antibodies AB"],
-                                    ["GENENTECH", "Genentech"],
-                                    ["TRANSDUCTION_LABS", "Transduction Labs"],
-                                    ["ANTIBODIES_INCORPORATED", "Antibodies Incorporated"],
-                                    ["BABCO", "BAbCO"],
-                                    ["ERICH_NIGG_LAB_BASEL", "Erich Nigg lab (Basel)"],
-                                    ["FRANCIS_BARR", "Francis Barr"],
-                                    ["AVIVA_SYSTEMS_BIOLOGY", "Aviva Systems Biology"],
-                                    ["LUCERNACHEM", "LucernaChem"],
-                                    ["LI-COR", "LI-COR"],
-                                    ["ABGENT", "Abgent"],
-                                    ["CHROMOTEK", "Chromotek"],
-                                    ["ABNOVA", "Abnova"],
-                                    ["UNKNOWN", "Unknown"],
-                                    ["ABSEA", "Absea"],
-                                    ["GE_HEALTHCARE", "GE Healthcare"],
-                                    ["GRAMSCH_LABORATORIES", "Gramsch Laboratories"],
-                                    ["ADIPOGEN", "Adipogen"],
-                                    ["COSMO_BIO_CO", "Cosmo bio co."],
-                                    ["BECKTON_DICKINSON", "Beckton Dickinson"],
-                                    ["BIOTIUM", "Biotium"]
-                                    ],
-                            "CONCENTRATION_FACS" : [
-                                            ["1_TO_10", "1 : 10"],
-                                            ["1_TO_20", "1 : 20"],
-                                            ["1_TO_30", "1 : 30"],
-                                            ["1_TO_40", "1 : 40"],
-                                            ["1_TO_50", "1 : 50"],
-                                            ["1_TO_100", "1 : 100"],
-                                            ["1_TO_200", "1 : 200"],
-                                            ["1_TO_500", "1 : 500"],
-                                            ["1_TO_1000", "1 : 1000"],
-                                            ["1_TO_2000", "1 : 2000"],
-                                            ["1_TO_3000", "1 : 3000"],
-                                            ["NOT_TESTED", "not tested"],
-                                            ["NOT_WORKING", "not working"]
-                                    ],
-                            "CONCENTRATION_IP" : [
-                                            ["1UL", "1 �l"],
-                                            ["5UL", "5 �l"],
-                                            ["10UL", "10 �l"],
-                                            ["15UL", "15 �l"],
-                                            ["20UL", "20 �l"],
-                                            ["NOT_TESTED", "not tested"],
-                                            ["NOT_WORKING", "not working"]
-                                    ],
-                            "CONCENTRATION_WESTERN" : [
-                                                ["1_TO_100", "1 : 100"],
-                                                ["1_TO_500", "1 : 500"],
-                                                ["1_TO_1000", "1 : 1000"],
-                                                ["1_TO_2000", "1 : 2000"],
-                                                ["1_TO_3000", "1 : 3000"],
-                                                ["1_TO_5000", "1 : 5000"],
-                                                ["1_TO_10000", "1 : 10000"],
-                                                ["1_TO_20000", "1 : 20000"],
-                                                ["1_TO_25000", "1 : 25000"],
-                                                ["NOT_TESTED", "not tested"],
-                                                ["NOT_WORKING", "not working"]
-                                    ],
-                          "CURRENT_LAB_MEMBERS" : [
-                                            ["CAROLINE_ZBINDEN", "Caroline Zbinden"],
-                                            ["FRANK_VAN_DROGEN", "Frank Van Drogen"],
-                                            ["INGRID_STOFFEL-STUDER", "Ingrid Stoffel-Studer"],
-                                            ["MATTHIAS_PETER", "Matthias Peter"],
-                                            ["REINHARD_DECHANT", "Reinhard Dechant"],
-                                            ["WOJCIECH_PIWKO", "Wojciech Piwko"],
-                                            ["JOCHEN_BECK", "Jochen Beck"]
-                                    ],
-                          "FIX" : [
-                                ["1H-RT", "1h, RT"],
-                                ["PTEMF", "PTEMF"],
-                                ["PFA", "PFA"],
-                                ["MEOH", "MeOH"]
-                                    ],
-                          "LABEL" : [
-                                ["HRP", "hrp"],
-                                ["AP", "ap"],
-                                ["FITC", "fitc"],
-                                ["CY3", "Cy3"],
-                                ["ALEXA647", "Alexa 647"]
-                                    ],
-                          "ANTIBODY_LOCATION" : [
-                                    ["SMALL_PETER_LAB", "Small Peter Lab"],
-                                    ["BIG_PETER_LAB", "Big Peter Lab"],
-                                    ["NEW_PETER_LAB", "New Peter Lab"],
-                                    ["MINUS20_C-FLOOR", "-20C C-Floor"]
-                                    ],
-                          "MONO-POLYCLONAL" : [
-                                            ["MONOCLONAL",  "Monoclonal"],
-                                            ["POLYCLONAL",  "Polyclonal"],
-                                            ["UNKNOWN", "Unknown"]
-                                    ],
-                          "SOURCE" : [
-                                ["MOUSE",  "Mouse"],
-                                ["RABBIT",  "Rabbit"],
-                                ["HAMSTER",  "Hamster"],
-                                ["GOAT",  "Goat"],
-                                ["RAT",  "Rat"],
-                                ["CHICKEN",  "Chicken"],
-                                ["SHEEP",  "Sheep"],
-                                ["HUMAN",  "Human"],
-                                ["GUINEA_PIG",  "Guinea pig"],
-                                ["DONEKY",  "Donkey"],
-                                ["UNKNOWN",  "Unknown"]
-                                    ],
-                          "CELL_LOCATION" : [
-                                ["FRIDGE",  "fridge"],
-                                ["FREEZER",  "freezer"],
-                                ["REFCO",  "refco"],
-                                ["TANK",  "tank"]
-                                    ],
-                          "SELECTION" : [
-                                ["NEOMYCIN_G418",  "Neomycin/G418"],
-                                ["HYGROMYCIN",  "Hygromycin"],
-                                ["MPA",  "MPA"],
-                                ["G418",  "G418"],
-                                ["PUROMYCIN",  "puromycin"],
-                                ["BLASTICIDIN",  "Blasticidin"],
-                                ["ZEOCIN",  "Zeocin"] 
-                                    ],
-                          "CO2" : [
-                                ["5",  "5"],
-                                ["7.5",  "7.5"]
-                                    ],
-                          "GROWTH_TEMPERATURE" : [
-                                ["37",  "37"],
-                                ["28",  "28"],
-                                ["34",  "34"]
-                                    ],
-                          "MEDIUM" : [
-                                ["RPMI1640",  "RPMI 1640"],
-                                ["ISCOVES",  "Iscoves"],
-                                ["DMEM",  "DMEM"],
-                                ["LB",  "LB"],
-                                ["DMEM_NUTRIENT",  "DMEM nutrient mixture F-12 HAM [D8437]"]
-                                    ], 
-                          "CELL_OBTAINED_FROM" : [
-                                ["FREIBURG",  "Freiburg"],
-                                ["ATCC",  "ATCC"],
-                                ["DANIEL_GERLICH",  "Daniel Gerlich"],
-                                ["ERICH_NIGG",  "Erich Nigg"],
-                                ["KREK",  "Krek"],
-                                ["TONY_HEYMAN",  "Tony Heyman"],
-                                ["THOMAS-WILD_ULRIKE-KUTAY",  "Thomas Wild/Ulrike Kutay"],
-                                ["JAN_MICHAEL_PETERS",  "Jan-Michael Peters"],
-                                ["M_BRANDEIS",  "M Brandeis"],
-                                ["ARI_HELENIUS",  "Ari Helenius"],
-                                ["ROMEO_RICCI",  "Romeo Ricci"]
-                                    ],  
-                          "CELL_SPECIES" : [
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],
-                                ["CHINESE_HAMSTER",  "chines hamster"],
-                                ["HYBRIDOMA",  "hybridoma (human & mouse)"]                                
-                                    ],  
-                          "CONC_UNITS" : [
-                                ["MICROG_MICROL",  "�g/�l"],
-                                ["MG_ML",  "mgl/ml"],
-                                ["UG_ML",  "ug/ml"]                               
-                                    ],  
-                          "STRAIN_SOURCE" : [
-                                ["F_CHANG", "F. Chang"],
-                                ["J_CHANT", "J. Chant"],
-                                ["R_DESHAIES", "R. Deshaies"],
-                                ["E_ELION", "E. Elion"],
-                                ["P_HIETER", "P. Hieter"],
-                                ["I_HERSKOWITZ", "I. Herskowitz"],
-                                ["A_NEIMAN", "A. Neiman"],
-                                ["P_SORGER", "P. Sorger"],
-                                ["T_STEARNS", "T. Stearns"],
-                                ["MARC_BONDEL", "Marc Bondel"],
-                                ["G_SUMARA", "G. Sumara"],
-                                ["MICHAEL_ALTMANN", "Michael Altmann"],
-                                ["HETEROZYGOUS_DIPLOID_COLLECTION", "Heterozygous diploid collection"],
-                                ["ANNE-CHRISTINE_BUTTY", "Anne-Christine Butty"],
-                                ["ANNE_PAQUELET", "Anne Paquelet"],
-                                ["YAGMUR-TURGAY_KUTAY-GROUP", "Yagmur Turgay - Kutay group"],
-                                ["BARBAR_CATARIN", "Barbar Catarin"],
-                                ["FRANK_VAN-DROGEN", "Frank van Drogen"],
-                                ["HEMMO_MEYER", "Hemmo Meyer"],
-                                ["JEAN-MARC_GALLAND", "Jean-Marc Galland"],
-                                ["JEFF_PARVIN", "Jeff Parvin"],
-                                ["MARIE-PIERRE_GULLI", "Marie-Pierre Gulli"],
-                                ["MIKIKO_TAKAHASHI", "Mikiko Takahashi"],
-                                ["SANDRA_HENCHOZ", "Sandra Henchoz"],
-                                ["MALIKA_JAQUENOUD", "Malika Jaquenoud"],
-                                ["GERDA_JORRITSMA", "Gerda Jorritsma"],
-                                ["CELINE_LAFOURCADE", "Céline Lafourcade"],
-                                ["CELINE_LONGARETTI", "Céline Longaretti"],
-                                ["BRIAN_LUKE", "Brian Luke"],
-                                ["GUY_NIEDERHAUSER", "Guy Niederhäuser"],
-                                ["NICOLAS_PAGE", "Nicolas Pag�"],
-                                ["NATHALIE_PERRINJAQUET", "Nathalie Perrinjaquet"],
-                                ["MATTHIAS_PETER", "Matthias Peter"],
-                                ["AUDREY_PETIT", "Audrey Petit"],
-                                ["LIONEL_PINTARD", "Lionel Pintard"],
-                                ["YUKIKO_SHIMADA", "Yukiko Shimada"],
-                                ["PHILIPPE_WIGET", "Philippe Wiget"],
-                                ["VOLKER_STUCKE", "Volker Stucke"],
-                                ["KATRIN_PETER", "Katrin Peter"],
-                                ["MARC_BLONDEL", "marc blondel"],
-                                ["M_FUNK", "M. Funk"],
-                                ["ATTILA_BECSKEI", "Attila Becskei"],
-                                ["GWENAEL_RABUT", "Gwenael Rabut"],
-                                ["PHILIP_JERMANN", "Philip Jermann"],
-                                ["P_PRYCIAK", "P.Pryciak"],
-                                ["LINDA_HICKE", "Linda Hicke"],
-                                ["RZPD", "RZPD"],
-                                ["OPENBIO", "OpenBio"],
-                                ["F_POSAS", "F. Posas"],
-                                ["HAPLOID_COLLECTION", "Haploid collection"],
-                                ["MIRIAM_BORTFELD", "Miriam Bortfeld"],
-                                ["EUROSCARF", "Euroscarf"],
-                                ["TS_COLLECTION", "ts collection"],
-                                ["CONZELMANN_LAB", "Conzelmann lab"],
-                                ["SEBASTIAN_LEIDEL", "Sebastian Leidel"],
-                                ["ANNA_DEPLAZES", "Anna Deplazes"],
-                                ["BIBOU", "Bibou"],
-                                ["MARC_SOHRMANN", "Marc sohrmann"]
-                                    ],
-                          "SELECTION_YEAST" : [
-                                ["NONE",  "None"],
-                                ["URA",  "Ura"],
-                                ["LEU",  "Leu"], 
-                                ["TRP",  "Trp"], 
-                                ["HIS",  "His"], 
-                                ["VIABILITY",  "Viability"], 
-                                ["NAT",  "nat"], 
-                                ["KAN",  "kan"], 
-                                ["KAN_NAT",  "kan + nat"], 
-                                ["HIS_KAN",  "HIS + kan"], 
-                                ["HIS_KAN_NAT",  "HIS + kan + nat"], 
-                                ["HIS",  "HIS"], 
-                                ["LEU_NAT",  "leu + nat"], 
-                                ["ADE2",  "ade2"]
-                                    ],  
-                         "DERIVATION" : [
-                                ["GAMMA_INTEG",  "gamma integ"],
-                                ["DELTA_INTEG",  "� integ"],
-                                ["5FAO_LOOPOUT",  "5-FAO loopout"],
-                                ["PLASMID_SHUFFLE",  "plasmid shuffle"],
-                                ["TETRAD",  "tetrad"],
-                                ["LOOP-IN_LOOP-OUT",  "loop-in/loop-out"],
-                                ["GALPHO",  "GalpHO mating type switch"],
-                                ["DELETION",  "Deletion"],
-                                ["INTEGRATION",  "Integration"]
-                                    ],
-                         "STRAIN_BACKGROUND" : [
-                                ["W303",  "W303"],
-                                ["K699",  "K699"],
-                                ["K700",  "K700"],
-                                ["S288C",  "S288C"],
-                                ["1278",  "*1278*"],
-                                ["EG123",  "EG123"],
-                                ["DF5",  "DF5"],
-                                ["SIGMA",  "Sigma"],
-                                ["UNKNOWN",  "Don't know"],
-                                ["BY7092",  "BY7092"],
-                                ["BY5565",  "BY5565"],
-                                ["BY4741",  "BY4741"]
-                                    ],
-                        "CIR" : [
-                                ["CIR_PLUS",  "cir+"],
-                                ["CIR_DEG",  "cir�"],
-                                    ],
-                        "GAL" : [
-                                ["PLUS",  "Plus"],
-                                ["PLUS_PLUS",  "Plus/Plus"],
-                                ["GAL1",  "gal1"],
-                                ["GAL1_GAL1",  "gal1/gal1"],      
-                                ["GAL2",  "gal2"],                                 
-                                ["GAL2_GAL2",  "gal2/gal2"],                                                         
-                                    ],
-                        "MAT" : [
-                                ["AT",  "@"],
-                                ["A",  "a"],
-                                ["ALPHA",  "alpha"],
-                                ["DIPLOID",  "diploid"],      
-                                ["UNKNOWN",  "unknown"]                                                      
-                                    ],
-                        "OLIGO_ORGANISM" : [
-                                ["BMV",  "BMV"],
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],      
-                                ["XENOPUS",  "xenopus"],
-                                ["DROSOPHILA",  "drosophila"],
-                                ["YEAST",  "yeast"],
-                                ["ECOLI",  "E.coli"],
-                                ["SYNTHETIC",  "synthetic"],
-                                ["HIV1",  "HIV-1"],
-                                ["CELEGANS",  "C.elegans"],
-                                ["MYCOPLASMA",  "mycoplasma"]
-                                    ],
-                        "OLIGO_GRADE" : [
-                                ["DESALTED",  "desalted"],
-                                ["HPLC",  "hplc"],
-                                ["PURITY",  "purity"],
-                                ["UNKNOWN",  "?"]      
-                                    ],     
-                        "PRIMER_POSITION" : [
-                                ["FORWARD",  "forward"],
-                                ["REVERSE",  "reverse"]
-                                    ],  
-                        "OLIGO_COMPANY" : [
-                                ["MWG",  "MWG"],
-                                ["BIG",  "BIG"],
-                                ["PHARMACIA",  "Pharmacia"],
-                                ["IGLOI",  "Igloi"],      
-                                ["INVITROGEN",  "invitrogen"],
-                                ["MICROSYNTH",  "microsynth"]                                                     
-                                    ],                                       
-                        "OLIGO_USAGE" : [
-                                ["PCR",  "pcr"],
-                                ["SEQUENCING",  "sequencing"],
-                                ["HYBRIDIZE",  "hybridize"],
-                                ["MUTAGENESIS",  "mutagenesis"],      
-                                ["RT-PCR",  "Real-Time PCR"]
-                                    ],
-                        "RESTRICTION" : [
-                                ["AATII",  "AatII"],
-                                ["ACCI",  "AccI"],
-                                ["ACII",  "AciI"],
-                                ["AFLII",  "AflII"],
-                                ["AFLIII",  "AflIII"],
-                                ["AGEI",  "AgeI"],
-                                ["ALUI",  "AluI"],
-                                ["ALWI",  "AlwI"],
-                                ["ALWNI",  "AlwNI"],
-                                ["APAI",  "ApaI"],
-                                ["APALI",  "ApaLI"],
-                                ["APOI",  "ApoI"],
-                                ["ASCI",  "AscI"],
-                                ["ASEI",  "AseI"],
-                                ["AVAI",  "AvaI"],
-                                ["AVAII",  "AvaII"],
-                                ["AVRII",  "AvrII"],
-                                ["BAMHI",  "BamHI"],
-                                ["BANI",  "BanI"],
-                                ["BANII",  "BanII"],
-                                ["BBSI",  "BbsI"],
-                                ["BBVI",  "BbvI"],
-                                ["BCGI-1",  "BcgI-1"],
-                                ["BCGI-2",  "BcgI-2"],
-                                ["BCLI",  "BclI"],
-                                ["BFAI",  "BfaI"],
-                                ["BGLI",  "BglI"],
-                                ["BGLII",  "BglII"],
-                                ["BLPI",  "BlpI"],
-                                ["BPMI",  "BpmI"],
-                                ["BSAAI",  "BsaAI"],
-                                ["BSABI",  "BsaBI"],
-                                ["BSAHI",  "BsaHI"],
-                                ["BSAI",  "BsaI"],
-                                ["BSAJI",  "BsaJI"],
-                                ["BSAWI",  "BsaWI"],
-                                ["BSERI",  "BseRI"],
-                                ["BSGI",  "BsgI"],
-                                ["BSIEI",  "BsiEI"],
-                                ["BSIHKAI",  "BsiHKAI"],
-                                ["BSIWI",  "BsiWI"],
-                                ["BSLI",  "BslI"],
-                                ["BSMAI",  "BsmAI"],
-                                ["BSMBI",  "BsmBI"],
-                                ["BSMFI",  "BsmFI"],
-                                ["BSMI",  "BsmI"],
-                                ["BSOFI",  "BsoFI"],
-                                ["BSP1286I",  "Bsp1286I"],
-                                ["BSPEI",  "BspEI"],
-                                ["BSPHI",  "BspHI"],
-                                ["BSPMI",  "BspMI"],
-                                ["BSRBI",  "BsrBI"],
-                                ["BSRDI",  "BsrDI"],
-                                ["BSRFI",  "BsrFI"],
-                                ["BSRGI",  "BsrGI"],
-                                ["BSRI",  "BsrI"],
-                                ["BSSHII",  "BssHII"],
-                                ["BST1107I",  "Bst1107I"],
-                                ["BSTBI",  "BstBI"],
-                                ["BSTEII",  "BstEII"],
-                                ["BSTNI",  "BstNI"],
-                                ["BSTUI",  "BstUI"],
-                                ["BSTXI",  "BstXI"],
-                                ["BSTYI",  "BstYI"],
-                                ["BSU36I",  "Bsu36I"],
-                                ["CAC8I",  "Cac8I"],
-                                ["CLAI",  "ClaI"],
-                                ["CVIJI",  "CviJI"],
-                                ["DDEI",  "DdeI"],
-                                ["DPNI",  "DpnI"],
-                                ["DRAI",  "DraI"],
-                                ["DRAIII",  "DraIII"],
-                                ["DRDI",  "DrdI"],
-                                ["DSAI",  "DsaI"],
-                                ["EAEI",  "EaeI"],
-                                ["EAGI",  "EagI"],
-                                ["EAM1105I",  "Eam1105I"],
-                                ["EARI",  "EarI"],
-                                ["ECO47III",  "Eco47III"],
-                                ["ECO57I",  "Eco57I"],
-                                ["ECONI",  "EcoNI"],
-                                ["ECOO109I",  "EcoO109I"],
-                                ["ECORI",  "EcoRI"],
-                                ["ECORV",  "EcoRV"],
-                                ["FOKI",  "FokI"],
-                                ["FSEI",  "FseI"],
-                                ["FSPI",  "FspI"],
-                                ["HAEII",  "HaeII"],
-                                ["HAEIII",  "HaeIII"],
-                                ["HGAI",  "HgaI"],
-                                ["HHAI",  "HhaI"],
-                                ["HINCII",  "HincII"],
-                                ["HINDIII",  "HindIII"],
-                                ["HINFI",  "HinfI"],
-                                ["HPAI",  "HpaI"],
-                                ["HPAII",  "HpaII"],
-                                ["HPHI",  "HphI"],
-                                ["KPNI",  "KpnI"],
-                                ["MAEII",  "MaeII"],
-                                ["MAEIII",  "MaeIII"],
-                                ["MBOI",  "MboI"],
-                                ["MBOII",  "MboII"],
-                                ["MLUI",  "MluI"],
-                                ["MNLI",  "MnlI"],
-                                ["MSCI",  "MscI"],
-                                ["MSEI",  "MseI"],
-                                ["MSLI",  "MslI"],
-                                ["MSPA1I",  "MspA1I"],
-                                ["MUNI",  "MunI"],
-                                ["MWOI",  "MwoI"],
-                                ["NAEI",  "NaeI"],
-                                ["NARI",  "NarI"],
-                                ["NCII",  "NciI"],
-                                ["NCOI",  "NcoI"],
-                                ["NDEI",  "NdeI"],
-                                ["NHEI",  "NheI"],
-                                ["NLAIII",  "NlaIII"],
-                                ["NLAIV",  "NlaIV"],
-                                ["NOTI",  "NotI"],
-                                ["NRUI",  "NruI"],
-                                ["NSII",  "NsiI"],
-                                ["NSPI",  "NspI"],
-                                ["PACI",  "PacI"],
-                                ["PFLMI",  "PflMI"],
-                                ["PLEI",  "PleI"],
-                                ["PMEI",  "PmeI"],
-                                ["PMLI",  "PmlI"],
-                                ["PPUMI",  "PpuMI"],
-                                ["PSHAI",  "PshAI"],
-                                ["PSP1406I",  "Psp1406I"],
-                                ["PSTI",  "PstI"],
-                                ["PVUI",  "PvuI"],
-                                ["PVUII",  "PvuII"],
-                                ["RSAI",  "RsaI"],
-                                ["RSRII",  "RsrII"],
-                                ["SACI",  "SacI"],
-                                ["SACII",  "SacII"],
-                                ["SALI",  "SalI"],
-                                ["SAPI",  "SapI"],
-                                ["SAU96I",  "Sau96I"],
-                                ["SCAI",  "ScaI"],
-                                ["SCRFI",  "ScrFI"],
-                                ["SEXAI",  "SexAI"],
-                                ["SFANI",  "SfaNI"],
-                                ["SFCI",  "SfcI"],
-                                ["SFII",  "SfiI"],
-                                ["SGFI",  "SgfI"],
-                                ["SGRAI",  "SgrAI"],
-                                ["SMAI",  "SmaI"],
-                                ["SNABI",  "SnaBI"],
-                                ["SPEI",  "SpeI"],
-                                ["SPHI",  "SphI"],
-                                ["SRFI",  "SrfI"],
-                                ["SSE8387I",  "Sse8387I"],
-                                ["SSPI",  "SspI"],
-                                ["STUI",  "StuI"],
-                                ["STYI",  "StyI"],
-                                ["SWAI",  "SwaI"],
-                                ["TAQI",  "TaqI"],
-                                ["TFII",  "TfiI"],
-                                ["TSP45I",  "Tsp45I"],
-                                ["TSP509I",  "Tsp509I"],
-                                ["TTH111I",  "Tth111I"],
-                                ["XBAI",  "XbaI"],
-                                ["XCMI",  "XcmI"],
-                                ["XHOI",  "XhoI"],
-                                ["XMNI",  "XmnI"],
-                                ["SACI_NHEI",  "sacI NheI"],
-                                ["XMAI",  "XmaI"],
-                                ["BAMHI",  "BamHI"],
-                                ["CLAI",  "ClaI"],
-                                ["PACI",  "PacI"],
-                                ["NOTI",  "NotI"],
-                                ["SALI",  "SalI"],
-                                ["XHOI",  "XhoI"],
-                                ["NONE",  "none"]
-                            ],
-                        "BACKBONE" : [
-                                ["PCDNA3",  "pCDNA3"],
-                                ["PABES-NEO2000",  "pABES-neo 2000"],    
-                                ["PUC19",  "pUC 19"],                                
-                                ["PMX-1",  "pMX-1"],
-                                ["PRMHA-3",  "pRmHa-3"]
-                            ],
-                        "BACTERIAL_HOST" : [
-                                ["DH10B",  "DH10B"],
-                                ["JM110",  "JM110"],    
-                                ["BL21",  "BL21"],                                
-                                ["DH5A",  "DH5a"],
-                                ["PB3",  "PB3"],
-                                ["DB31",  "DB3.1"],
-                                ["CCDB_SURVIVAL",  "ccdB survival"]
-                            ],  
-                        "BIOSAFETY_LEVEL" : [
-                                ["S1",  "S1"],
-                                ["S2",  "S2"],    
-                                ["S3",  "S3"]        
-                            ],
-                        "SELECTION_IN_BACTERIA" : [
-                                ["AMPICILLIN",  "Ampicillin"],
-                                ["KANAMYCIN",  "Kanamycin"],    
-                                ["SPECTINOMCIN",  "Spectinomcin"],
-                                ["UNKNOWN",  "Unknown"]                                        
-                            ],
-                        "SELECTION_IN_EUKARYOTES" : [
-                                ["G418_NEO",  "G418/neo"],
-                                ["MPA",  "MPA"],    
-                                ["HYGROMYCIN",  "Hygromycin"]                                 
-                            ],                            
-                        "SOURCE_OF_REPLICON" : [
-                                ["CMV",  "CMV"]                                   
-                            ],
-                        "PLASMID_ORGANISM" : [
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],
-                                ["XENOPUS",  "xenopus"],
-                                ["DROSOPHILA",  "drosophila"],
-                                ["YEAST",  "yeast"],
-                                ["ECOLI",  "E.coli"],
-                                ["SYNTHETIC",  "synthetic"]
-                            ],
-                        "PROMOTER" : [
-                                ["ENDOGENOUS",  "endogenous"],
-                                ["GAL1",  "gal1"],
-                                ["GALL",  "galL"],
-                                ["GALS",  "galS"],
-                                ["TET",  "tet"],
-                                ["ADH",  "adh"],
-                                ["CYC",  "cyc"],
-                                ["GPD",  "gpd"],
-                                ["DASH",  "\"-\""],
-                                ["CMV",  "cmv"],
-                                ["SV40",  "SV40"],
-                                ["TET_ON",  "tet on"],
-                                ["TET_OFF",  "tet off"],
-                                ["RIM1",  "rim1"]
-                            ],
-                        "EXON_OR_THREE_PRIME" : [
-                                ["EXON",  "exon"],
-                                ["3P",  "3'"],
-                                ["5P",  "5'"]
-                            ], 
-                        "SIRNA_SPECIES" : [
-                                ["HUMAN",  "Human"],
-                                ["MOUSE",  "Mouse'"],
-                            ], 
-                        "SIRNA_COMPANY" : [
-                                ["AMBION",  "Ambion"],
-                                ["DHARMACON",  "Dharmacon'"],
-                                ["INVITORGEN",  "Invitrogen'"],
-                                ["MICROSYNTH",  "Microsynth'"],
-                                ["QIAGEN",  "Qiagen'"],
-                                ["GIFT",  "Gift'"]
-                            ], 
-                       "SIRNA_FREEZER_LOCATION" : [
-                                ["BIGLABFREEZER",  "BigLab freezer"],
-                                ["SMALLLAB_BIGFREEZER",  "SmallLab Big freezer'"],
-                                ["FREEZER_G17",  "Freezer G17'"],
-                                ["G93-FRANK",  "G9.3--Frank'"],
-                                ["FREEZER-G17_BOX_NATHALIE",  "Freezer G17 Box Nathalie'"],
-                                ["BOX-THIBAULT-BIGFREEZER-SMALLLAB",  "Box thibault Big freezer small lab'"],
-                                ["BOX-NATHALIE",  "Box Nathalie'"]
-                            ], 
-                       "TRANSFECTION_AGENT" : [
-                                ["FUGENE",  "Fugene"],
-                                ["LIPOFECTAMINE",  "Lipofectamine'"],
-                                ["OLIGOFECTAMINE",  "Oligofectamine'"],
-                                ["RNAIMAX",  "RNAimax'"]
-                            ],                             
-                        "FREEZER" : [
-                                ["G9_FRIDGE-1",  "G9 Fridge 1"],
-                                ["G9_FRIDGE-2",  "G9 Fridge 2"],
-                                ["G9_FREEZER-A",  "-20C Small Peter Lab"],
-                                ["G9_FREEZER-B",  "G9 Freezer B"],
-                                ["G9_FREEZER-C",  "G9 Freezer C"],
-                                ["G10_FREEZER-D",  "G10 Freezer D"],
-                                ["G10_FREEZER-E",  "G10 Freezer E"],
-                                ["G10_FREEZER-F",  "G10 Freezer F"],
-                                ["G10_FREEZER-G",  "G10 Freezer G"],
-                                ["G10_FREEZER-H",  "G10 Freezer H"],
-                                ["G10_FREEZER-I",  "G10 Freezer I"],
-                                ["G10_FRIDGE-3",  "+4C Big Peter Lab"],
-                                ["G10_FRIDGE-4",  "G10 Fridge 4"],
-                                ["G10_FRIDGE-5",  "G10 Fridge 5"],
-                                ["G10_FRIDGE-6",  "G10 Fridge 6"],
-                                ["G10_FRIDGE-7",  "G10 Fridge 7"],
-                                ["G11_FRIDGE-8",  "G10 Fridge 8"],
-                                ["G14_FREEZER-J",  "G14 Freezer J"],
-                                ["G14_FREEZER-K",  "G14 Freezer K"],
-                                ["G14_FREEZER-L",  "G14 Freezer L"],
-                                ["G14_FREEZER-M",  "G14 Freezer M"],
-                                ["G14_FRIDGE-9",  "G14 Fridge 9"],
-                                ["G14_FRIDGE-10",  "G14 Fridge 10"],
-                                ["G17_FRIDGE-11",  "G17 Fridge 11"],
-                                ["G17_FRIDGE-12",  "G17 Fridge 12"],
-                                ["G17_FREEZER-N",  "G17 Freezer N"],
-                                ["USER_BENCH-20",  "Bench -20�C"],
-                                ["USER_BENCH-80",  "Bench -80�C"],
-                                ["USER_BENCH-RT",  "Bench RT"],
-                                ["USER_BENCH",  "Bench"]
-                                    ],
-                         "STORAGE_BOX_SIZE" : [
-                                ["9X9", "9 x 9 box"],
-                                ["8X8", "8 x 8 box"],
-                                ["5X5", "5 x 5 box"],
-                                ["10X10", "10 x 10 box"],
-                                ["10X5", "10 x 5 box"],
-                                ["10X12", "10 x 12 box"]
-                            ],
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/as/initialize-master-data.py b/plasmid/source/core-plugins/petermigration/1/as/initialize-master-data.py
deleted file mode 100644
index 9b5cffbdd1cff6cbded5234eaf3eaa055b68264f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/as/initialize-master-data.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#
-# Copyright 2014 ETH Zuerich, Scientific IT Services
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##
-## Configuration
-##
-PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/juanf/Documents/workspace/openbis/source/core-plugins/petermigration/1/compatibility/";
-#PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/barillac/openbis-peter/servers/core-plugins/petermigration/1/compatibility/";
-
-# MasterDataRegistrationTransaction Class
-import definitions
-import definitionsVoc
-import os
-import copy
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Globals
-##
-vocabulariesCache = {};
-propertiesCache = {};
-samplesCache = {};
-tr = service.transaction()
-
-##
-## API Facade
-##
-def createVocabularyWithTerms(vocabularyCode, terms):
-    vocabulary = tr.createNewVocabulary(vocabularyCode);
-    vocabulary.setChosenFromList(True);
-    addTerms(vocabulary, terms);
-    vocabulariesCache[vocabularyCode] = vocabulary;
-    
-def addTerms(vocabulary, terms):
-    for term in terms:
-        addTermWithLabel(vocabulary, term[0], term[1])
-    
-def addTermWithLabel(vocabulary, termCode, termLabel):
-    newTerm = tr.createNewVocabularyTerm(termCode);
-    newTerm.setLabel(termLabel);
-    vocabulary.addTerm(newTerm);
-    
-def createSampleTypeWithProperties(sampleTypeCode, description, properties):
-    newSampleType = tr.getOrCreateNewSampleType(sampleTypeCode);
-    newSampleType.setDescription(description);
-    newSampleType.setShowParents(True);
-    newSampleType.setAutoGeneratedCode(True);
-    newSampleType.setGeneratedCodePrefix(sampleTypeCode[:3]);
-    addProperties(newSampleType, properties);
-    samplesCache[sampleTypeCode] = newSampleType;
-    
-def createDataSetTypeWithProperties(dataSetCode, description, properties):
-    newDataSet = tr.getOrCreateNewDataSetType(dataSetCode);
-    newDataSet.setDescription(description);
-    addProperties(newDataSet, properties);
-    
-def createExperimentTypeWithProperties(experimentTypeCode, description, properties):
-    newExperiment = tr.getOrCreateNewExperimentType(experimentTypeCode);
-    newExperiment.setDescription(description);
-    addProperties(newExperiment, properties);
-
-def addPropertiesToSamples(sampleTypeCodes, properties):
-    for sampleTypeCode in sampleTypeCodes:
-        sampleType = samplesCache[sampleTypeCode];
-        addProperties(sampleType, properties);
-    
-def addProperties(entity, properties):
-    for property in properties:
-        addProperty(entity, property[0], property[1], property[2], property[3], property[4], property[5], property[6], property[7], property[8]);
-    
-def addProperty(entity, propertyCode, section, propertyLabel, dataType, vocabularyCode, propertyDescription, managedScript, dynamicScript, isMandatory):
-    property = None;
-    
-    if propertyCode in propertiesCache:
-        property = propertiesCache[propertyCode];
-    else:
-        property = createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode);
-    
-    propertyAssignment = tr.assignPropertyType(entity, property);
-    propertyAssignment.setSection(section);
-    propertyAssignment.setMandatory(isMandatory);
-    if managedScript != None:
-        propertyAssignment.setManaged(True);
-        propertyAssignment.setShownEdit(True);
-        propertyAssignment.setScriptName(managedScript);
-    if dynamicScript != None:
-        propertyAssignment.setDynamic(True);
-        propertyAssignment.setShownEdit(True);
-        propertyAssignment.setScriptName(dynamicScript);
-
-def createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode):
-    property = tr.getOrCreateNewPropertyType(propertyCode, dataType);
-    property.setDescription(propertyDescription);
-    property.setLabel(propertyLabel);
-    propertiesCache[propertyCode] = property;
-    if dataType == DataType.CONTROLLEDVOCABULARY:
-        property.setVocabulary(vocabulariesCache[vocabularyCode]);
-    return property;
-
-def addStorageGroups(numGroups, sampleType):
-    for storageIdx in range(1,(numGroups + 1)):
-        storageGroup = definitions.getStorageGroupDefinition();
-        for property in storageGroup:
-            property[0] = property[0] + "_" + str(storageIdx);
-            property[1] = property[1] + " " + str(storageIdx);
-            property[2] = property[2] + " " + str(storageIdx);
-            property[5] = property[5] + " " + str(storageIdx);
-        addPropertiesToSamples([sampleType], storageGroup);
-
-#Valid Script Types: DYNAMIC_PROPERTY, MANAGED_PROPERTY, ENTITY_VALIDATION 
-def createScript(path, name, description, scriptType, entityType):
-    scriptAsString = open(path, 'r').read();
-    script = tr.getOrCreateNewScript(name);
-    script.setName(name);
-    script.setDescription(description);
-    script.setScript(scriptAsString);
-    script.setScriptType(scriptType);
-    script.setEntityForScript(entityType);
-    return script;
-    
-##
-## Managed properties scripts
-##
-commentsScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "comments.py",
-                                  definitions.commentsScriptName,
-                                  "Comments Handler",
-                                  "MANAGED_PROPERTY",
-                                  "SAMPLE");
-
-##
-## Dynamic properties scripts
-##
-adenosineScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "adenosine_count.py",
-                                  definitions.adenosineScriptName,
-                                  "Count number of adenosine in sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-cytosineScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "cytosine_count.py",
-                                  definitions.cytosineScriptName,
-                                  "Count number of cytosine in sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-gcScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "gc.py",
-                                  definitions.gcScriptName,
-                                  "(guanosine+cytosine)*100/length",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-guanosineScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "guanosine_count.py",
-                                  definitions.guanosineScriptName,
-                                  "Count number of guanosine in sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-lengthScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "length.py",
-                                  definitions.lengthScriptName,
-                                  "Count total length of sequence (A+C+T+G+O_nucleotide)",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-nucelotideScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "nucleotide_count.py",
-                                  definitions.nucelotideScriptName,
-                                  "Count number of r,y,m,k,s,w,h,b,d,x,N in sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-thymidineScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "thymidine_count.py",
-                                  definitions.thymidineScriptName,
-                                  "Count number of thymidine in sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-tmScript = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "tm.py",
-                                  definitions.tmScriptName,
-                                  "68.3 + (0.41 * gc) - (600/length)",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-##
-## Vocabulary Types
-##
-for vocabularyCode, vocabularyValues in definitionsVoc.vocabularyDefinitions.iteritems():
-    createVocabularyWithTerms(vocabularyCode, vocabularyValues)
-
-##
-## Experiment Types
-##
-createExperimentTypeWithProperties("DEFAULT_EXPERIMENT", "Default Experiment", definitions.experimentDefinition);
-createExperimentTypeWithProperties("ANTIBODY", "BOX TO HOLD SAMPLES OF THIS TYPE FOR ORGANIZATIONAL PURPOSES", []);
-createExperimentTypeWithProperties("CELL", "BOX TO HOLD SAMPLES OF THIS TYPE FOR ORGANIZATIONAL PURPOSES", []);
-createExperimentTypeWithProperties("STRAIN", "BOX TO HOLD SAMPLES OF THIS TYPE FOR ORGANIZATIONAL PURPOSES", []);
-createExperimentTypeWithProperties("PLASMID", "BOX TO HOLD SAMPLES OF THIS TYPE FOR ORGANIZATIONAL PURPOSES", []);
-createExperimentTypeWithProperties("CHEMICAL", "BOX TO HOLD SAMPLES OF THIS TYPE FOR ORGANIZATIONAL PURPOSES", []);
-createExperimentTypeWithProperties("SIRNA", "BOX TO HOLD SAMPLES OF THIS TYPE FOR ORGANIZATIONAL PURPOSES", []);
-createExperimentTypeWithProperties("OLIGO", "BOX TO HOLD SAMPLES OF THIS TYPE FOR ORGANIZATIONAL PURPOSES", []);
-
-##
-## Sample Types
-##
-createSampleTypeWithProperties("ANTIBODY", "", definitions.antibodyDefinition);
-addStorageGroups(definitions.numberOfStorageGroups, "ANTIBODY");
-createSampleTypeWithProperties("CELL", "", definitions.cellDefinition);
-addStorageGroups(definitions.numberOfStorageGroups, "CELL");
-createSampleTypeWithProperties("STRAIN", "", definitions.strainDefinition);
-addStorageGroups(definitions.numberOfStorageGroups, "STRAIN");
-createSampleTypeWithProperties("PLASMID", "", definitions.plasmidDefinition);
-addStorageGroups(definitions.numberOfStorageGroups, "PLASMID");
-createSampleTypeWithProperties("OLIGO", "", definitions.oligoDefinition);
-addStorageGroups(definitions.numberOfStorageGroups, "OLIGO");
-createSampleTypeWithProperties("CHEMICAL", "", definitions.chemicalDefinition);
-createSampleTypeWithProperties("SIRNA", "", definitions.siRNADefinition);
-
-##
-## Data set Types
-##
-createDataSetTypeWithProperties("DOCUMENT", "", definitions.documentDefinition);
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/adenosine_count.py b/plasmid/source/core-plugins/petermigration/1/compatibility/adenosine_count.py
deleted file mode 100644
index 58363afbe1c2b60133113de10b140a4ace143e99..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/adenosine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('A')+entity.propertyValue('SEQUENCE').count('a')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/comments.py b/plasmid/source/core-plugins/petermigration/1/compatibility/comments.py
deleted file mode 100644
index 02c50d2364afd8bf0dce2d50297c6bff2ccb35bf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/comments.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from java.util import Date
-
-"""
-Example XML property value handled by this script:
-<root>
-  <commentEntry date="2011-02-20 14:15:28 GMT+01:00" person="buczekp">Here is the 1st  entry text.<commentEntry>
-  <commentEntry date="2011-02-20 14:16:28 GMT+01:00" person="kohleman">Here is the 2nd  entry text - a warning!<commentEntry>
-  <commentEntry date="2011-02-20 14:17:28 GMT+01:00" person="tpylak">Here is the 3rd  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:18:28 GMT+01:00" person="brinn">Here is the 4th  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:19:28 GMT+01:00" person="felmer">Here is the 5th  entry text - a warning!<commentEntry>
-</root>
-"""
-  
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-
-""" labels of table columns and corresponding input fields """
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-  
-""" names of attributes of XML elements for comment entries """
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-  
-""" action labels (shown as button labels in UI) """
-ADD_ACTION_LABEL = 'Add Comment Entry'
-EDIT_ACTION_LABEL = 'Edit'
-DELETE_ACTION_LABEL = 'Delete'
-  
-  
-def configureUI():
-    """Create table builder and add headers of columns."""
-    builder = createTableBuilder()
-    builder.addHeader(DATE_LABEL, 250) # date and comment text values are long, override default width (150)
-    builder.addHeader(PERSON_LABEL)
-    builder.addHeader(COMMENT_TEXT_LABEL, 400)
-      
-    """
-       Extract XML elements from property value to a Python list.
-       For each element (comment entry) add add a row to the table.  
-    """
-    elements = list(propertyConverter().convertToElements(property))
-    for commentEntry in elements:
-        row = builder.addRow()
-        row.setCell(DATE_LABEL, Date(long(commentEntry.getAttribute(DATE_ATTRIBUTE))))
-        row.setCell(PERSON_LABEL, commentEntry.getAttribute(PERSON_ATTRIBUTE))
-        row.setCell(COMMENT_TEXT_LABEL, commentEntry.getData())
-  
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(builder.getTableModel())
-  
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new comment entry,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add a new comment entry:')
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL)\
-                            .setMandatory(True)
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected comment entry,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected comment entry:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL).setMandatory(True)
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(COMMENT_TEXT_LABEL, COMMENT_TEXT_LABEL)
-  
-    """
-       3. delete selected comment entries.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected comment entry?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-  
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new comment entry element with values from input fields
-           and add it to existing elements.
-        """
-        element = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-        """Fill element attributes with appropriate values."""
-        element.addAttribute(DATE_ATTRIBUTE, str(Date().getTime()))            # current date
-        element.addAttribute(PERSON_ATTRIBUTE, action.getPerson().getUserId()) # invoker the action
-        """Retrieve values from input fields filled by user on the client side."""
-
-        """Set comment text as a text element, not an attribute."""
-        element.setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        """Add the new entry to the end of the element list."""
-        elements.append(element)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the comment entry element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        
-        selectedRowId = action.getSelectedRows()[0]
-        xmlUser = elements[selectedRowId].getAttribute(PERSON_ATTRIBUTE)
-        if action.getPerson().getUserId() == xmlUser:
-          elements[selectedRowId].setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        else:
-          raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the entries that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-              xmlUser = elements[rowId].getAttribute(PERSON_ATTRIBUTE)
-              if action.getPerson().getUserId() == xmlUser:
-                elements.pop(rowId)
-              else:
-                raise ValidationException('Comment creator and current user differ:\n' +  str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def _createCommentEntry(comment_text_list):
-    #if comment_text_list is not None:
-    commentEntry = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-                     
-    commentEntry.addAttribute(PERSON_ATTRIBUTE, person.getUserId())
-    commentEntry.addAttribute(DATE_ATTRIBUTE,str(Date().getTime()))
-    commentEntry.setData(comment_text_list)
-    return commentEntry   
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [COMMENT_ENTRY_ELEMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        comment_text_list = item.get('COMMENTENTRY')
-        sampleLink = _createCommentEntry(comment_text_list)
-        elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        commentEntry = _createCommentEntry(input)
-        elements.append(commentEntry)
-        property.value = propertyConverter().convertToString(elements)
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/cytosine_count.py b/plasmid/source/core-plugins/petermigration/1/compatibility/cytosine_count.py
deleted file mode 100644
index faed851214f3a13d5fd25c093a6b44b2fa3ea6c0..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/cytosine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('C')+entity.propertyValue('SEQUENCE').count('c')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/gc.py b/plasmid/source/core-plugins/petermigration/1/compatibility/gc.py
deleted file mode 100644
index 5067337f62e736ee766c3a087f778ea51155b3f0..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/gc.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result = (len(re.findall("G|g|C|c", entity.propertyValue('SEQUENCE'))) * 100)/len(re.findall("A|a|C|c|G|g|T|t|R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE')))	
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/guanosine_count.py b/plasmid/source/core-plugins/petermigration/1/compatibility/guanosine_count.py
deleted file mode 100644
index 913b9db58cc74a5804779a4b2d9dcddd5ab12290..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/guanosine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('G')+entity.propertyValue('SEQUENCE').count('g')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/length.py b/plasmid/source/core-plugins/petermigration/1/compatibility/length.py
deleted file mode 100644
index 13aedef6fbb96d8392fad958d3defcbd371b539b..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/length.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result = len(re.findall("A|a|C|c|G|g|T|t|R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE')))	
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/nucleotide_count.py b/plasmid/source/core-plugins/petermigration/1/compatibility/nucleotide_count.py
deleted file mode 100644
index e7630820e04b82ee92614b9951711a6343a8ec58..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/nucleotide_count.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result = len(re.findall("R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE')))	
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/thymidine_count.py b/plasmid/source/core-plugins/petermigration/1/compatibility/thymidine_count.py
deleted file mode 100644
index 9d9db9385a916e533b74363d60f9b2acefecb8aa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/thymidine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('T')+entity.propertyValue('SEQUENCE').count('t')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/compatibility/tm.py b/plasmid/source/core-plugins/petermigration/1/compatibility/tm.py
deleted file mode 100644
index a841d384a3226c09d47d7e72cccd7cb8aa52cc56..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/compatibility/tm.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result =68.3+ (0.41* float(len(re.findall("G|g|C|c", entity.propertyValue('SEQUENCE'))) * 100)/float(len(re.findall("A|a|C|c|G|g|T|t|R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE'))))) -(600/float(len(re.findall("A|a|C|c|G|g|T|t|R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE')))))		
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/definitions.py b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/definitions.py
deleted file mode 120000
index d16e42850d35ea24a66064d8b534deebedc04f56..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/definitions.py
+++ /dev/null
@@ -1 +0,0 @@
-../../../as/definitions.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/definitionsVoc.py b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/definitionsVoc.py
deleted file mode 120000
index 1883a7061938c66144390382f1839653b6ca37fa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/definitionsVoc.py
+++ /dev/null
@@ -1 +0,0 @@
-../../../as/definitionsVoc.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/doc/fm11_odbc_jdbc_guide_en.pdf b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/doc/fm11_odbc_jdbc_guide_en.pdf
deleted file mode 100644
index 36aaa0f12220dbde26b7ece4e3b78914087893b0..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/doc/fm11_odbc_jdbc_guide_en.pdf and /dev/null differ
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/FileMakerMain.java b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/FileMakerMain.java
deleted file mode 100644
index a2206338c1ccb79267396fbe2751fbb529304ab8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/FileMakerMain.java
+++ /dev/null
@@ -1,77 +0,0 @@
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-//  STEP By Step:
-//  1. Open the file maker file with file maker pro
-//  2. Go to "File -> Sharing -> ODBC/JDBC" and turn sharing on
-//  3. You can go to see the names of the tables and field to "File -> Manage -> Database"
-//  Without closing file maker pro you can run this script, modify it as needed
-//  More info at http://www.filemaker.com/support/product/docs/fmp/fm11_odbc_jdbc_guide_en.pdf
-
-public class FileMakerMain
-{
-    // NOTE: FileMaker is so dump that you can't get the fileName and the fileData on the same query, the file data will return null, so we make a second call for this
-    public static final String GET_DOCUMENTS = "SELECT CAST(file AS VARCHAR(1000)) AS fileName, info, serial FROM documents";
-    public static final String GET_DOCUMENT_DATA = "SELECT GetAs(file, 'FILE') AS fileData FROM documents WHERE serial = ?";
-    
-    static class Document {
-        String fileName;
-        String info;
-        String serial;
-        
-        public String toString()
-        {
-            return fileName + " " + info;
-        }
-    }
-    
-    public static List<Document> getDocuments(Connection connection) throws SQLException {
-        List<Document> documents = new ArrayList<Document>();
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENTS);
-        ResultSet result = preparedStatement.executeQuery();
-        
-        while(result.next()) {
-            Document document = new Document();
-            document.fileName = result.getString("fileName");
-            document.info = result.getString("info");
-            document.serial = result.getString("serial");
-            documents.add(document);
-        }
-        result.close();
-        preparedStatement.close();
-        return documents;
-    }
-    
-    public static byte[] getFile(Connection connection, Document document) throws SQLException {
-        byte[] bytes = {};
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENT_DATA);
-        preparedStatement.setString(1, document.serial);
-        ResultSet result = preparedStatement.executeQuery();
-        if(result.next()) {
-            byte[] value = result.getBytes("fileData");
-            if(value != null) {
-                bytes = value;
-            }
-        }
-        result.close();
-        preparedStatement.close();
-        return bytes;
-    }
-    
-    public static void main(String[] args) throws Exception {
-        Class.forName("com.filemaker.jdbc.Driver").newInstance();
-        Connection connection = DriverManager.getConnection("jdbc:filemaker://127.0.0.1/BOXIT_documents_Peter.fmp12","designer", "seattle");
-        
-        for(Document document: getDocuments(connection)) {
-            byte[] bytes = getFile(connection, document);
-            System.out.println(document + " " + bytes.length);
-        }
-        connection.close();
-    }
-}
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/fmjdbc.jar b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/fmjdbc.jar
deleted file mode 100644
index 34cae1d60b916205b9039fe765c971229cef1a32..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/fmjdbc.jar and /dev/null differ
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/fmjdbc12.jar b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/fmjdbc12.jar
deleted file mode 100644
index b73e996fe85d7bc2ce5a177d37fe17f46a7f0cbb..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/lib/fmjdbc12.jar and /dev/null differ
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/migration.py b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/migration.py
deleted file mode 100644
index 5dd5b146358140d2b0281597f87696fe45bd6e13..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/migration.py
+++ /dev/null
@@ -1,650 +0,0 @@
-# some_file.py
-import sys
-import definitions
-import definitionsVoc
-import re
-import random
-from datetime import datetime
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria, SearchSubCriteria
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-import java.lang.Class as Class
-import java.sql.DriverManager as DriverManager
-
-##
-## Generic Process Method
-##
-notMigratedEntities = {
-                       "ENTITY_TYPE" : {"ENTITY ID" : {"ERROR" : "TIMES" }}
-                      }
-
-def addNotMigratedEntity(type, entityID, error):
-    if type not in notMigratedEntities:
-        notMigratedEntities[type] = {}
-    if entityID not in notMigratedEntities[type]:
-        notMigratedEntities[type][entityID] = {}
-    if error not in notMigratedEntities[type][entityID]:
-        notMigratedEntities[type][entityID][error] = 1
-    else:
-        notMigratedEntities[type][entityID][error] += 1
-
-def printNotMigratedEntities():
-    print "--- Not Migrated Entities Report"
-    for type in notMigratedEntities:
-        print "Type: [" + str(type) + "]"
-        for id in notMigratedEntities[type]:
-            for error in notMigratedEntities[type][id]:
-                print "Id: [" + str(id) + "] Error: " + str(error) + " Times: " + str(notMigratedEntities[type][id][error])
-    print "---"
-
-def process(tr):
-    print "START!"
-    createDataHierarchy(tr)
-    for adaptor in adaptors:
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] START"
-        while adaptor.next():
-            entity = adaptor.getEntity()
-            print "* ENTITY [" + str(entity.getIdentifier(tr)) + "]"
-            try:
-                if not entity.isInOpenBIS(tr):
-                    entity.write(tr)
-                    #print entity.getIdentifier(tr) + " - Updated"
-                else:
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), "Already in openBIS")
-            except Exception, error:
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), str(error.args))
-                    #print entity.getIdentifier(tr) + " - Already up to date"
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] FINISH"
-    print "REPORT START"
-    printNotMigratedEntities()
-    definitionsVoc.printCreatedTerms()
-    print "REPORT FINISH"
-    print "FINISH!"
-
-##
-## Help Methods
-##
-def setEntityProperties(tr, definition, entity, properties):
-    for propertyCode, propertyValue in properties.iteritems():
-            propertyDefinition = definitions.getPropertyDefinitionByCode(definition, propertyCode)
-            if propertyValue is not None:
-                propertyValue =  unicode(propertyValue)
-
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.TIMESTAMP and propertyValue is not None:
-                date_val = datetime.strptime(propertyValue, "%Y")
-                propertyValue = datetime.strftime(date_val, "%Y-%m-%d")
-            
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.CONTROLLEDVOCABULARY and propertyValue is not None:
-                possiblePropertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel(propertyDefinition[4], propertyValue)
-                if possiblePropertyValue is not None:
-                    propertyValue = possiblePropertyValue
-                else:  #We rely on the Add Hock Terms if is None, since there is no API we create a new one
-                    #Create new vocabulary term
-                    codeToUse = re.sub(r'\W+','_',propertyValue)
-                    labelToUse = propertyValue
-                    if len(codeToUse) is 0:
-                        codeToUse = "None" + str(random.random())
-                    if len(codeToUse) > 60:
-                        codeToUse = codeToUse[:50]
-                    #Uses new vocabulary term
-                    newTerm = definitionsVoc.createVocabularyTerm(tr, propertyDefinition[4], codeToUse, labelToUse)
-                    propertyValue = newTerm.getCode()
-                    print "* WARNING ENTITY [" + entity.getCode() + "]: for Vocabulary [" + propertyDefinition[4] + "], found value not in list: [" + repr(labelToUse) + "]. Created new term with code [" + codeToUse + "]"
-            
-            if propertyDefinition is not None: #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-##
-## Generic Pattern
-##
-class EntityAdaptor:
-    entities = None
-    entitiesIdx = None
-    definition = None
-    
-    def init(self):
-        self.entities = []
-        self.entitiesIdx = -1
-        pass
-    
-    def next(self):
-        if self.entities is None and self.entitiesIdx is None:
-            self.init()
-        self.entitiesIdx += 1
-        if len(self.entities) > self.entitiesIdx:
-            return True
-        else:
-            return False
-    
-    def addEntity(self, values):
-        self.entities.append(OpenBISDTO(values, self.definition))
-    
-    def getEntity(self):
-        return self.entities[self.entitiesIdx]
-    
-class OpenBISDTO:
-    values = {}
-    definition = None
-    
-    def __init__(self, values, definition):
-        self.values = values
-        self.definition = definition
-    
-    def getIdentifier(self, tr):
-        pass
-    
-    def isInOpenBIS(self, tr):
-        pass
-    
-    def write(self, tr):
-        pass
-
-##
-## Costumer specific logic: generic part
-##
-experimentCache = {}
-sampleCache = {}
-sampleID2Sample = {}
-
-def getExperimentForUpdate(experimentIdentifier, experimentType, tr):
-    if experimentIdentifier not in experimentCache:
-        #print "Cache failed " + experimentIdentifier + ":" + str(experimentType)
-        experiment = tr.getExperimentForUpdate(experimentIdentifier)
-        if experiment is None and experimentType is not None:
-            #print "Cache Create " + experimentIdentifier + ":" + str(experimentType)
-            experiment = tr.createNewExperiment(experimentIdentifier,         experimentType)
-        if experiment is not None:
-             experimentCache[experimentIdentifier] = experiment
-    else:
-        pass
-        #print "Cache hit " + experimentIdentifier + ":" + str(experimentType)
-    if experimentIdentifier not in experimentCache:
-         return None
-    else:
-         return experimentCache[experimentIdentifier]
-     
-def getSampleForUpdate(sampleIdentifier, sampleType, tr):
-    if sampleIdentifier not in sampleCache:
-         #print "Cache failed " + sampleIdentifier + ":" + str(sampleType)
-         sample = tr.getSampleForUpdate(sampleIdentifier)
-         if sample is None and sampleType is not None:
-             #print "Cache Create " + sampleIdentifier + ":" + str(sampleType)
-             if sampleType == "ANTIBODY":
-             	experiment = getExperimentForUpdate("/MATERIALS/REAGENTS/ANTIBODIES", sampleType, tr)
-             elif sampleType == "CELL":
-             	experiment = getExperimentForUpdate("/MATERIALS/CELL_LINES/CELL_LINE_COLLECTION_1", sampleType, tr)             
-             elif sampleType == "STRAIN":
-             	experiment = getExperimentForUpdate("/MATERIALS/YEASTS/YEAST_COLLECTION", sampleType, tr)              
-             elif sampleType == "PLASMID":
-             	experiment = getExperimentForUpdate("/MATERIALS/PLASMIDS/PLASMID_COLLECTION_1", sampleType, tr)              
-             elif sampleType == "CHEMICAL":
-             	experiment = getExperimentForUpdate("/MATERIALS/REAGENTS/CHEMICALS", sampleType, tr) 
-             elif sampleType == "SIRNA":
-             	experiment = getExperimentForUpdate("/MATERIALS/POLYNUCLEOTIDES/RNA_COLLECTION_1", sampleType, tr)              	
-             elif sampleType == "OLIGO":
-             	experiment = getExperimentForUpdate("/MATERIALS/POLYNUCLEOTIDES/OLIGO_COLLECTION_1", sampleType, tr)              	
-             sample = tr.createNewSample(sampleIdentifier, sampleType)
-             sample.setExperiment(experiment)
-         if sample is not None:
-             sampleCache[sampleIdentifier] = sample
-    else:
-        pass
-        #print "Cache hit " + sampleIdentifier + ":" + str(sampleType)
-        
-    if sampleIdentifier not in sampleCache:
-         return None
-    else:
-         return sampleCache[sampleIdentifier]
-
-class FileMakerEntityAdaptor(EntityAdaptor):
-    connection = None
-    selectQuery = None
-    
-    def __init__(self, fileMakerConnString, fileMakerUser, fileMakerPass, db):
-        Class.forName("com.filemaker.jdbc.Driver").newInstance()
-        self.connection = DriverManager.getConnection(fileMakerConnString+db,fileMakerUser, fileMakerPass)
-    
-    def init(self):
-        EntityAdaptor.init(self)
-        
-        preparedStatement = self.connection.prepareStatement(self.selectQuery)
-        result = preparedStatement.executeQuery()
-        
-        while result.next():
-            values = {}
-            for property in self.definition:
-                values[property[0]] = result.getString(property[2])
-            self.addEntity(values)
-        result.close()
-        preparedStatement.close()
-
-##
-## Customer specific logic: different sample types
-##
-class FMPeterOpenBISDTO(OpenBISDTO):
-        def isSampleCacheable(self):
-            return True
-        
-        def isInOpenBIS(self, tr):
-            code = self.getIdentifier(tr)
-            if (code is not None) and (' ' not in code):
-                if self.isSampleCacheable():
-                    sampleID2Sample[self.values["NAME"]] = self.values
-                sample = getSampleForUpdate("/MATERIALS/"+code, None, tr)
-                if sample is not None:
-                    lastModificationData = self.values["MODIFICATION_DATE"].strip()
-                    lastModificationData = str(datetime.strptime(lastModificationData, "%Y-%m-%d"))[:10]
-                    lastModificationOpenBIS = sample.getPropertyValue("MODIFICATION_DATE")[:10]
-                    return lastModificationOpenBIS == lastModificationData
-                else :
-                    return False
-            else:
-                print "* ERROR [" + str(code) + "] - Invalid Code found for '" + self.__class__.__name__ + "'"
-                raise Exception('Invalid Code found ' + str(code))
-
-class FMPeterBoxAdaptor(FileMakerEntityAdaptor):
-    selectBoxQuery = None
-    entityIdFieldName = None
-    entityCodeFieldName = None
-    
-    def addEntity(self, values):
-        self.entities.append(FMPeterEntityBoxOpenBISDTO(values, self.definition))
-        
-    def init(self):
-        #print "Reading boxes for: " + self.__class__.__name__
-        emptyBox = 0
-        boxes = {}
-        EntityAdaptor.init(self)
-        preparedStatement = self.connection.prepareStatement(self.selectBoxQuery)
-        result = preparedStatement.executeQuery()
-        while result.next():
-            entityId = unicode(result.getString(self.entityIdFieldName))
-            if entityId is not None:
-                if entityId in sampleID2Sample:
-                    antibodyNumber = sampleID2Sample[entityId][self.entityCodeFieldName]
-                    if antibodyNumber is not None:
-                        values = {}
-                        values["STORAGE_NAME"] = result.getString("location")
-                        values["STORAGE_ROW"] = "1"
-                        values["STORAGE_COLUMN"] = "1"
-                        values["STORAGE_BOX_NAME"] = result.getString("box label")
-                        values["STORAGE_BOX_SIZE"] = result.getString("box size")
-                        values["STORAGE_USER"] = result.getString("owner")
-                        values["STORAGE_BOX_POSITION"] = result.getString("position")
-                        
-                        allBoxes = []
-                        if antibodyNumber in boxes:
-                            allBoxes = boxes[antibodyNumber]
-                        else:
-                            boxes[antibodyNumber] = allBoxes
-                        allBoxes.append(values)
-                else:
-                    #The antibody is not there. What the *#%$&
-                    emptyBox += 1
-            else:
-                #The antibody is not there. What the *#%$&
-                emptyBox += 1
-        
-        print "- ERROR ADAPTOR Boxes positions with empty entityId for " + self.__class__.__name__ + ":" + str(emptyBox)
-        
-        for entiyCode, allBoxes in boxes.iteritems():
-            self.addEntity({
-                        "*CODE" : entiyCode,
-                        "*BOXESLIST" : allBoxes
-            })
-        
-        result.close()
-        preparedStatement.close()
-
-class FMPeterEntityBoxOpenBISDTO(OpenBISDTO):
-    def getIdentifier(self, tr):
-        return self.values["*CODE"]
-    
-    def write(self, tr):
-        sample = getSampleForUpdate("/MATERIALS/"+self.values["*CODE"], None, tr)
-        print "* INFO Boxes size: " + str(len(self.values["*BOXESLIST"]))
-        #Delete old boxes
-        for boxNum in range(1, definitions.numberOfStorageGroups+1):
-            for propertyCode in definitions.getStorageGroupPropertyCodes():
-                sample.setPropertyValue(propertyCode + "_" + str(boxNum), None)
-        
-        #Add new boxes
-        boxNum = 0
-        for box in self.values["*BOXESLIST"]:
-            boxNum += 1
-            for propertyCode, propertyValue in box.iteritems():
-                if propertyCode == "STORAGE_NAME":
-                    freezerName = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel("FREEZER", propertyValue)
-                    if freezerName is None:
-                        #print repr("NOT FOUND FEEZER: " + self.values["ANTIBODY_ID_NR"] + " : '" + unicode(propertyValue) + "'")
-                        propertyValue = None
-                    else:
-                        propertyValue = freezerName
-                
-                if propertyValue is not None:
-                    propertyValue =  unicode(propertyValue)
-                    sample.setPropertyValue(propertyCode + "_" + str(boxNum), propertyValue)
-    
-    def isBoxPressent(self, boxSignature, tr):
-        sample = getSampleForUpdate("/MATERIALS/"+self.values["*CODE"], None, tr)
-        if sample is not None:
-            for boxNum in range(1, definitions.numberOfStorageGroups+1):
-                storedSignature = "";
-                for propertyCode in definitions.getStorageGroupPropertyCodes():
-                    propertyValue = sample.getPropertyValue(propertyCode + "_" + str(boxNum))
-                    if propertyValue is not None:
-                        propertyValue = unicode(propertyValue)
-                        storedSignature += propertyValue
-                if storedSignature == boxSignature:
-                    #print "Found Box " + storedSignature.encode('ascii', 'ignore')
-                    return True
-        return False
-    
-    def isInOpenBIS(self, tr):
-        for box in self.values["*BOXESLIST"]:
-            boxSignature = "";
-            for propertyCode in definitions.getStorageGroupPropertyCodes():
-                propertyValue = box[propertyCode]
-                if propertyCode == "STORAGE_NAME":
-                    propertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel("FREEZER", propertyValue)
-                if propertyCode == "STORAGE_USER":
-                    propertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel("LAB_MEMBERS_INITIALS", propertyValue)
-                    
-                if propertyValue is not None:
-                    propertyValue = unicode(propertyValue)
-                    boxSignature += propertyValue
-            if not self.isBoxPressent(boxSignature, tr):
-                return False
-        return True
-##
-## Antibodies
-##
-class AntibodyAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"boxit antibodies\""
-        self.definition = definitions.antibodyDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(AntibodyOpenBISDTO(values, self.definition))
-        
-class AntibodyOpenBISDTO(FMPeterOpenBISDTO):
-    def write(self, tr):
-        sample = getSampleForUpdate("/MATERIALS/"+self.values["ANTIBODY_ID_NR"],"ANTIBODY", tr)
-        setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        return self.values["ANTIBODY_ID_NR"]
-    
-class AntibodyBoxAdaptor(FMPeterBoxAdaptor):
-    selectBoxQuery = "SELECT * FROM \"antibody boxes\""
-    entityIdFieldName = "antibody ID"
-    entityCodeFieldName = "ANTIBODY_ID_NR"
-
-##
-## Cells
-##
-class CellAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"boxit cells\""
-        self.definition = definitions.cellDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(CellOpenBISDTO(values, self.definition))
-        
-class CellOpenBISDTO(FMPeterOpenBISDTO):
-    def write(self, tr):
-        code = self.values["CELL_ID_NR_COPY"]
-        if code is not None and code.startswith("c_"):
-            sample = getSampleForUpdate("/MATERIALS/"+code,"CELL", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        code = self.values["CELL_ID_NR_COPY"]
-        return code
-
-class CellBoxAdaptor(FMPeterBoxAdaptor):
-    selectBoxQuery = "SELECT * FROM \"cell boxes\""
-    entityIdFieldName = "cell ID"
-    entityCodeFieldName = "CELL_ID_NR_COPY"
-
-##
-## Strains
-##
-class StrainAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"boxit strains\""
-        self.definition = definitions.strainDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(StrainOpenBISDTO(values, self.definition))
-        
-class StrainOpenBISDTO(FMPeterOpenBISDTO):
-    def write(self, tr):
-        code = self.values["STRAIN_ID_NR"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"STRAIN", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        code = self.values["STRAIN_ID_NR"]
-        return code
-
-class StrainBoxAdaptor(FMPeterBoxAdaptor):
-    selectBoxQuery = "SELECT * FROM \"strain boxes\""
-    entityIdFieldName = "strain ID"
-    entityCodeFieldName = "STRAIN_ID_NR"
-##
-## Plasmids
-##
-class PlasmidAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"boxit plasmids\""
-        self.definition = definitions.plasmidDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(PlasmidOpenBISDTO(values, self.definition))
-        
-class PlasmidOpenBISDTO(FMPeterOpenBISDTO):
-    def write(self, tr):
-        code = self.values["PLASMID_ID_NR"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"PLASMID", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        code = self.values["PLASMID_ID_NR"]
-        return code
-
-class PlasmidBoxAdaptor(FMPeterBoxAdaptor):
-    selectBoxQuery = "SELECT * FROM \"plasmid boxes\""
-    entityIdFieldName = "plasmid ID"
-    entityCodeFieldName = "PLASMID_ID_NR"
-
-##
-## Oligos
-##
-class OligoAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"boxit oligos\""
-        self.definition = definitions.oligoDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(OligoOpenBISDTO(values, self.definition))
-        
-class OligoOpenBISDTO(FMPeterOpenBISDTO):
-    def write(self, tr):
-        code = self.values["OLIGO_ID_NR"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"OLIGO", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        code = self.values["OLIGO_ID_NR"]
-        return code
-
-class OligoBoxAdaptor(FMPeterBoxAdaptor):
-    selectBoxQuery = "SELECT * FROM \"oligo boxes\""
-    entityIdFieldName = "oligo ID"
-    entityCodeFieldName = "OLIGO_ID_NR"
-
-##
-## Chemical
-##
-class ChemicalAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Chemicals\""
-        self.definition = definitions.chemicalDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(ChemicalOpenBISDTO(values, self.definition))
-        
-class ChemicalOpenBISDTO(FMPeterOpenBISDTO):
-    def isSampleCacheable(self):
-        return False
-        
-    def write(self, tr):
-        code = "CHEM_" + self.values["RECORD_NUMBER"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"CHEMICAL", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        code = "CHEM_" + self.values["RECORD_NUMBER"]
-        return code
-
-##
-## Sirna
-##
-class SirnaAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"siRNA\""
-        self.definition = definitions.siRNADefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(SirnaOpenBISDTO(values, self.definition))
-        
-class SirnaOpenBISDTO(FMPeterOpenBISDTO):
-    def isSampleCacheable(self):
-            return False
-    
-    def write(self, tr):
-        code = "SI_" + self.values["SIRNA_OLIGONUMBER"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"SIRNA", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        code = "SI_" +self.values["SIRNA_OLIGONUMBER"]
-        return code
-
-##
-## Documents
-##
-class DocumentsAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT CAST(file AS VARCHAR(1000)) AS file, info, id_nr, serial, \"date created\", \"date modified\" FROM documents"
-        self.definition = definitions.documentDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        preparedStatement = self.connection.prepareStatement("SELECT GetAs(file, 'FILE') AS fileData FROM documents WHERE serial = ?");
-        preparedStatement.setString(1, values["SERIAL"]);
-        result = preparedStatement.executeQuery();
-        
-        if result.next():
-            fileData = result.getBytes("fileData");
-            values["*DATA"] = fileData
-        
-        self.entities.append(DocumentOpenBISDTO(values, self.definition))
-
-class DocumentOpenBISDTO(OpenBISDTO):
-    def write(self, tr):
-        sampleIdentifier = "/MATERIALS/"+self.values["ID_NR"];
-        dataSetSample = getSampleForUpdate(sampleIdentifier, None, tr)
-        if dataSetSample is not None and self.values["*DATA"] is not None and self.values["FILE"] is not None:
-            print "* INFO DATASET CREATION FOR SERIAL " +  self.values["SERIAL"] + " WITH FILE " + self.values["FILE"]
-            dataSet = tr.createNewDataSet("DOCUMENT")
-            dataSet.setSample(dataSetSample)
-            setEntityProperties(tr, self.definition, dataSet, self.values)
-            absolutePath = tr.createNewFile(dataSet, self.values["FILE"].replace("/", "_"))
-            f = open(absolutePath, 'wb')
-            f.write(self.values["*DATA"])
-            f.close()
-            #incoming = tr.getIncoming()
-            #tr.moveFile(incoming.getAbsolutePath(), dataSet)
-        else:
-            if dataSetSample is None:
-                print "* ERROR No sample found for document"
-                raise Exception('No sample found for document')
-            if self.values["*DATA"] is None:
-                print "* ERROR No Data found for file"
-                raise Exception('No Data found for file')
-            if self.values["FILE"] is None:
-                print "* ERROR No file name found for file"
-                raise Exception('No file name found for file')
-    
-    def getIdentifier(self, tr):
-        return self.values["SERIAL"]
-    
-    def getDocumentBySerial(self, tr, serial):
-        criteria = SearchCriteria()
-        criteria.setOperator(criteria.SearchOperator.MATCH_ANY_CLAUSES)
-        criteria.addMatchClause(criteria.MatchClause.createAttributeMatch(criteria.MatchClauseAttribute.TYPE, "DOCUMENT"))
-        criteria.addMatchClause(criteria.MatchClause.createPropertyMatch("SERIAL", serial))
-        datasets = tr.getSearchService().searchForDataSets(criteria)
-        if datasets:
-            return datasets[0]
-        else:
-            return None
-    
-    def isInOpenBIS(self, tr):
-        dataset = self.getDocumentBySerial(tr, self.values["SERIAL"])
-        return dataset is not None
-        
-#fmConnString = "jdbc:filemaker://127.0.0.1/"
-fmConnString = "jdbc:filemaker://fm.ethz.ch/"
-fmUser= "designer"
-fmPass = "seattle"
-
-adaptors = [ 
-            AntibodyAdaptor(fmConnString, fmUser, fmPass, "BOXIT_antibodies_Peter"), 
-            AntibodyBoxAdaptor(fmConnString, fmUser, fmPass, "BOXIT_antibody_boxes_Peter"),
-            PlasmidAdaptor(fmConnString, fmUser, fmPass, "BOXIT_plasmids_Peter"),
-            PlasmidBoxAdaptor(fmConnString, fmUser, fmPass, "BOXIT_plasmid_boxes_Peter"),
-            StrainAdaptor(fmConnString, fmUser, fmPass, "BOXIT_strains_Peter"),
-            StrainBoxAdaptor(fmConnString, fmUser, fmPass, "BOXIT_strain_boxes_Peter"),
-            OligoAdaptor(fmConnString, fmUser, fmPass, "BOXIT_oligos_Peter"),
-            OligoBoxAdaptor(fmConnString, fmUser, fmPass, "BOXIT_oligo_boxes_Peter"),
-            CellAdaptor(fmConnString, fmUser, fmPass, "BOXIT_cells_Peter"),
-            CellBoxAdaptor(fmConnString, fmUser, fmPass, "BOXIT_cell_boxes_Peter"),
-            SirnaAdaptor(fmConnString, fmUser, fmPass, "BOXIT_Main_Menu_Peter"),
-            ChemicalAdaptor(fmConnString, fmUser, fmPass, "BOXIT_Main_Menu_Peter"),
-            DocumentsAdaptor(fmConnString, fmUser, fmPass, "BOXIT_documents_Peter")
-             ]
-           
-            
-            
-def createDataHierarchy(tr):
-    inventorySpace = tr.getSpace("MATERIALS")
-    if inventorySpace == None:
-        tr.createNewSpace("MATERIALS", None)
-        tr.createNewProject("/MATERIALS/REAGENTS")
-        tr.createNewProject("/MATERIALS/CELL_LINES")
-        tr.createNewProject("/MATERIALS/POLYNUCLEOTIDES")
-        tr.createNewProject("/MATERIALS/PLASMIDS")
-        tr.createNewProject("/MATERIALS/YEASTS")        
-        
-        
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/plugin.properties b/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/plugin.properties
deleted file mode 100644
index 54f2044ddda7bb67c827931911974a3ed40540c7..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/1/dss/drop-boxes/petermigration/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path = migration.py
-dropbox-name = petermigration
-incoming-dir = ${root-dir}/petermigration
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/2/as/definitions.py b/plasmid/source/core-plugins/petermigration/2/as/definitions.py
deleted file mode 120000
index 9d9f64edb4d7ca720007f93151f62aa62c34c41a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/2/as/definitions.py
+++ /dev/null
@@ -1 +0,0 @@
-../../1/as/definitions.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/2/as/definitionsVoc.py b/plasmid/source/core-plugins/petermigration/2/as/definitionsVoc.py
deleted file mode 120000
index 57641c7dbd61cc574c3d3049bca32465429ce449..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/2/as/definitionsVoc.py
+++ /dev/null
@@ -1 +0,0 @@
-../../1/as/definitionsVoc.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/2/as/initialize-master-data.py b/plasmid/source/core-plugins/petermigration/2/as/initialize-master-data.py
deleted file mode 100644
index 8483198d714690357e60ba5d59c7ed43805d2678..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/2/as/initialize-master-data.py
+++ /dev/null
@@ -1,175 +0,0 @@
-#
-# Copyright 2014 ETH Zuerich, Scientific IT Services
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# MasterDataRegistrationTransaction Class
-import definitions
-import definitionsVoc
-import os
-import copy
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Globals
-##
-vocabulariesCache = {};
-propertiesCache = {};
-samplesCache = {};
-tr = service.transaction()
-
-##
-## API Facade
-##
-def createVocabularyWithTerms(vocabularyCode, terms):
-    vocabulary = tr.createNewVocabulary(vocabularyCode);
-    vocabulary.setChosenFromList(True);
-    addTerms(vocabulary, terms);
-    vocabulariesCache[vocabularyCode] = vocabulary;
-    
-def addTerms(vocabulary, terms):
-    for term in terms:
-        addTermWithLabel(vocabulary, term[0], term[1])
-    
-def addTermWithLabel(vocabulary, termCode, termLabel):
-    newTerm = tr.createNewVocabularyTerm(termCode);
-    newTerm.setLabel(termLabel);
-    vocabulary.addTerm(newTerm);
-    
-def createSampleTypeWithProperties(sampleTypeCode, description, properties):
-    newSampleType = tr.getOrCreateNewSampleType(sampleTypeCode);
-    newSampleType.setDescription(description);
-    newSampleType.setShowParents(True);
-    newSampleType.setAutoGeneratedCode(True);
-    newSampleType.setGeneratedCodePrefix(sampleTypeCode[:3]);
-    addProperties(newSampleType, properties);
-    samplesCache[sampleTypeCode] = newSampleType;
-    
-def createDataSetTypeWithProperties(dataSetCode, description, properties):
-    newDataSet = tr.getOrCreateNewDataSetType(dataSetCode);
-    newDataSet.setDescription(description);
-    addProperties(newDataSet, properties);
-    
-def createExperimentTypeWithProperties(experimentTypeCode, description, properties):
-    newExperiment = tr.getOrCreateNewExperimentType(experimentTypeCode);
-    newExperiment.setDescription(description);
-    addProperties(newExperiment, properties);
-
-def getSampleType(sampleTypeCode):
-    sampleType = None
-    if sampleTypeCode in samplesCache:
-        sampleType = samplesCache[sampleTypeCode];
-    else:
-        sampleType = tr.getSampleType(sampleTypeCode)
-        samplesCache[sampleTypeCode] = sampleType;
-    return sampleType;
-            
-def addPropertiesToSamples(sampleTypeCodes, properties):
-    for sampleTypeCode in sampleTypeCodes:
-        sampleType = getSampleType(sampleTypeCodes);
-        addProperties(sampleType, properties);
-    
-def addProperties(entity, properties):
-    for property in properties:
-        addProperty(entity, property[0], property[1], property[2], property[3], property[4], property[5], property[6], property[7], property[8], None);
-    
-def addProperty(entity, propertyCode, section, propertyLabel, dataType, vocabularyCode, propertyDescription, managedScript, dynamicScript, isMandatory, position):
-    property = None;
-    
-    if propertyCode in propertiesCache:
-        property = propertiesCache[propertyCode];
-    else:
-        property = createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode);
-    
-    propertyAssignment = tr.assignPropertyType(entity, property);
-    propertyAssignment.setSection(section);
-    propertyAssignment.setMandatory(isMandatory);
-    if position is not None:
-        propertyAssignment.setPositionInForms(position);
-    if managedScript != None:
-        propertyAssignment.setManaged(True);
-        propertyAssignment.setShownEdit(True);
-        propertyAssignment.setScriptName(managedScript);
-    if dynamicScript != None:
-        propertyAssignment.setDynamic(True);
-        propertyAssignment.setShownEdit(True);
-        propertyAssignment.setScriptName(dynamicScript);
-
-def createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode):
-    property = tr.getOrCreateNewPropertyType(propertyCode, dataType);
-    property.setDescription(propertyDescription);
-    property.setLabel(propertyLabel);
-    propertiesCache[propertyCode] = property;
-    if dataType == DataType.CONTROLLEDVOCABULARY:
-        property.setVocabulary(vocabulariesCache[vocabularyCode]);
-    return property;
-
-def addStorageGroups(numGroups, sampleType):
-    for storageIdx in range(1,(numGroups + 1)):
-        storageGroup = definitions.getStorageGroupDefinition();
-        for property in storageGroup:
-            property[0] = property[0] + "_" + str(storageIdx);
-            property[1] = property[1] + "_" + str(storageIdx);
-            property[5] = property[5] + "_" + str(storageIdx);
-        addPropertiesToSamples([sampleType], storageGroup);
-
-def findAssignment(entityType, propertyType):
-    for assignment in tr.listPropertyAssignments():
-        if assignment.getEntityKind().equals(entityType.getEntityKind()) and assignment.getEntityTypeCode() == entityType.getCode() and assignment.getPropertyTypeCode() == propertyType.getCode():
-            return assignment;
-    return None;
-    
-def addBoxSizeProperty(numGroups, sampleTypeCode):
-    sampleType = getSampleType(sampleTypeCode)
-    for storageIdx in range(1,(numGroups + 1)):
-        property = ["STORAGE_BOX_SIZE",     "Physical Storage",        "box size",         DataType.CONTROLLEDVOCABULARY,      "STORAGE_BOX_SIZE",   "Storage Box size",   None, None, False];
-        property[0] = property[0] + "_" + str(storageIdx);
-        property[1] = property[1] + "_" + str(storageIdx);
-        property[5] = property[5] + "_" + str(storageIdx);
-        #Resolve Position
-        position = None
-        propertyTypeCode = "STORAGE_USER" + "_" + str(storageIdx);
-        propertyType = tr.getPropertyType(propertyTypeCode);
-        assigments = tr.listPropertyAssignments();
-        assigment = findAssignment(sampleType, propertyType);
-        if storageIdx == 1:
-            position = assigment.getPositionInForms();
-        else:
-            position = assigment.getPositionInForms() + storageIdx - 1;
-        addProperty(sampleType, property[0], property[1], property[2], property[3], property[4], property[5], property[6], property[7], property[8], position);
-
-#Valid Script Types: DYNAMIC_PROPERTY, MANAGED_PROPERTY, ENTITY_VALIDATION 
-def createScript(path, name, description, scriptType, entityType):
-    scriptAsString = open(path, 'r').read();
-    script = tr.getOrCreateNewScript(name);
-    script.setName(name);
-    script.setDescription(description);
-    script.setScript(scriptAsString);
-    script.setScriptType(scriptType);
-    script.setEntityForScript(entityType);
-    return script;
-
-##
-## Vocabulary Types
-##
-createVocabularyWithTerms("STORAGE_BOX_SIZE", definitionsVoc.vocabularyDefinitions["STORAGE_BOX_SIZE"]);
-
-##
-## New Position Property
-##
-addBoxSizeProperty(definitions.numberOfStorageGroups, "ANTIBODY");
-addBoxSizeProperty(definitions.numberOfStorageGroups, "CELL");
-addBoxSizeProperty(definitions.numberOfStorageGroups, "STRAIN");
-addBoxSizeProperty(definitions.numberOfStorageGroups, "PLASMID");
-addBoxSizeProperty(definitions.numberOfStorageGroups, "OLIGO");
diff --git a/plasmid/source/core-plugins/petermigration/2/dss b/plasmid/source/core-plugins/petermigration/2/dss
deleted file mode 120000
index e38b42b024e1e893dd85763357df04d9fafce358..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/2/dss
+++ /dev/null
@@ -1 +0,0 @@
-../1/dss/
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/petermigration/NOTES b/plasmid/source/core-plugins/petermigration/NOTES
deleted file mode 100644
index 702e3af4b6d71d472330616c346d8f3781feac75..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/petermigration/NOTES
+++ /dev/null
@@ -1,64 +0,0 @@
-Migration Steps, for a second migration, fixing everyhing missed during the first
-1. Backup DB
-2. Delete problematic properties BOX_SIZE_PROPERTY and STORAGE_BOX_SIZE_1 as Orphan metadata, created by error
-3. Delete problematic vocabulary STORAGE_BOX_POSITIONS as Orphan metadata, created by error
-4. Update Database user id property used by the ELN storage from vocabulary to varchar
-
--- This should return no rows, meaning this property is empty and no values need to be fixed
-SELECT *
-FROM sample_properties sp LEFT JOIN sample_type_property_types stpt ON (sp.stpt_id = stpt.id)
-WHERE stpt_id IN (SELECT id
-FROM sample_type_property_types
-WHERE prty_id IN
-(SELECT id
-FROM property_types
-WHERE daty_id = 7 AND covo_id = 12 AND code LIKE 'STORAGE_USER_%'));
-
--- If no rows we can update to varchar
-UPDATE property_types
-SET covo_id = NULL, daty_id = 1
-WHERE daty_id = 7 AND covo_id = 12 AND code LIKE 'STORAGE_USER_%';
-
-5. Run Script
-
-6. Weird things to Fix, labels without numbers or with underscores
-
-- Storage groups have an underscore on the display name
-
-UPDATE sample_type_property_types
-SET section = 'Physical Storage ' || substring(section from (char_length('Physical Storage_')+1) for 2)
-WHERE section LIKE 'Physical Storage_%';
-
-- Storage properties labels have an underscore on the label name
-
-UPDATE property_types
-SET description = 'Storage Name ' || substring(code from (char_length('STORAGE_NAME_')+1) for 2), label = 'Location ' || substring(code from (char_length('STORAGE_NAME_')+1) for 2)
-WHERE code LIKE 'STORAGE_NAME_%';
-
-UPDATE property_types
-SET description = 'Storage Row ' || substring(code from (char_length('STORAGE_ROW_')+1) for 2), label = 'Storage Row ' || substring(code from (char_length('STORAGE_ROW_')+1) for 2)
-WHERE code LIKE 'STORAGE_ROW_%';
-
-UPDATE property_types
-SET description = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2), label = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2)
-WHERE code LIKE 'STORAGE_COLUMN_%';
-
-UPDATE property_types
-SET description = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2), label = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2)
-WHERE code LIKE 'STORAGE_COLUMN_%';
-
-UPDATE property_types
-SET description = 'Storage Box Name ' || substring(code from (char_length('STORAGE_BOX_NAME_')+1) for 2), label = 'Box Label ' || substring(code from (char_length('STORAGE_BOX_NAME_')+1) for 2)
-WHERE code LIKE 'STORAGE_BOX_NAME_%';
-
-UPDATE property_types
-SET description = 'Storage User Id ' || substring(code from (char_length('STORAGE_USER_')+1) for 2), label = 'Frozen By ' || substring(code from (char_length('STORAGE_USER_')+1) for 2)
-WHERE code LIKE 'STORAGE_USER_%';
-
-UPDATE property_types
-SET description = 'Storage Box Size ' || substring(code from (char_length('STORAGE_BOX_SIZE_')+1) for 2), label = 'Box Size ' || substring(code from (char_length('STORAGE_BOX_SIZE_')+1) for 2)
-WHERE code LIKE 'STORAGE_BOX_SIZE_%';
-
-UPDATE property_types
-SET description = 'Storage Box Position ' || substring(code from (char_length('STORAGE_BOX_POSITION_')+1) for 2), label = 'Box Position ' || substring(code from (char_length('STORAGE_BOX_POSITION_')+1) for 2)
-WHERE code LIKE 'STORAGE_BOX_POSITION_%';
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/schroedermigration/1/as/definitions.py b/plasmid/source/core-plugins/schroedermigration/1/as/definitions.py
deleted file mode 100644
index 48448f8e64acd283cc5ed5059bb21aa2b45fefda..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/as/definitions.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-
-#
-# Sample Types
-#
-
-# Columns
-# propertyCode, section, propertyLabel, dataType, vocabularyCode, propertyDescription, managedScript, dynamicScript, isMandatory, showInEditViews
-
-CELL_LINE = [
-    ["CO2",                             "General",                "%CO2",                                DataType.CONTROLLEDVOCABULARY,       "CO2",                "", None, None, False],
-    ["ATCC_NUM",                        "General",                "ATCC No.",                            DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["NAME",                            "General",                "cell ID",                             DataType.VARCHAR,                    None,                 "", None, None, False],
-#    ["CELL_ID_COPY",                    "General",                "cell ID Copy",                        DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["CELL_ID_SEARCH",                  "General",                "cell ID search",                      DataType.VARCHAR,                    None,                 "", None, None, False],
-#    ["COMPARE_FIELD",                   "General",                "compare field",                       DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["CONC1",                           "General",                "conc.1",                              DataType.REAL,                       None,                 "", None, None, False],
-    ["CONC_UNIT1",                      "General",                "concentration unit 1",                DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["CONC2",                           "General",                "conc.2",                              DataType.REAL,                       None,                 "", None, None, False],
-    ["CONC_UNIT2",                      "General",                "concentration unit 2",                DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["CONC3",                           "General",                "conc.3",                              DataType.REAL,                       None,                 "", None, None, False],
-    ["CONC_UNIT3",                      "General",                "concentration unit 3",                DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["CREATION_DATE",                   "General",                "creation date",                       DataType.TIMESTAMP,                  None,                 "", None, None, False, False],
-    ["DATE",                            "General",                "date",                                DataType.TIMESTAMP,                  None,                 "", None, None, False],
-    ["FROZEN",                          "General",                "frozen",                              DataType.TIMESTAMP,                  None,                 "", None, None, False],
-    ["GROWTH_TEMPERATURE",              "General",                "growth temperature",                  DataType.CONTROLLEDVOCABULARY,       "GROWTH_TEMPERATURE", "", None, None, False],
-    ["INVESTIGATOR",                    "General",                "investigator",                        DataType.CONTROLLEDVOCABULARY,       "LAB_MEMBERS",        "", None, None, False],
-    ["MEDIUM_FOR_CELL",                 "General",                "medium",                              DataType.CONTROLLEDVOCABULARY,       "MEDIUM",             "", None, None, False],
-    ["MEDIUM_SPECIALS",                 "General",                "medium specials",                     DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                "modification date",                   DataType.TIMESTAMP,                  None,                 "", None, None, False, False],
-    ["MODIFIED_BY",                     "General",                "modified by",                         DataType.CONTROLLEDVOCABULARY,       "LAB_MEMBERS",        "", None, None, False, False],
-    ["OBTAINED_FROM",                   "General",                "obtained from",                       DataType.CONTROLLEDVOCABULARY,       "CELL_OBTAINED_FROM", "", None, None, False],
-#    ["PAGE_NUMBER",                     "General",                "page number",                         DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["PARENTAL_CELL",                   "General",                "parental cell",                       DataType.VARCHAR,                    None,                 "", None, None, False, False],
-    ["PASSAGE",                         "General",                "passage",                             DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["PLASMID_ID1",                     "General",                "plasmid ID 1",                        DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["PLASMID_ID2",                     "General",                "plasmid ID 2",                        DataType.VARCHAR,                    None,                 "", None, None, False],
-    ["PLASMID_ID3",                     "General",                "plasmid ID 3",                        DataType.VARCHAR,                    None,                 "", None, None, False],   
-    ["PUBLICATION",                     "General",                "reference",                           DataType.VARCHAR,                    None,                 "", None, None, False],    
-    ["SELECTION_PLASMID1",              "General",                "sel.1",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",          "", None, None, False],
-    ["SELECTION_PLASMID2",              "General",                "sel.2",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",          "", None, None, False],
-    ["SELECTION_PLASMID3",              "General",                "sel.3",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",          "", None, None, False],    
-#    ["SERIAL_NUMBER",                   "General",                "serial number",                       DataType.INTEGER,                    None,                 "", None, None, False],
-    ["SPECIES_FOR_CELL",                "General",                "species",                             DataType.CONTROLLEDVOCABULARY,       "CELL_SPECIES",       "", None, None, False],
-    ["TUBES",                           "General",                "tubes",                               DataType.INTEGER,                    None,                 "", None, None, False],
-    ["COMMENTS",                        "General",                "info",                                DataType.MULTILINE_VARCHAR,          None,                 "", None, None, False],
-    ["XMLCOMMENTS",                     "Comments",               "Comments List",                       DataType.XML,                        None,  "Several comments can be added by different users", "COMMENTS_SAMPLE",         None, False, False],
-    ["ANNOTATIONS_STATE",               "Comments",               "Annotations State",                   DataType.XML,                        None,  "Annotations State",                                "ANNOTATIONS_CELL_LINE",   None, False, False]
-];
-
-STORAGE_POSITION = [
-    ["STORAGE_CODE",                  "Physical Storage",        "Storage Code",              DataType.VARCHAR,                    None,                "Storage Code",            None, None, False, False],
-    ["STORAGE_RACK_ROW",              "Physical Storage",        "Storage Rack Row",          DataType.INTEGER,                    None,                "Storage Rack Row",        None, None, False, False],
-    ["STORAGE_RACK_COLUMN",           "Physical Storage",        "Storage Rack Column",       DataType.INTEGER,                    None,                "Storage Rack Column",     None, None, False, False],
-    ["STORAGE_BOX_NAME",              "Physical Storage",        "Storage Box Name",          DataType.VARCHAR,                    None,                "Storage Box Name",        None, None, False, False],
-    ["STORAGE_BOX_SIZE",              "Physical Storage",        "Storage Box Size",          DataType.CONTROLLEDVOCABULARY,       "STORAGE_BOX_SIZE",  "Storage Box Size",        None, None, False, False],
-    ["STORAGE_BOX_POSITION",          "Physical Storage",        "Storage Box Position",      DataType.VARCHAR,                    None,                "Storage Box Position",    None, None, False, False],
-    ["STORAGE_USER",                  "Physical Storage",        "Storage User Id",           DataType.VARCHAR,                    None,                "Storage User Id",         None, None, False, False],
-    ["COMMENTS",                      "General",                 "info",                      DataType.MULTILINE_VARCHAR,          None,                "",                        None, None, False],
-    ["CONCENTRATION",                 "General",                 "concentration",             DataType.REAL,                       None,                "",                        None, None, False],
-    ["CLONE_",                        "General",                 "clone#",                    DataType.VARCHAR,                    None,                "",                        None, None, False],
-    ["PASSAGE",                       "General",                 "passage",                   DataType.VARCHAR,                    None,                "",                        None, None, False],
-    ["XMLCOMMENTS",                   "Comments",                "Comments List",             DataType.XML,                        None,                "Several comments can be added by different users", "COMMENTS_SAMPLE", None, False, False],
-    ["ANNOTATIONS_STATE",             "Comments",                "Annotations State",         DataType.XML,                        None,                "Annotations State", "ANNOTATIONS_STORAGE_POSITION", None, False, False],
-    # Maybe used during the migration, but it goes away, is never copied over
-    ["*LOCATION",                     "General",                 "location",                  DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["*BOX_NAME",                     "General",                 "box label",                 DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["*DRAWER",                       "General",                 "drawer",                    DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["*BOX_SIZE",                     "General",                 "box size",                  DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["*OWNER",                        "General",                 "owner",                     DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["*POSITION",                     "General",                 "position",                  DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["*CELL_ID",                      "General",                 "cell ID",                   DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["*INVESTIGATOR",                  "General",                 "investigator",              DataType.CONTROLLEDVOCABULARY,       "LAB_MEMBERS",       "",                        None, None, False, False],
-    ["*FROZEN_BY",                     "General",                 "frozen by",                 DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-#    ["*COLOUR",                        "General",                 "colour",                    DataType.VARCHAR,                    None,                "",                        None, None, False],
-#    ["*COLOUR_A1",                     "General",                 "colour A1",                 DataType.VARCHAR,                    None,                "",                        None, None, False],
-#    ["*COLOUR_REST",                   "General",                 "colour rest",               DataType.VARCHAR,                    None,                "",                        None, None, False],
-#    ["*COLOUR_BOX_NR",                 "General",                 "colour box nr",             DataType.VARCHAR,                    None,                "",                        None, None, False],
-    # Read only
-    ["FROZEN",                        "General",                 "frozen",                    DataType.TIMESTAMP,                  None,                "",                        None, None, False, False],
-    ["BOX_NR",                        "General",                 "box nr.",                   DataType.INTEGER,                    None,                "",                        None, None, False, False],
-    ["CREATION_DATE",                 "General",                 "creation date",             DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["MODIFICATION_DATE",             "General",                 "modification date",         DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["MODIFIED_BY",                   "General",                 "modified by",               DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["BOX_LABEL_VARIABLE",            "General",                 "box label variable",        DataType.VARCHAR,                    None,                "",                        None, None, False, False],
-    ["OWNER_VARIABLE",                "General",                 "owner variable",            DataType.VARCHAR,                    None,                "",                        None, None, False, False]      
-];
diff --git a/plasmid/source/core-plugins/schroedermigration/1/as/definitionsVoc.py b/plasmid/source/core-plugins/schroedermigration/1/as/definitionsVoc.py
deleted file mode 100644
index 590955b0e3826ff2f000dbaaf7e545b3ac496c03..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/as/definitionsVoc.py
+++ /dev/null
@@ -1,229 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                          "LAB_MEMBERS" : [
-                                      ["Timm_Schroeder","Timm Schroeder"],
-                                      ["Hanna_Eilken","Hanna Eilken"],
-                                      ["Masae_Sato","Masae Sato"],
-                                      ["Thomas_Magg","Thomas Magg"],
-                                      ["Andrea_Hermann","Andrea Hermann"],
-                                      ["Heike_Partenheimer","Heike Partenheimer"],
-                                      ["ISF-H","ISF-H"],
-                                      ["Angelika_Roth","Angelika Roth"],
-                                      ["Inge_Baas","Inge Baas"],
-                                      ["Erin_Drew","Erin Drew"],
-                                      ["Ingo_Burtscher_Hanna_Eilken","Ingo Burtscher/Hanna Eilken"],
-                                      ["Matthias_Munding","Matthias Munding"],
-                                      ["Michael_Rieger","Michael Rieger"],
-                                      ["Masaki_Shigeta","Masaki Shigeta"],
-                                      ["Annemieke_IJpenberg","Annemieke IJpenberg"],
-                                      ["Max_Endele","Max Endele"],
-                                      ["Philipp_Hoppe","Philipp Hoppe"],
-                                      ["Adam_Filipczyk","Adam Filipczyk"],
-                                      ["Simon_Hastreiter","Simon Hastreiter"],
-                                      ["Joost_van_den_Berg","Joost van den Berg"],
-                                      ["Konstantinos_Kokkaliaris","Konstantinos Kokkaliaris"],
-                                      ["Konstantinos","Konstantinos"],
-                                      ["Nadine_Moritz","Nadine Moritz"],
-                                      ["Christian_Raithel","Christian Raithel"],
-                                      ["Martin_Etzrodt","Martin Etzrodt"],
-                                      ["Andreas_Reimann","Andreas Reimann"],
-                                      ["Paul_Bourgine","Paul Bourgine"],
-                                      ["Laura_Skylaki","Laura Skylaki"],
-                                      ["Ren_Shimamoto","Ren Shimamoto"],
-                                      ["Weijia_Wang","Weijia Wang"],
-                                      ["RS","RS"]
-                                    ],
-
-                          "SELECTION" : [
-                                ["NEOMYCIN_G418",  "Neomycin/G418"],
-                                ["PUROMYCIN",  "Puromycin"],
-                                ["HYGROMYCIN",  "Hygromycin"],
-                                ["BLASTICIDIN",  "Blasticidin"],
-                                ["UNKNOWN",  "?"],                                
-                                ["FACS",  "FACS"] 
-                                    ],
-                          "CO2" : [
-                                ["5",  "5"],
-                                ["7.5",  "7.5"]
-                                    ],
-                          "GROWTH_TEMPERATURE" : [
-                                ["37",  "37"],
-                                ["32",  "32"],
-                                ["28",  "28"],                                
-                                ["33",  "33"]
-                                    ],
-                          "MEDIUM" : [
-                                ["UNKNOWN","?"],
-                                ["alphaMEM","alphaMEM"],
-                                ["aMEM","aMEM"],
-                                ["aMEM_FGF2","aMEM + FGF2"],
-                                ["aMEM_CM_FGF2","aMEM CM + FGF2"],
-                                ["DMEM","DMEM"],
-                                ["DMEM_high_glucose","DMEM (high glucose)"],
-                                ["DMEM_high_Glucose_LGlutamin_Pyruvate","DMEM high Glucose + L-Glutamin + Pyruvate"],
-                                ["DMEM_IMDM_or","DMEM or IMDM or .... (not critical)"],
-                                ["DMSO_FBS","DMSO + FBS"],
-                                ["EB5_maintanance_medium","EB5 mainanance medium"],
-                                ["EB5_maintanance_medium","EB5 maintanance medium"],
-                                ["EB5_maintanance","EB5 maintanance"],
-                                ["EB5_maintanance","EB5 maintanence"],
-                                ["ES_cell_medium","ES cell medium"],
-                                ["ES_cell_medium_FCS11_LIF","ES cell medium (FCS11, LIF)"],
-                                ["ES_cell_medium_FSC11_LIF","ES cell medium (FSC11, LIF)"],
-                                ["Glasgow_Minimum_Gibco","Glasgow Minimum (Gibco)"],
-                                ["Glasgow_Minimum_Gibco","Glasgow Minimum Gibco"],
-                                ["Glasgow_Minimum_Gibco","Glasgow Minimun Gibco"],
-                                ["high_glucose_DMEM","high glucose DMEM"],
-                                ["high_glucose_DMEM","high-glucose DMEM"],
-                                ["IMDM_10DMSO","IMDM / 10% DMSO"],
-                                ["IMDM_310-320mosm_kg","IMDM 310-320mosm/kg"],
-                                ["Knock-In_Gibco","Knock-In Gibco"],
-                                ["Knock-out_Medium_Gibco","Knock-out  Medium  (Gibco)"],
-                                ["Knock-Out_DMEM","Knock-Out DMEM"],
-                                ["maintenance_medium","maintenance medium"],
-                                ["MEGM_Mammary_Epithelial_BulletKit","MEGM Mammary Epithelial BulletKit"],
-                                ["RPMI_1640","RPMI 1640"],
-                                ["RPMI_wo_Phenol_Red","RPMI w/o Phenol Red"],
-                                ["SFEM","SFEM"],
-                                ["SL_2i_Or_N2B27_2i","SL+2i or N2B27+2i"],
-                                ["without_gelatine_and_feeder_knockout_DMEM_15FCS","without gelatine and feeder, knockout DMEM, 15% FCS, 2mM Gln, NEAA, LIF, PenStrep, 1,5x10-4 MTG"],
-                                    ], 
-                          "CELL_OBTAINED_FROM" : [
-                                ["Elaine_Spooncer","Elaine Spooncer"],
-                                ["Ursula_Just","Ursula Just"],
-                                ["Ralf_Mozikat_GSF_Munich","Ralf Mozikat, GSF, Munich"],
-                                ["Kuroda_K","Kuroda K"],
-                                ["Hueltner_GSF","Hueltner? GSF?"],
-                                ["ShinIchi_Nishikawa","ShinIchi Nishikawa"],
-                                ["Mulligan_R","Mulligan R"],
-                                ["Milner_L","Milner L"],
-                                ["Kempkes_B","Kempkes B"],
-                                ["Kempkes_B_Weinmaster_G","Kempkes B, Weinmaster G"],
-                                ["Honjo_T","Honjo T"],
-                                ["Nolan","Nolan"],
-                                ["Ursula_Just_Hamburg","Ursula Just, ? Hamburg"],
-                                ["Honjo_Tasuku","Honjo Tasuku"],
-                                ["Dan_Tenen","Dan Tenen"],
-                                ["Fumio_Matsuzaki","Fumio Matsuzaki"],
-                                ["Sakurai_Era","Sakurai / Era"],
-                                ["Igor_Samochvalov","Igor Samochvalov"],
-                                ["Hitoshi_Niwa","Hitoshi Niwa"],
-                                ["Sakurai_in_Kobe","Sakurai in Kobe"],
-                                ["Minetaro_Ogawa_Kumamoto_University","Minetaro Ogawa, Kumamoto University"],
-                                ["Gerald_de_Haan","Gerald de Haan"],
-                                ["Carmen_Ebel_AVM","Carmen Ebel AVM"],
-                                ["Eric_Bouhassira","Eric Bouhassira"],
-                                ["Masui","Masui"],
-                                ["Heikos_group","Heikos group"],
-                                ["Kateri_Moore","Kateri Moore"],
-                                ["Ralf_Kuhn","Ralf Kühn"],
-                                ["Ralph_Kuhn","Ralph Kühn"],
-                                ["Inge_Baas","Inge Baas"],
-                                ["AG_Ruhland","AG Ruhland"],
-                                ["Igor_Samokhvalov","Igor Samokhvalov"],
-                                ["p11_stock_AH","p11 stock (AH)"],
-                                ["Aileen_Smith","Aileen Smith"],
-                                ["Hans_Scholer","Hans Schöler"],
-                                ["Dietrich_Lesinski","Dietrich Lesinski"],
-                                ["Ian_Chambers","Ian Chambers"],
-                                ["Lemischka","Lemischka"],
-                                ["EUCOMM","EUCOMM"],
-                                ["Andrea_Beyerle_ILBD","Andrea Beyerle (ILBD)"],
-                                ["Konstantinos_Anastassiadis","Konstantinos Anastassiadis"],
-                                ["Adam_Filipczyk","Adam Filipczyk"],
-                                ["Hideo_Yagita","Hideo Yagita"],
-                                ["Robert_Oostendorp","Robert Oostendorp"],
-                                ["Thomas_Graf","Thomas Graf"],
-                                ["Andrew_Elefanty_Ed_Stanley","Andrew Elefanty & Ed Stanley"],
-                                ["Clontech","Clontech"],
-                                ["Adam_Filipczyk_Konstantinos_Anastassiadis","Adam Filipczyk, Konstantinos Anastassiadis"],
-                                ["Klinikum_Rechts_der_Isar","Klinikum Rechts der Isar"],
-                                ["ATCC","ATCC"],
-                                ["Daisuke_Sugiyama","Daisuke Sugiyama"],
-                                ["Alessio_Zippo","Alessio Zippo"],
-                                ["Vyas_Paresh_Oxford","Vyas Paresh, Oxford"],
-                                ["Ivan_Martin","Ivan Martin"],
-                                ["Paul_Bourgine","Paul Bourgine"],
-                                ["AR","AR"],
-                                ["Gadue_Paul","Gadue, Paul"],
-                                ["Antonius_Rolink","Antonius Rolink"],
-                                ["Eszter_Posfai_Janet_Rossant","Eszter Posfai/Janet Rossant"],
-                                ["Cell_Biolabs_inc.","Cell Biolabs, inc."],
-                                ["Simon_Hastreiter","Simon Hastreiter"],
-                                ["CiRA","CiRA"],
-                                ["Gibco","Gibco"],
-                                ["PrimCell","PrimCell"],
-                                ["E_Friman","E. Friman"],
-                                ["CiRA_Yamada_lab","CiRA, Yamada lab"]
-                                    ],  
-                          "CELL_SPECIES" : [
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["MOUSE_MAYBE",  "mouse ?"]
-                                    ],  
-                          "CONC_UNITS" : [
-                                ["MICROG_MICROL",  "�g/�l"],
-                                ["MG_ML",  "mgl/ml"],
-                                ["UG_ML",  "ug/ml"]                               
-                                    ],
-                         "STORAGE_BOX_SIZE" : [
-                                ["10X10", "10x10"]
-                            ],
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/schroedermigration/1/as/initialize-master-data.py b/plasmid/source/core-plugins/schroedermigration/1/as/initialize-master-data.py
deleted file mode 100644
index 606c1f41f3e35907dd7e22d82b0793a33105e28f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/as/initialize-master-data.py
+++ /dev/null
@@ -1,132 +0,0 @@
-#
-# Copyright 2014 ETH Zuerich, Scientific IT Services
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# MasterDataRegistrationTransaction Class
-import definitions
-import definitionsVoc
-import os
-import copy
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Globals
-##
-vocabulariesCache = {};
-propertiesCache = {};
-samplesCache = {};
-tr = service.transaction()
-
-##
-## API Facade
-##
-def createVocabularyWithTerms(vocabularyCode, terms):
-    vocabulary = tr.getOrCreateNewVocabulary(vocabularyCode);
-    vocabulary.setChosenFromList(True);
-    addTerms(vocabulary, terms);
-    vocabulariesCache[vocabularyCode] = vocabulary;
-    
-def addTerms(vocabulary, terms):
-    for term in terms:
-        addTermWithLabel(vocabulary, term[0], term[1])
-    
-def addTermWithLabel(vocabulary, termCode, termLabel):
-    newTerm = tr.createNewVocabularyTerm(termCode);
-    newTerm.setLabel(termLabel);
-    vocabulary.addTerm(newTerm);
-    
-def createSampleTypeWithProperties(sampleTypeCode, description, properties):
-    newSampleType = tr.getOrCreateNewSampleType(sampleTypeCode);
-    newSampleType.setDescription(description);
-    newSampleType.setShowParents(True);
-    newSampleType.setAutoGeneratedCode(True);
-    newSampleType.setGeneratedCodePrefix(sampleTypeCode[:3]);
-    addProperties(newSampleType, properties);
-    samplesCache[sampleTypeCode] = newSampleType;
-    
-
-
-def getSampleType(sampleTypeCode):
-    sampleType = None
-    if sampleTypeCode in samplesCache:
-        sampleType = samplesCache[sampleTypeCode];
-    else:
-        sampleType = tr.getSampleType(sampleTypeCode)
-        samplesCache[sampleTypeCode] = sampleType;
-    return sampleType;
-            
-def addPropertiesToSamples(sampleTypeCodes, properties):
-    for sampleTypeCode in sampleTypeCodes:
-        sampleType = getSampleType(sampleTypeCode);
-        addProperties(sampleType, properties);
-    
-def addProperties(entity, properties):
-    for property in properties:
-        if not property[0].startswith("*"):
-            showInEditViews = None;
-            if len(property) > 9 and property[9] is not None:
-                showInEditViews = property[9];
-            addProperty(entity, property[0], property[1], property[2], property[3], property[4], property[5], property[6], property[7], property[8], showInEditViews);
-    
-def addProperty(entity, propertyCode, section, propertyLabel, dataType, vocabularyCode, propertyDescription, managedScript, dynamicScript, isMandatory, showInEditViews):
-    property = None;
-    
-    if propertyCode in propertiesCache:
-        property = propertiesCache[propertyCode];
-    else:
-        property = createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode);
-    
-    propertyAssignment = tr.assignPropertyType(entity, property); #If the assignment already exists, returns the existing one
-    propertyAssignment.setSection(section);
-    propertyAssignment.setShownEdit(True);
-    propertyAssignment.setMandatory(isMandatory);
-    
-    if showInEditViews is not None:
-        propertyAssignment.setShownEdit(showInEditViews);
-    
-    if managedScript != None:
-        propertyAssignment.setManaged(True);
-        propertyAssignment.setScriptName(managedScript);
-    if dynamicScript != None:
-        propertyAssignment.setDynamic(True);
-        propertyAssignment.setShownEdit(False);
-        propertyAssignment.setScriptName(dynamicScript);
-
-def createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode):
-    property = tr.getOrCreateNewPropertyType(propertyCode, dataType);
-    property.setDescription(propertyDescription);
-    property.setLabel(propertyLabel);
-    propertiesCache[propertyCode] = property;
-    if dataType == DataType.CONTROLLEDVOCABULARY:
-        property.setVocabulary(vocabulariesCache[vocabularyCode]);
-    return property;
-
-def findAssignment(entityType, propertyType):
-    for assignment in tr.listPropertyAssignments():
-        if assignment.getEntityKind().equals(entityType.getEntityKind()) and assignment.getEntityTypeCode() == entityType.getCode() and assignment.getPropertyTypeCode() == propertyType.getCode():
-            return assignment;
-    return None;
-    
-##
-## Vocabulary Types
-##
-for vocabularyCode, vocabularyValues in definitionsVoc.vocabularyDefinitions.iteritems():
-    createVocabularyWithTerms(vocabularyCode, vocabularyValues)
-
-##
-## Sample Types
-##
-createSampleTypeWithProperties("CELL_LINE", "", definitions.CELL_LINE);
-createSampleTypeWithProperties("STORAGE_POSITION", "", definitions.STORAGE_POSITION);
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/definitions.py b/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/definitions.py
deleted file mode 120000
index d16e42850d35ea24a66064d8b534deebedc04f56..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/definitions.py
+++ /dev/null
@@ -1 +0,0 @@
-../../../as/definitions.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/definitionsVoc.py b/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/definitionsVoc.py
deleted file mode 120000
index 1883a7061938c66144390382f1839653b6ca37fa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/definitionsVoc.py
+++ /dev/null
@@ -1 +0,0 @@
-../../../as/definitionsVoc.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/doc/fm11_odbc_jdbc_guide_en.pdf b/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/doc/fm11_odbc_jdbc_guide_en.pdf
deleted file mode 100644
index 36aaa0f12220dbde26b7ece4e3b78914087893b0..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/doc/fm11_odbc_jdbc_guide_en.pdf and /dev/null differ
diff --git a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/lib/FileMakerMain.java b/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/lib/FileMakerMain.java
deleted file mode 100644
index a2206338c1ccb79267396fbe2751fbb529304ab8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/lib/FileMakerMain.java
+++ /dev/null
@@ -1,77 +0,0 @@
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-//  STEP By Step:
-//  1. Open the file maker file with file maker pro
-//  2. Go to "File -> Sharing -> ODBC/JDBC" and turn sharing on
-//  3. You can go to see the names of the tables and field to "File -> Manage -> Database"
-//  Without closing file maker pro you can run this script, modify it as needed
-//  More info at http://www.filemaker.com/support/product/docs/fmp/fm11_odbc_jdbc_guide_en.pdf
-
-public class FileMakerMain
-{
-    // NOTE: FileMaker is so dump that you can't get the fileName and the fileData on the same query, the file data will return null, so we make a second call for this
-    public static final String GET_DOCUMENTS = "SELECT CAST(file AS VARCHAR(1000)) AS fileName, info, serial FROM documents";
-    public static final String GET_DOCUMENT_DATA = "SELECT GetAs(file, 'FILE') AS fileData FROM documents WHERE serial = ?";
-    
-    static class Document {
-        String fileName;
-        String info;
-        String serial;
-        
-        public String toString()
-        {
-            return fileName + " " + info;
-        }
-    }
-    
-    public static List<Document> getDocuments(Connection connection) throws SQLException {
-        List<Document> documents = new ArrayList<Document>();
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENTS);
-        ResultSet result = preparedStatement.executeQuery();
-        
-        while(result.next()) {
-            Document document = new Document();
-            document.fileName = result.getString("fileName");
-            document.info = result.getString("info");
-            document.serial = result.getString("serial");
-            documents.add(document);
-        }
-        result.close();
-        preparedStatement.close();
-        return documents;
-    }
-    
-    public static byte[] getFile(Connection connection, Document document) throws SQLException {
-        byte[] bytes = {};
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENT_DATA);
-        preparedStatement.setString(1, document.serial);
-        ResultSet result = preparedStatement.executeQuery();
-        if(result.next()) {
-            byte[] value = result.getBytes("fileData");
-            if(value != null) {
-                bytes = value;
-            }
-        }
-        result.close();
-        preparedStatement.close();
-        return bytes;
-    }
-    
-    public static void main(String[] args) throws Exception {
-        Class.forName("com.filemaker.jdbc.Driver").newInstance();
-        Connection connection = DriverManager.getConnection("jdbc:filemaker://127.0.0.1/BOXIT_documents_Peter.fmp12","designer", "seattle");
-        
-        for(Document document: getDocuments(connection)) {
-            byte[] bytes = getFile(connection, document);
-            System.out.println(document + " " + bytes.length);
-        }
-        connection.close();
-    }
-}
diff --git a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/lib/fmjdbc12.jar b/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/lib/fmjdbc12.jar
deleted file mode 100644
index b73e996fe85d7bc2ce5a177d37fe17f46a7f0cbb..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/lib/fmjdbc12.jar and /dev/null differ
diff --git a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/migration.py b/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/migration.py
deleted file mode 100644
index 1a09d70b691f70bd28291e8a91d150a9bea4e85f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/migration.py
+++ /dev/null
@@ -1,435 +0,0 @@
-# some_file.py
-import sys
-import definitions
-import definitionsVoc
-import re
-import random
-from datetime import datetime
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria, SearchSubCriteria
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-import uuid
-
-import java.lang.Class as Class
-import java.sql.DriverManager as DriverManager
-
-##
-## Generic Process Method
-##
-notMigratedEntities = {
-                       "ENTITY_TYPE" : {"ENTITY ID" : {"ERROR" : "TIMES" }}
-                      }
-
-def addNotMigratedEntity(type, entityID, error):
-    if type not in notMigratedEntities:
-        notMigratedEntities[type] = {}
-    if entityID not in notMigratedEntities[type]:
-        notMigratedEntities[type][entityID] = {}
-    if error not in notMigratedEntities[type][entityID]:
-        notMigratedEntities[type][entityID][error] = 1
-    else:
-        notMigratedEntities[type][entityID][error] += 1
-
-def printNotMigratedEntities():
-    print "--- Not Migrated Entities Report"
-    for type in notMigratedEntities:
-        print "Type: [" + str(type) + "]"
-        for id in notMigratedEntities[type]:
-            for error in notMigratedEntities[type][id]:
-                print "Id: [" + str(id) + "] Error: " + str(error) + " Times: " + str(notMigratedEntities[type][id][error])
-    print "---"
-
-def process(tr):
-    print "START!"
-    createDataHierarchy(tr)
-    for adaptor in adaptors:
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] START"
-        while adaptor.next():
-            entity = adaptor.getEntity()
-            print "* ENTITY [" + str(entity.getIdentifier(tr)) + "]"
-#             try:
-            if not entity.isInOpenBIS(tr):
-                entity.write(tr)
-                    #print entity.getIdentifier(tr) + " - Updated"
-            else:
-                addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), "Already in openBIS")
-#             except Exception, error:
-#                     addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), str(error.args))
-                    #print entity.getIdentifier(tr) + " - Already up to date"
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] FINISH"
-    # Set Parents
-    for sampleName in sampleID2Sample:
-            sample = sampleID2Sample[sampleName]
-            sampleParentName = sample.getPropertyValue("PARENTAL_CELL")
-            if sampleParentName != None and sampleParentName != "":
-                if sampleParentName in sampleID2Sample:
-                    sampleParent = sampleID2Sample[sampleParentName]
-                    if sample is not sampleParent:
-                        sample.setParentSampleIdentifiers([sampleParent.getSampleIdentifier()]);
-                    else:
-                        print "Sample depends on itself ===> '" + str(sampleParentName) + "'"
-                else:
-                    print "Missing sample parent ===> '" + sampleName + "' depends on '" + str(sampleParentName) + "'"
-    #
-    print "REPORT START"
-    printNotMigratedEntities()
-    definitionsVoc.printCreatedTerms()
-    print "INVESTIGATORS MISSING"
-    global investigatorsMissing
-    print str(investigatorsMissing)
-    print "REPORT FINISH"
-    print "FINISH!"
-
-def hasColumn(rs, columnName):
-    rsmd = rs.getMetaData()
-    columns = rsmd.getColumnCount()
-    for x in range(1, columns + 1):
-        foundColumnName = rsmd.getColumnName(x);
-        if columnName == foundColumnName:
-            return True
-    return False
-
-##
-## Help Methods
-##
-def setEntityProperties(tr, definition, entity, properties):
-    for propertyCode, propertyValue in properties.iteritems():
-            #print "CODE ---->" + propertyCode
-            propertyDefinition = definitions.getPropertyDefinitionByCode(definition, propertyCode)
-            #print "DEF ---->" + str(propertyDefinition)
-            
-            if (propertyValue is not None) and (propertyDefinition is not None) and ((propertyDefinition[3] == DataType.INTEGER) or (propertyDefinition[3] == DataType.REAL)):
-                propertyValue =  propertyValue.strip(' ')
-            
-            if (propertyValue is not None) and (propertyDefinition is not None) and ((propertyDefinition[3] == DataType.VARCHAR) or (propertyDefinition[3] == DataType.MULTILINE_VARCHAR)):
-                propertyValue =  unicode(propertyValue)
-
-            if (propertyValue is not None) and (propertyDefinition is not None) and (propertyDefinition[3] == DataType.TIMESTAMP):
-                date_val = datetime.strptime(propertyValue, "%Y-%m-%d")
-                propertyValue = datetime.strftime(date_val, "%Y-%m-%d")
-            
-            if (propertyValue is not None) and (propertyDefinition is not None) and (propertyDefinition[3] == DataType.CONTROLLEDVOCABULARY):
-                possiblePropertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel(propertyDefinition[4], propertyValue)
-                if possiblePropertyValue is not None:
-                    propertyValue = possiblePropertyValue
-                else:  #We rely on the Add Hock Terms if is None, since there is no API we create a new one
-                    #Create new vocabulary term
-                    codeToUse = re.sub(r'\W+','_',propertyValue)
-                    labelToUse = propertyValue
-                    if len(codeToUse) is 0:
-                        codeToUse = "None" + str(random.random())
-                    if len(codeToUse) > 60:
-                        codeToUse = codeToUse[:50]
-                    #Uses new vocabulary term
-                    newTerm = definitionsVoc.createVocabularyTerm(tr, propertyDefinition[4], codeToUse, labelToUse)
-                    propertyValue = newTerm.getCode()
-                    print "* WARNING ENTITY [" + entity.getCode() + "]: for Vocabulary [" + propertyDefinition[4] + "], found value not in list: [" + repr(labelToUse) + "]. Created new term with code [" + codeToUse + "]"
-            
-            if (propertyDefinition is not None) and (not propertyCode.startswith("*")): #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-##
-## Generic Pattern
-##
-class EntityAdaptor:
-    entities = None
-    entitiesIdx = None
-    definition = None
-    
-    def init(self):
-        self.entities = []
-        self.entitiesIdx = -1
-        pass
-    
-    def next(self):
-        if self.entities is None and self.entitiesIdx is None:
-            self.init()
-        self.entitiesIdx += 1
-        if len(self.entities) > self.entitiesIdx:
-            return True
-        else:
-            return False
-    
-    def addEntity(self, values):
-        self.entities.append(OpenBISDTO(values, self.definition))
-    
-    def getEntity(self):
-        return self.entities[self.entitiesIdx]
-    
-class OpenBISDTO:
-    values = {}
-    definition = None
-    
-    def __init__(self, values, definition):
-        self.values = values
-        self.definition = definition
-    
-    def getIdentifier(self, tr):
-        pass
-    
-    def isInOpenBIS(self, tr):
-        pass
-    
-    def write(self, tr):
-        pass
-
-##
-## Costumer specific logic: generic part
-##
-experimentCache = {}
-sampleCache = {}
-sampleID2Sample = {}
-globalSequences = {};
-
-def getNextGlobalSequence(id):
-    currentSequence = None;
-    
-    if id in globalSequences:
-        currentSequence = globalSequences[id]; #Get existing sequence
-    else:
-        currentSequence = 0; # Create a new one
-    
-    #Advance and store new step on the sequence
-    currentSequence = currentSequence+1;
-    globalSequences[id] = currentSequence;
-    
-    #Return the new sequence number
-    return str(currentSequence);
-
-def getExperimentForUpdate(experimentIdentifier, experimentType, tr):
-    if experimentIdentifier not in experimentCache:
-        #print "Cache failed " + experimentIdentifier + ":" + str(experimentType)
-        experiment = tr.getExperimentForUpdate(experimentIdentifier)
-        if experiment is None and experimentType is not None:
-            #print "Cache Create " + experimentIdentifier + ":" + str(experimentType)
-            experiment = tr.createNewExperiment(experimentIdentifier,         experimentType)
-        if experiment is not None:
-             experimentCache[experimentIdentifier] = experiment
-    else:
-        pass
-        #print "Cache hit " + experimentIdentifier + ":" + str(experimentType)
-    if experimentIdentifier not in experimentCache:
-         return None
-    else:
-         return experimentCache[experimentIdentifier]
-     
-def getSampleForUpdate(sampleIdentifier, sampleType, tr):
-    if sampleIdentifier not in sampleCache:
-         #print "Cache failed " + sampleIdentifier + ":" + str(sampleType)
-         sample = None #tr.getSampleForUpdate(sampleIdentifier)
-         if sample is None and sampleType is not None:
-             #print "Cache Create " + sampleIdentifier + ":" + str(sampleType)
-             experiment = None
-             if sampleType == "CELL_LINE":
-             	experiment = getExperimentForUpdate("/MATERIALS/CELL_LINES/CELL_LINE_COLLECTION_1", "MATERIALS", tr)             
-             sample = tr.createNewSample(sampleIdentifier, sampleType)
-             if experiment is not None:
-                sample.setExperiment(experiment)
-         if sample is not None:
-             sampleCache[sampleIdentifier] = sample
-    else:
-        pass
-        #print "Cache hit " + sampleIdentifier + ":" + str(sampleType)
-        
-    if sampleIdentifier not in sampleCache:
-         return None
-    else:
-         return sampleCache[sampleIdentifier]
-
-class FileMakerEntityAdaptor(EntityAdaptor):
-    connection = None
-    selectQuery = None
-    columnPrefix = None
-    
-    def __init__(self, fileMakerConnString, fileMakerUser, fileMakerPass, db):
-        Class.forName("com.filemaker.jdbc.Driver").newInstance()
-        self.connection = DriverManager.getConnection(fileMakerConnString+db,fileMakerUser, fileMakerPass)
-    
-    def init(self):
-        EntityAdaptor.init(self)
-        
-        preparedStatement = self.connection.prepareStatement(self.selectQuery)
-        result = preparedStatement.executeQuery()
-        
-        while result.next():
-            values = {}
-            for property in self.definition:
-                propertyCode = property[0]
-                columnName = property[2]
-                if self.columnPrefix != None:
-                    columnName = self.columnPrefix + columnName
-                if hasColumn(result, columnName):
-                    propertyValue = result.getString(columnName)
-                    if propertyValue != None:
-                        propertyValue = propertyValue.strip("\r")
-                    values[propertyCode] = propertyValue
-            print str(values);
-            self.addEntity(values)
-        result.close()
-        preparedStatement.close()
-
-##
-## Customer specific logic: different sample types
-##
-class FMSchroederOpenBISDTO(OpenBISDTO):
-        def isInOpenBIS(self, tr):
-            code = self.getIdentifier(tr)
-            if code is not None:
-                sample = getSampleForUpdate("/MATERIALS/"+code, None, tr)
-                if sample is not None:
-                    lastModificationData = self.values["MODIFICATION_DATE"].strip()
-                    lastModificationData = str(datetime.strptime(lastModificationData, "%Y-%m-%d"))[:10]
-                    lastModificationOpenBIS = sample.getPropertyValue("MODIFICATION_DATE")[:10]
-                    return lastModificationOpenBIS == lastModificationData
-                else :
-                    return False
-            else:
-                print "* ERROR [" + str(code) + "] - Invalid Code found for '" + self.__class__.__name__ + "'"
-                raise Exception('Invalid Code found ' + str(code))
-
-##
-## Cells
-##
-class CellAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"cells\""
-        self.definition = definitions.CELL_LINE
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(CellOpenBISDTO(values, self.definition))
-        
-class CellOpenBISDTO(FMSchroederOpenBISDTO):
-    def write(self, tr):
-        code = self.values["*CODE"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"CELL_LINE", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-            global sampleID2Sample
-            sampleID2Sample[self.values["NAME"]] = sample
-        
-    def getIdentifier(self, tr):
-        if "*CODE" not in self.values:
-            self.values["*CODE"] = "CELL_LINE_" + getNextGlobalSequence("CELL_LINE");
-        return self.values["*CODE"];
-
-class CellBoxPositionAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"cell boxes\""
-        self.definition = definitions.STORAGE_POSITION
-        self.columnPrefix = "cell ID data box:"
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(CellBoxPositionOpenBISDTO(values, self.definition))
-        
-        
-racks = {
-             u"N2" : "N2",
-             u"-140°C R5.38" : "MINUS140_R5.38"
-         }
-
-investigators = {
-            u"Timm_Schroeder" : "timmsc",
-            u"Martin_Etzrodt" : "etzromar",
-            u"Simon_Hastreiter" : "hassimon",
-            u"Laura_Skylaki" : "skylakis",
-            u"Dirk_Löffler" : "ldirk",
-            u"Konstantinos_Kokkaliaris" : "kokkalik",
-            u"Oliver_Hilsenbeck" : "hilsenbo",
-            u"Philip_Dettinger" : "philipd",
-            u"Andreas_Reimann" : "anreiman",
-            u"Leo_Kunz" : "kunzl",
-            u"Nouraiz_Ahmed" : "noahmed",
-            u"Ren_Shimamoto" : "rens",
-            u"Weijia_Wang" : "wwang",
-            u"Geethika_Arekatla" : "garekatl",
-            u"Tobias_Kull" : "tkull",
-            u"Arne_Wehling" : "awehling",
-            u"Yang_Zhang" : "yangzhan",
-            u"Jeffrey_Bernitz" : "jbernitz"
-        }
-
-investigatorsMissing = {}
-class CellBoxPositionOpenBISDTO(FMSchroederOpenBISDTO):
-    def write(self, tr):
-        code = self.values["*CODE"]
-        if code is not None:
-            sample = getSampleForUpdate("/STORAGE/"+code,"STORAGE_POSITION", tr)
-            sampleParent = sampleID2Sample[self.values["*CELL_ID"]];
-            
-            setEntityProperties(tr, self.definition, sample, self.values);
-            drawer = self.values["*DRAWER"];
-            row = None
-            column = None
-            if (drawer is not None) and (len(drawer) > 0) and ("/" in drawer):
-                row = drawer.split("/")[0];
-                column = drawer.split("/")[1];
-            
-            if self.values["*LOCATION"] == u"-140°C R5.38" and row == None and column == None:
-                row = "1"
-                column = "1"
-            
-            if self.values["*LOCATION"] != None:
-                sample.setPropertyValue("STORAGE_CODE", racks[self.values["*LOCATION"]])
-            
-            if row != None:
-                sample.setPropertyValue("STORAGE_RACK_ROW", row.strip(" ")) # syntax is y/x: x is the row
-            if column != None:
-                sample.setPropertyValue("STORAGE_RACK_COLUMN", column.strip(" ")) # syntax is y/x: y is the tower, i.e. the column
-            sample.setPropertyValue("STORAGE_BOX_NAME", self.values["*BOX_NAME"])
-            sample.setPropertyValue("STORAGE_BOX_SIZE", self.values["*BOX_SIZE"])
-            sample.setPropertyValue("STORAGE_BOX_POSITION", self.values["*POSITION"])
-            
-            boxOwner = None
-            if sampleParent.getPropertyValue("INVESTIGATOR") != None and sampleParent.getPropertyValue("INVESTIGATOR") not in investigators:
-                global investigatorsMissing
-                investigatorsMissing[sampleParent.getPropertyValue("INVESTIGATOR")] = True
-            if sampleParent.getPropertyValue("INVESTIGATOR") in investigators:
-                boxOwner = investigators[sampleParent.getPropertyValue("INVESTIGATOR")]
-            elif self.values["*FROZEN_BY"] != None:
-                boxOwner = self.values["*FROZEN_BY"]
-            else:
-                boxOwner = self.values["*OWNER"]
-            sample.setPropertyValue("STORAGE_USER", boxOwner)
-            
-            # Set parent
-            sample.setParentSampleIdentifiers([sampleParent.getSampleIdentifier()]);
-        
-    def getIdentifier(self, tr):
-        if "*CODE" not in self.values:
-            self.values["*CODE"] = str(uuid.uuid4());
-        return self.values["*CODE"];
-
-fmConnString = "jdbc:filemaker://127.0.0.1/"
-#fmConnString = "jdbc:filemaker://fm.ethz.ch/"
-fmUser= "Admin"
-fmPass = ""
-
-adaptors = [ 
-            CellAdaptor(fmConnString, fmUser, fmPass, "boxit-cells"),
-            CellBoxPositionAdaptor(fmConnString, fmUser, fmPass, "boxit-cell-boxes")
-             ]
-           
-def createDataHierarchy(tr):
-    storageCollection = getExperimentForUpdate("/ELN_SETTINGS/STORAGES/STORAGES_COLLECTION", "COLLECTION", tr)
-    storageN2 = getSampleForUpdate("/ELN_SETTINGS/N2","STORAGE", tr)
-    storageN2.setExperiment(storageCollection)
-    storageN2.setPropertyValue("NAME", "N2")
-    storageN2.setPropertyValue("ROW_NUM", "10")
-    storageN2.setPropertyValue("COLUMN_NUM", "10")
-    storageN2.setPropertyValue("BOX_NUM", "9999")
-    storageN2.setPropertyValue("STORAGE_SPACE_WARNING", "80")
-    storageN2.setPropertyValue("BOX_SPACE_WARNING", "80")
-    storageN2.setPropertyValue("STORAGE_VALIDATION_LEVEL", "BOX_POSITION")
-    storage180 = getSampleForUpdate("/ELN_SETTINGS/MINUS140_R5.38","STORAGE", tr)
-    storage180.setExperiment(storageCollection)
-    storage180.setPropertyValue("NAME", "-140°C R5.38")
-    storage180.setPropertyValue("ROW_NUM", "1")
-    storage180.setPropertyValue("COLUMN_NUM", "1")
-    storage180.setPropertyValue("BOX_NUM", "9999")
-    storage180.setPropertyValue("STORAGE_SPACE_WARNING", "80")
-    storage180.setPropertyValue("BOX_SPACE_WARNING", "80")
-    storage180.setPropertyValue("STORAGE_VALIDATION_LEVEL", "BOX_POSITION")
-
-        
-        
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/plugin.properties b/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/plugin.properties
deleted file mode 100644
index 1f7e51e23868b27eb985380f1305d2d7a2482f60..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/1/dss/drop-boxes/schroedermigration/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path = migration.py
-dropbox-name = schroedermigration
-incoming-dir = ${root-dir}/schroedermigration
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/schroedermigration/NOTES b/plasmid/source/core-plugins/schroedermigration/NOTES
deleted file mode 100644
index 702e3af4b6d71d472330616c346d8f3781feac75..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/schroedermigration/NOTES
+++ /dev/null
@@ -1,64 +0,0 @@
-Migration Steps, for a second migration, fixing everyhing missed during the first
-1. Backup DB
-2. Delete problematic properties BOX_SIZE_PROPERTY and STORAGE_BOX_SIZE_1 as Orphan metadata, created by error
-3. Delete problematic vocabulary STORAGE_BOX_POSITIONS as Orphan metadata, created by error
-4. Update Database user id property used by the ELN storage from vocabulary to varchar
-
--- This should return no rows, meaning this property is empty and no values need to be fixed
-SELECT *
-FROM sample_properties sp LEFT JOIN sample_type_property_types stpt ON (sp.stpt_id = stpt.id)
-WHERE stpt_id IN (SELECT id
-FROM sample_type_property_types
-WHERE prty_id IN
-(SELECT id
-FROM property_types
-WHERE daty_id = 7 AND covo_id = 12 AND code LIKE 'STORAGE_USER_%'));
-
--- If no rows we can update to varchar
-UPDATE property_types
-SET covo_id = NULL, daty_id = 1
-WHERE daty_id = 7 AND covo_id = 12 AND code LIKE 'STORAGE_USER_%';
-
-5. Run Script
-
-6. Weird things to Fix, labels without numbers or with underscores
-
-- Storage groups have an underscore on the display name
-
-UPDATE sample_type_property_types
-SET section = 'Physical Storage ' || substring(section from (char_length('Physical Storage_')+1) for 2)
-WHERE section LIKE 'Physical Storage_%';
-
-- Storage properties labels have an underscore on the label name
-
-UPDATE property_types
-SET description = 'Storage Name ' || substring(code from (char_length('STORAGE_NAME_')+1) for 2), label = 'Location ' || substring(code from (char_length('STORAGE_NAME_')+1) for 2)
-WHERE code LIKE 'STORAGE_NAME_%';
-
-UPDATE property_types
-SET description = 'Storage Row ' || substring(code from (char_length('STORAGE_ROW_')+1) for 2), label = 'Storage Row ' || substring(code from (char_length('STORAGE_ROW_')+1) for 2)
-WHERE code LIKE 'STORAGE_ROW_%';
-
-UPDATE property_types
-SET description = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2), label = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2)
-WHERE code LIKE 'STORAGE_COLUMN_%';
-
-UPDATE property_types
-SET description = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2), label = 'Storage Column ' || substring(code from (char_length('STORAGE_COLUMN_')+1) for 2)
-WHERE code LIKE 'STORAGE_COLUMN_%';
-
-UPDATE property_types
-SET description = 'Storage Box Name ' || substring(code from (char_length('STORAGE_BOX_NAME_')+1) for 2), label = 'Box Label ' || substring(code from (char_length('STORAGE_BOX_NAME_')+1) for 2)
-WHERE code LIKE 'STORAGE_BOX_NAME_%';
-
-UPDATE property_types
-SET description = 'Storage User Id ' || substring(code from (char_length('STORAGE_USER_')+1) for 2), label = 'Frozen By ' || substring(code from (char_length('STORAGE_USER_')+1) for 2)
-WHERE code LIKE 'STORAGE_USER_%';
-
-UPDATE property_types
-SET description = 'Storage Box Size ' || substring(code from (char_length('STORAGE_BOX_SIZE_')+1) for 2), label = 'Box Size ' || substring(code from (char_length('STORAGE_BOX_SIZE_')+1) for 2)
-WHERE code LIKE 'STORAGE_BOX_SIZE_%';
-
-UPDATE property_types
-SET description = 'Storage Box Position ' || substring(code from (char_length('STORAGE_BOX_POSITION_')+1) for 2), label = 'Box Position ' || substring(code from (char_length('STORAGE_BOX_POSITION_')+1) for 2)
-WHERE code LIKE 'STORAGE_BOX_POSITION_%';
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/antibodies_script.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/antibodies_script.py
deleted file mode 100644
index 68c92964d38677d279b4182eec13c4ed7343cf66..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/antibodies_script.py
+++ /dev/null
@@ -1,234 +0,0 @@
-""" 
-Managed Property Script for handling General Antibodies.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_QUANTITY = "quantity"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-QUANTITY_LABEL = "quantity"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(antibodies_list, quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    antibodyPath= "/YEAST_LAB/" + antibodies_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, antibodies_list)
-    if not permId:
-        permId = antibodies_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, antibodies_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        antibodies_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-    if antibodies_list:
-          sampleLink = _createSampleLink(antibodies_list, quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL) 
- 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for antibody in elements:
-        antibodies_list = antibody.getAttribute(ATR_CODE, "")
-        name = antibody.getAttribute(ATR_NAME,"") 
-        quantity_list=antibody.getAttribute(ATR_QUANTITY, "")
-   
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, antibody, antibodies_list)
-        row.setCell(CODE_LABEL, antibodies_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new antibody,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new antibody relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRAB')\
-                            .setDescription('Code of antibody, e.g. "FRAB1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected antibody relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of antibody sample, e.g. "FRAB1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected antibody relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new antibody element with values from input fields
-           and add it to existing elements.
-        """
-        antibodies_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(antibodies_list, quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the antibody element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        antibodies_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        
-
-        sampleLink = _createSampleLink(antibodies_list, quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete antibodies that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-#def updateFromBatchInput(bindings):
-#    elements = []
-#    input = bindings.get('')
-#    if input is not None:
-#        commentEntry = _createCommentEntry(input)
-#        elements.append(commentEntry)
-#        property.value = propertyConverter().convertToString(elements)  
-        
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        antibodies = input.split(',')
-        for antibody in antibodies:
-            (code, quantity) = _extractCodeAndQuantity(antibody)
-            commentEntry = _createCommentEntry(input)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink, commentEntry)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(antibody):
-    codeAndQuantity = chemical.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/bacteria_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/bacteria_links.py
deleted file mode 100644
index 48d750b6ebfdc3e053fef6a2ac3491fdfcede0cd..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/bacteria_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(bacterias_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    bacteriaPath= "/YLAB-TEST/" + bacterias_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, bacterias_list)
-    if not permId:
-        permId = bacterias_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, bacterias_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        bacterias_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if bacterias_list:
-          sampleLink = _createSampleLink(bacterias_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for bacteria in elements:
-        bacterias_list = bacteria.getAttribute(ATR_CODE, "")
-        name = bacteria.getAttribute(ATR_NAME,"") 
-        comment_list=bacteria.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, bacteria, bacterias_list)
-        row.setCell(CODE_LABEL, bacterias_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new bacteria,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new bacteria relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRB')\
-                            .setDescription('Code of bacteria, e.g. "FRB1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected bacteria relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of bacteria sample, e.g. "FRB1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected bacteria relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new bacteria element with values from input fields
-           and add it to existing elements.
-        """
-        bacterias_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(bacterias_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the bacteria element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        bacterias_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(bacterias_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete bacterias that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        bacterias = input.split(',')
-        for bacteria in bacterias:
-            (code, comment) = _extractCodeAndComment(bacteria)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(bacteria):
-    codeAndComment = bacteria.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/chemicals_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/chemicals_links.py
deleted file mode 100644
index f68bd11e74af942b30c770153e9f1aa6abd63cc6..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/chemicals_links.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling CHEMICALS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(chemicals_list, concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    chemicalPath= "/YEAST_LAB/" + chemicals_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, chemicals_list)
-    if not permId:
-        permId = chemicals_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, chemicals_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, concentration_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONC_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        chemicals_list = item.get('CODE')
-        concentration_list = item.get('CONCENTRATION')
-    if chemicals_list:
-          sampleLink = _createSampleLink(chemicals_list, concentration_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for chemical in elements:
-        chemicals_list = chemical.getAttribute(ATR_CODE, "")
-        name = chemical.getAttribute(ATR_NAME,"")
-        concentration_list=chemical.getAttribute(ATR_CONC, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, chemical, chemicals_list)
-        row.setCell(CODE_LABEL, chemicals_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONC_LABEL, concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new chemical,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new chemical relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of chemical, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected chemical relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of chemical sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the chemical sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected chemical relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new chemical element with values from input fields
-           and add it to existing elements.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the chemical element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(chemicals_list, concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete chemicals that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        chemicals = input.split(',')
-        for chemical in chemicals:
-            (code, concentration) = _extractCodeAndConcentration(chemical)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(chemical):
-    codeAndConcentration = chemical.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/chemicals_quantity_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/chemicals_quantity_links.py
deleted file mode 100644
index ee60933815a236ab51923fe244e67bf82f83e9ae..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/chemicals_quantity_links.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling CHEMICALS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(chemicals_list, quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    chemicalPath= "/YEAST_LAB/" + chemicals_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, chemicals_list)
-    if not permId:
-        permId = chemicals_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, chemicals_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        chemicals_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-    if chemicals_list:
-          sampleLink = _createSampleLink(chemicals_list, quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for chemical in elements:
-        chemicals_list = chemical.getAttribute(ATR_CODE, "")
-        name = chemical.getAttribute(ATR_NAME,"")
-        quantity_list=chemical.getAttribute(ATR_QUANTITY, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, chemical, chemicals_list)
-        row.setCell(CODE_LABEL, chemicals_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new chemical,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new chemical relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of chemical, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected chemical relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of chemical sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the chemical sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected chemical relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new chemical element with values from input fields
-           and add it to existing elements.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(chemicals_list, quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the chemical element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        chemicals_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(chemicals_list, quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete chemicals that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        chemicals = input.split(',')
-        for chemical in chemicals:
-            (code, quantity) = _extractCodeAndQuantity(chemical)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(chemical):
-    codeAndQuantity = chemical.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/enzymes_link.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/enzymes_link.py
deleted file mode 100644
index 281f61aa76f92dd5c0904d0c42be305bb853db29..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/enzymes_link.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling ENZYMES.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONCENTRATION = "concentration"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONCENTRATION_LABEL = "concentration"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(enzymes_list, concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    enzymePath= "/YEAST_LAB/" + enzymes_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, enzymes_list)
-    if not permId:
-        permId = enzymes_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, enzymes_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONCENTRATION, concentration_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONCENTRATION_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        enzymes_list = item.get('CODE')
-        concentration_list = item.get('CONCENTRATION')
-    if enzymes_list:
-          sampleLink = _createSampleLink(enzymes_list, concentration_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONCENTRATION_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for enzyme in elements:
-        enzymes_list = enzyme.getAttribute(ATR_CODE, "")
-        name = enzyme.getAttribute(ATR_NAME,"")
-        concentration_list=enzyme.getAttribute(ATR_CONCENTRATION, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, enzyme, enzymes_list)
-        row.setCell(CODE_LABEL, enzymes_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONCENTRATION_LABEL, concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new enzyme,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new enzyme relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of enzyme, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONCENTRATION_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected enzyme relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of enzyme sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONCENTRATION_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the enzyme sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONCENTRATION_LABEL, CONCENTRATION_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected enzyme relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new enzyme element with values from input fields
-           and add it to existing elements.
-        """
-        enzymes_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONCENTRATION_LABEL)
-        sampleLink = _createSampleLink(enzymes_list, concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the enzyme element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        enzymes_list = action.getInputValue(CODE_LABEL)
-        concentration_list = action.getInputValue(CONCENTRATION_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(enzymes_list, concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete enzymes that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        enzymes = input.split(',')
-        for enzyme in enzymes:
-            (code, concentration) = _extractCodeAndConcentration(enzyme)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(enzyme):
-    codeAndConcentration = enzyme.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/generic_annotation.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/generic_annotation.py
deleted file mode 100644
index 3625b9e3dcb618d93be558ff7b13ec62cfa41440..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/generic_annotation.py
+++ /dev/null
@@ -1,240 +0,0 @@
-""" 
-Managed Property Script for links to samples with concentration, quantity, details
-
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_DETAIL = "detail"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL="name"
-DETAIL_LABEL = "details"
-
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(entities_list, quantity_list, detail_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    entityPath= "/YEAST_LAB/" + entities_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, entities_list)
-    if not permId:
-        permId = entities_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, entities_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    if not quantity_list:
-        quantity_list = ' '
-    if not detail_list:
-        detail_list=' '
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-    sampleLink.addAttribute(ATR_DETAIL, detail_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL, DETAIL_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        entities_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-        detail_list = item.get('DETAIL')
-    if entities_list:
-          sampleLink = _createSampleLink(entities_list, quantity_list, detail_list)
-          
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(DETAIL_LABEL) 
-    
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for entity in elements:
-        entities_list = entity.getAttribute(ATR_CODE, "")
-        name = entity.getAttribute(ATR_NAME,"")
-        quantity_list=entity.getAttribute(ATR_QUANTITY, "")
-        detail_list=entity.getAttribute(ATR_DETAIL, "") 
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, entity, entities_list)
-        row.setCell(CODE_LABEL, entities_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        row.setCell(DETAIL_LABEL, detail_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new entity,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new entity relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FR')\
-                            .setDescription('Code of entity, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Quantity'),
-        inputWidgetFactory().createMultilineTextInputField(DETAIL_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Comment')                              
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected entity relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of entity sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Quantity of the entity sample, e.g. "1M"'),
-        inputWidgetFactory().createMultilineTextInputField(DETAIL_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Comment')  
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-    editAction.addBinding(DETAIL_LABEL, DETAIL_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected entity relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new entity element with values from input fields
-           and add it to existing elements.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        detail_list = action.getInputValue(DETAIL_LABEL) 
-        sampleLink = _createSampleLink(entities_list, quantity_list, detail_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the entity element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        detail_list = action.getInputValue(DETAIL_LABEL) 
-        
-
-        sampleLink = _createSampleLink(entities_list, quantity_list, detail_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete entities that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        entities = input.split(',')
-        for entity in entities:
-            (code, quantity, detail) = _extractCodeAndQuantity(entity)
-#            sampleLink = _createSampleLink(code, quantity, concentration)
-            sampleLink =   _createSampleLink(entities_list, quantity_list, detail_list)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(entity):
-    codeAndQuantity = entity.split(':')
-    if (len(codeAndQuantity) == 3):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip(), codeAndQuantity[2].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/generic_quantity_link_script.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/generic_quantity_link_script.py
deleted file mode 100644
index 33fc9d393913581da738e9b2bf318710e3b91775..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/generic_quantity_link_script.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling ENTITIES.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME="name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL="name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(entities_list, quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    entityPath= "/YEAST_LAB/" + entities_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, entities_list)
-    if not permId:
-        permId = entities_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')    
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, entities_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1:2nM, FRC2, FRC3:3 nM
-"""
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        entities_list = item.get('CODE')
-        quantity_list = item.get('QUANTITY')
-    if entities_list:
-          sampleLink = _createSampleLink(entities_list, quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for entity in elements:
-        entities_list = entity.getAttribute(ATR_CODE, "")
-        name = entity.getAttribute(ATR_NAME,"")
-        quantity_list=entity.getAttribute(ATR_QUANTITY, "")
-
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, entity, entities_list)
-        row.setCell(CODE_LABEL, entities_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new entity,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new entity relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FR')\
-                            .setDescription('Code of entity, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected entity relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of entity sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the entity sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected entity relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new entity element with values from input fields
-           and add it to existing elements.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(entities_list, quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the entity element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        entities_list = action.getInputValue(CODE_LABEL)
-        quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(entities_list, quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete entities that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        entities = input.split(',')
-        for entity in entities:
-            (code, quantity) = _extractCodeAndQuantity(entity)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(entity):
-    codeAndQuantity = entity.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/media_link.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/media_link.py
deleted file mode 100644
index d28176cfcf22c81b8b677bec662634cd0c57ee27..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/media_link.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling MEDIA.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(medias_list, media_concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    mediaPath= "/YEAST_LAB/" + medias_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, medias_list)
-    if not permId:
-        permId = medias_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')       
-    sampleLink = elementFactory().createSampleLink(permId)
-   
-    sampleLink.addAttribute(ATR_CODE, medias_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, media_concentration_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONC_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        medias_list = item.get('CODE')
-        media_concentration_list = item.get('CONCENTRATION')
-    if medias_list:
-          sampleLink = _createSampleLink(medias_list, media_concentration_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for media in elements:
-        medias_list = media.getAttribute(ATR_CODE, "")
-        name = media.getAttribute(ATR_NAME,"")
-        media_concentration_list=media.getAttribute(ATR_CONC, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, media, medias_list)
-        row.setCell(CODE_LABEL, medias_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(CONC_LABEL, media_concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new media,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new media relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRM')\
-                            .setDescription('Code of media, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected media relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of media sample, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the media sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected media relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new media element with values from input fields
-           and add it to existing elements.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(medias_list, media_concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the media element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(medias_list, media_concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete medias that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        medias = input.split(',')
-        for media in medias:
-            (code, concentration) = _extractCodeAndConcentration(media)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(media):
-    codeAndConcentration = media.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/media_quantity_link.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/media_quantity_link.py
deleted file mode 100644
index 37a1b91e1bd4e1a428e34033622fdc17438b36e3..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/media_quantity_link.py
+++ /dev/null
@@ -1,219 +0,0 @@
-""" 
-Managed Property Script for handling MEDIA.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(medias_list, media_quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    mediaPath= "/YEAST_LAB/" + medias_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, medias_list)
-    if not permId:
-        permId = medias_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')       
-    sampleLink = elementFactory().createSampleLink(permId)
-   
-    sampleLink.addAttribute(ATR_CODE, medias_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, media_quantity_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        medias_list = item.get('CODE')
-        media_quantity_list = item.get('QUANTITY')
-    if medias_list:
-          sampleLink = _createSampleLink(medias_list, media_quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for media in elements:
-        medias_list = media.getAttribute(ATR_CODE, "")
-        name = media.getAttribute(ATR_NAME,"")
-        media_quantity_list=media.getAttribute(ATR_QUANTITY, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, media, medias_list)
-        row.setCell(CODE_LABEL, medias_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(QUANTITY_LABEL, media_quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new media,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new media relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRM')\
-                            .setDescription('Code of media, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected media relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of media sample, e.g. "FRM1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the media sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected media relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new media element with values from input fields
-           and add it to existing elements.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(medias_list, media_quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the media element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        medias_list = action.getInputValue(CODE_LABEL)
-        media_quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(medias_list, media_quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete medias that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-    
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        medias = input.split(',')
-        for media in medias:
-            (code, quantity) = _extractCodeAndQuantity(media)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(media):
-    codeAndQuantity = media.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/oligo_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/oligo_links.py
deleted file mode 100644
index 2da2b83242cebebbd3fa4d9948dfe698a0f64908..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/oligo_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(oligos_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    oligoPath= "/YLAB-TEST/" + oligos_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, oligos_list)
-    if not permId:
-        permId = oligos_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, oligos_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        oligos_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if oligos_list:
-          sampleLink = _createSampleLink(oligos_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for oligo in elements:
-        oligos_list = oligo.getAttribute(ATR_CODE, "")
-        name = oligo.getAttribute(ATR_NAME,"") 
-        comment_list=oligo.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, oligo, oligos_list)
-        row.setCell(CODE_LABEL, oligos_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new oligo,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new oligo relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRO')\
-                            .setDescription('Code of oligo, e.g. "FRO1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected oligo relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of oligo sample, e.g. "FRO1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected oligo relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new oligo element with values from input fields
-           and add it to existing elements.
-        """
-        oligos_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(oligos_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the oligo element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        oligos_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(oligos_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete oligos that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        oligos = input.split(',')
-        for oligo in oligos:
-            (code, comment) = _extractCodeAndComment(oligo)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(oligo):
-    codeAndComment = oligo.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pcr_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pcr_links.py
deleted file mode 100644
index c236c1ab02f18aa8016c1d99b40d522c1f4169af..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pcr_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling PCR samples.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(pcrs_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    pcrPath= "/YLAB-TEST/" + pcrs_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, pcrs_list)
-    if not permId:
-        permId = pcrs_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, pcrs_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        pcrs_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if pcrs_list:
-          sampleLink = _createSampleLink(pcrs_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for pcr in elements:
-        pcrs_list = pcr.getAttribute(ATR_CODE, "")
-        name = pcr.getAttribute(ATR_NAME,"") 
-        comment_list=pcr.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, pcr, pcrs_list)
-        row.setCell(CODE_LABEL, pcrs_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new pcr,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new pcr relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRPCR')\
-                            .setDescription('Code of pcr, e.g. "FRPCR1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected pcr relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of pcr sample, e.g. "FRPCR1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected pcr relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new pcr element with values from input fields
-           and add it to existing elements.
-        """
-        pcrs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(pcrs_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the pcr element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        pcrs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(pcrs_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete pcrs that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        pcrs = input.split(',')
-        for pcr in pcrs:
-            (code, comment) = _extractCodeAndComment(pcr)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(pcr):
-    codeAndComment = pcr.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/plasmid parents.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/plasmid parents.py
deleted file mode 100644
index c27d5f1e1e921788d37c3d19c80eb55e0306349a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/plasmid parents.py	
+++ /dev/null
@@ -1,368 +0,0 @@
-""" 
-Managed Property Script for handling PLASMID parents of YEAST samples.
-
-@author: Piotr Buczek
-"""
-
-import re
-
-
-print "###################"
-"""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""input pattern matching one plasmid, e.g.: 
-- 'FRP1 (DEL:URA3)', 
-- 'FRP2 (INT)', 
-- 'FRP3(MOD:URA3)', 
-- 'FRP4'
-"""
-INPUT_PATTERN = """
-                 # no '^': allow whitespace at the beginning
-    ([^ (]*)     # 1st group: match code of a sample, everything before a space or '(' (e.g. 'FRP')
-    (\ *\(       # start of 2nd group (matches an optional relationship type with annotation) 
-                 # any spaces followed by a '('
-    ([^:]*)      # 3rd group: match relationship type, any character but ':' (e.g. 'DEL', 'INT', 'MOD')
-    :?           # optional ':' separator
-    (.*)         # 4th group: match annotation, any text (e.g. 'URA3')
-    \))?         # end of 2nd (optional) group: closing bracket of relationship details
-                 # no '$': allow whitespace at the end
-"""
-
-""" due to some weird jython threading issue, we need to compile the pattern outside the function body """
-inputPattern = re.compile(INPUT_PATTERN, re.VERBOSE)
-
-"""relationship types shortcuts"""
-
-DEL_REL_TYPE = 'DEL'
-INT_REL_TYPE = 'INT'
-MOD_REL_TYPE = 'MOD'
-
-"""tuple of supported relationship types as shortcuts"""
-REL_TYPES = (DEL_REL_TYPE, INT_REL_TYPE, MOD_REL_TYPE)
-"""dictionary from relationship type shortcut to its 'character' representation"""
-REL_TYPE_CHARS = {
-    DEL_REL_TYPE: u'\u0394', # unicode '∆'
-    INT_REL_TYPE: '::', 
-    MOD_REL_TYPE: '_' 
-}
-"""dictionary from relationship type shortcut to its full name/label"""
-REL_TYPE_LABELS = {
-    DEL_REL_TYPE: 'deletion', 
-    INT_REL_TYPE: 'integration', 
-    MOD_REL_TYPE: 'modification' 
-}
-
-REL_TYPE_LABEL_OTHER = '(other)'
-REL_TYPE_LABELS_WITH_NONE = tuple([REL_TYPE_LABEL_OTHER] + REL_TYPE_LABELS.values())
-
-"""names of additional sample XML element attributes"""
-
-ATR_CODE = "code"
-ATR_RELATIONSHIP = "rel"
-ATR_ANNOTATION = "annotation"
-
-"""labels of table columns"""
-
-CONNECTION_LABEL = "connection"
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-RELATIONSHIP_LABEL = "relationship"
-ANNOTATION_LABEL = "annotation"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _group(pattern, input):
-    """@return: groups returned by performing pattern search with given @pattern on given @input"""
-    return pattern.search(input).groups()
-
-
-def _translateToChar(relationship):
-    """
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @return: character representation of given @relationship, 
-                empty string for null
-                '[<relationship>]' for unknown relationship
-    """
-    if relationship:
-        if relationship in REL_TYPE_CHARS:
-            return REL_TYPE_CHARS[relationship]
-        else:
-            return "[" + relationship + "]"
-    else:
-        return ""
-    
-    
-def _translateToLabel(relationship):
-    """
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @return: full name of given @relationship, 
-                empty string for null, 
-                '[<relationship>]' for unknown relationship
-    """
-    if relationship:
-        if relationship in REL_TYPE_LABELS:
-            return REL_TYPE_LABELS[relationship]
-        else:
-            return "[" + relationship + "]"
-    else:
-        return REL_TYPE_LABEL_OTHER    
-
-def _translateFromLabel(relationshipLabel):
-    """
-       @param relationshipLabel: relationship type as label (@see REL_TYPE_LABELS_WITH_NONE)
-       @return: type of given @relationshipLabel, None for REL_TYPE_LABEL_OTHER, 
-    """
-    if relationshipLabel == REL_TYPE_LABEL_OTHER:
-        return None
-    elif relationshipLabel == 'deletion':
-        return DEL_REL_TYPE
-    elif relationshipLabel == 'integration':
-        return INT_REL_TYPE
-    elif relationshipLabel == 'modification':
-        return MOD_REL_TYPE    
-
-def _createConnectionString(code, relationship, annotation):
-    """
-       @param code: code of a sample
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @param annotation: annotation of the relationship, may be null
-       @return: string representation of a connection with @relationship translated to a 'character'
-    """
-    result = code
-    if relationship:
-        result += _translateToChar(relationship)
-    if annotation:
-        result += annotation
-    return result
-
-
-def _createSampleLink(code, relationship, annotation):
-    """
-       Creates sample link XML element for sample with specified @code. The element will contain
-       given @code as 'code' attribute apart from standard 'permId' attribute. If specified 
-       @relationship or @annotation are not null they will also be contained as attributes.
-       
-       If the sample doesn't exist in DB a fake link will be created with @code as permId.
-       
-       @param code: code of a sample
-       @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-       @param annotation: annotation of the relationship, may be null
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FRP2" permId="20110309154532868-4219" relationship="DEL" annotation="URA3"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-       - '<Sample code="FRP4" permId="20110309154532868-4219" relationship="INT"/>'
-       @raise ValidationException: if the specified relationship type is unknown
-    """
-    permId = entityInformationProvider().getSamplePermId(SPACE, code)
-    if not permId:
-        permId = code
-    sampleLink = elementFactory().createSampleLink(permId)
-    sampleLink.addAttribute(ATR_CODE, code)
-    if relationship:
-        sampleLink.addAttribute(ATR_RELATIONSHIP, relationship)
-        if relationship in REL_TYPES:
-            connectionString = _createConnectionString(code, relationship, annotation)
-        else:
-            raise ValidationException("Unknown relationship: '" + relationship + 
-                                      "'. Expected one of: " + REL_TYPES)
-    if annotation:
-        sampleLink.addAttribute(ATR_ANNOTATION, annotation)
-    return sampleLink    
-
-""" MAIN FUNCTIONS """
-
-"""Example input:
-
-FRP1 (DEL:URA3), FRP2 (INT), FRP3 (MOD:URA3), FRP4
-
-Relationship types:
-- DEL: deletion
-- INT: integration
-- MOD: modification
-"""
-
-#def showRawValueInForms():
- #   return False
- 
-#def batchColumnNames():
-#    return [CODE_LABEL, RELATIONSHIP_LABEL, ANNOTATION_LABEL]
-
-
-
- 
-#def updateFromRegistrationForm(bindings):
-#    elements = []
-#    for item in bindings:
-#        code = item.get("CODE")
-#        relationship = item.get("RELATIONSHIP")
-#        annotation=item.get("ANNOTATION")
-#        print "code is", code
-#    if code:
-#        print "bindings", bindings, "+", code, "+", relationship, "+", annotation
-
-#        sampleLink = _createSampleLink(code, relationship, annotation)
- #       elements.append(sampleLink)
-            
-#    property.value = propertyConverter().convertToString(elements)
- 
-
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        plasmids = input.split(',')
-        for p in plasmids:
-            (code, g, relationship, annotation) = _group(inputPattern, p.strip())
-            sampleLink = _createSampleLink(code, relationship, annotation)
-            elements.append(sampleLink)
-    
-    parentsInput = bindings.get(originalColumnNameBindingKey('YEAST_PARENTS'))
-    if parentsInput is not None:
-        parents = parentsInput.split(',')
-        for parent in parents:
-            permId = entityInformationProvider().getSamplePermId(SPACE, parent.strip())
-            parentPlasmids = entityInformationProvider().getSamplePropertyValue(permId, 'PLASMIDS')
-            if parentPlasmids is None:
-                continue
-            parentElements = list(propertyConverter().convertStringToElements(parentPlasmids))
-            for parentLink in parentElements:
-                elements.append(parentLink)     
-        
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CONNECTION_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(RELATIONSHIP_LABEL)
-    tableBuilder.addHeader(ANNOTATION_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for plasmid in elements:
-        code = plasmid.getAttribute(ATR_CODE, "")
-        relationship = plasmid.getAttribute(ATR_RELATIONSHIP, "")
-        annotation = plasmid.getAttribute(ATR_ANNOTATION, "")
-   
-        row = tableBuilder.addRow()
-        row.setCell(CONNECTION_LABEL, _createConnectionString(code, relationship, annotation))
-        row.setCell(LINK_LABEL, plasmid, code)
-        row.setCell(CODE_LABEL, code)
-        row.setCell(RELATIONSHIP_LABEL, _translateToLabel(relationship))
-        row.setCell(ANNOTATION_LABEL, annotation)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new plasmid relationship,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new plasmid relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRP')\
-                            .setDescription('Code of plasmid sample, e.g. "FRP1"'),
-        inputWidgetFactory().createComboBoxInputField(RELATIONSHIP_LABEL, REL_TYPE_LABELS_WITH_NONE)\
-                            .setMandatory(False)\
-                            .setValue(REL_TYPE_LABEL_OTHER),
-        inputWidgetFactory().createTextInputField(ANNOTATION_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Relationship annotation, e.g. "URA3"'),
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected plasmid relationship,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected plasmid relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of plasmid sample, e.g. "FRP1"'),
-        inputWidgetFactory().createComboBoxInputField(RELATIONSHIP_LABEL, REL_TYPE_LABELS_WITH_NONE)\
-                            .setMandatory(False),
-        inputWidgetFactory().createTextInputField(ANNOTATION_LABEL)\
-                            .setMandatory(False)\
-                            .setDescription('Relationship annotation, e.g. "URA3"'),
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(RELATIONSHIP_LABEL, RELATIONSHIP_LABEL)
-    editAction.addBinding(ANNOTATION_LABEL, ANNOTATION_LABEL)
-  
-    """
-       3. delete selected plasmid relationships.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected plasmid relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new plasmid relationship element with values from input fields
-           and add it to existing elements.
-        """
-        code = action.getInputValue(CODE_LABEL)
-        relationshipLabel = action.getInputValue(RELATIONSHIP_LABEL)
-        relationship = _translateFromLabel(relationshipLabel)
-        annotation = action.getInputValue(ANNOTATION_LABEL)
-        sampleLink = _createSampleLink(code, relationship, annotation)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the plasmid relationship element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        code = action.getInputValue(CODE_LABEL)
-        relationshipLabel = action.getInputValue(RELATIONSHIP_LABEL)
-        relationship = _translateFromLabel(relationshipLabel)
-        annotation = action.getInputValue(ANNOTATION_LABEL)
-        sampleLink = _createSampleLink(code, relationship, annotation)
-        
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the relationships that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/plasmid_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/plasmid_links.py
deleted file mode 100644
index 6ae7be4fe47ea4f8b34e22d9d12afd29245f2264..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/plasmid_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(plamsids_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    plamsidPath= "/YLAB-TEST/" + plamsids_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, plamsids_list)
-    if not permId:
-        permId = plamsids_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, plamsids_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        plamsids_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if plamsids_list:
-          sampleLink = _createSampleLink(plamsids_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for plamsid in elements:
-        plamsids_list = plamsid.getAttribute(ATR_CODE, "")
-        name = plamsid.getAttribute(ATR_NAME,"") 
-        comment_list=plamsid.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, plamsid, plamsids_list)
-        row.setCell(CODE_LABEL, plamsids_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new plamsid,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new plamsid relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRP')\
-                            .setDescription('Code of plamsid, e.g. "FRP1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected plamsid relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of plamsid sample, e.g. "FRP1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected plamsid relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new plamsid element with values from input fields
-           and add it to existing elements.
-        """
-        plamsids_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(plamsids_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the plamsid element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        plamsids_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(plamsids_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete plamsids that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        plamsids = input.split(',')
-        for plamsid in plamsids:
-            (code, comment) = _extractCodeAndComment(plamsid)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(plamsid):
-    codeAndComment = plamsid.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pombe-script.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pombe-script.py
deleted file mode 100644
index b435162ebdb145a6bc17a0c16bb0bba4defcc066..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pombe-script.py
+++ /dev/null
@@ -1,186 +0,0 @@
-""" 
-Managed Property Script for handling links to POMBE samples.
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(pombes_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    pombePath= "/YEAST_LAB/" + pombes_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, pombes_list)
-    if not permId:
-        permId = pombes_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, pombes_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    
-    return sampleLink    
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        pombes_list = item.get('CODE')
-    if pombes_list:
-          sampleLink = _createSampleLink(pombes_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
- 
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for pombe in elements:
-        pombes_list = pombe.getAttribute(ATR_CODE, "")
-        name = pombe.getAttribute(ATR_NAME,"") 
-   
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, pombe, pombes_list)
-        row.setCell(CODE_LABEL, pombes_list)
-        row.setCell(NAME_LABEL, name)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new pombe,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new pombe relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of pombe, e.g. "FRC1"'),
-       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected pombe relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of pombe sample, e.g. "FRC1"'),
-       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-
-
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected pombe relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new pombe element with values from input fields
-           and add it to existing elements.
-        """
-        pombes_list = action.getInputValue(CODE_LABEL)
-        sampleLink = _createSampleLink(pombes_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the pombe element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        pombes_list = action.getInputValue(CODE_LABEL)
-  
-        sampleLink = _createSampleLink(pombes_list)
-  
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete pombes that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        commentEntry = _createCommentEntry(input)
-        elements.append(commentEntry)
-        property.value = propertyConverter().convertToString(elements)  
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pombe_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pombe_links.py
deleted file mode 100644
index 91e1baebd09cfed9030716909c0e98a6e6f5fc78..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/pombe_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(pombes_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    pombePath= "/YLAB-TEST/" + pombes_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, pombes_list)
-    if not permId:
-        permId = pombes_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, pombes_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        pombes_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if pombes_list:
-          sampleLink = _createSampleLink(pombes_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for pombe in elements:
-        pombes_list = pombe.getAttribute(ATR_CODE, "")
-        name = pombe.getAttribute(ATR_NAME,"") 
-        comment_list=pombe.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, pombe, pombes_list)
-        row.setCell(CODE_LABEL, pombes_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new pombe,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new pombe relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRSP')\
-                            .setDescription('Code of pombe, e.g. "FRSP1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected pombe relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of pombe sample, e.g. "FRSP1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected pombe relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new pombe element with values from input fields
-           and add it to existing elements.
-        """
-        pombes_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(pombes_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the pombe element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        pombes_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(pombes_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete pombes that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        pombes = input.split(',')
-        for pombe in pombes:
-            (code, comment) = _extractCodeAndComment(pombe)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(pombe):
-    codeAndComment = pombe.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/protocols_script.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/protocols_script.py
deleted file mode 100644
index 201a513197354d87bbbc3540195087d4a71cc6cf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/protocols_script.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling General Protocols.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(protocols_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    protocolPath= "/YLAB-TEST/" + protocols_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, protocols_list)
-    if not permId:
-        permId = protocols_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, protocols_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        protocols_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if protocols_list:
-          sampleLink = _createSampleLink(protocols_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL, 300) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for protocol in elements:
-        protocols_list = protocol.getAttribute(ATR_CODE, "")
-        name = protocol.getAttribute(ATR_NAME,"") 
-        comment_list=protocol.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, protocol, protocols_list)
-        row.setCell(CODE_LABEL, protocols_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new protocol,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new protocol relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRPROT')\
-                            .setDescription('Code of protocol, e.g. "FRPROT1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected protocol relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of protocol sample, e.g. "FRPROT1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected protocol relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new protocol element with values from input fields
-           and add it to existing elements.
-        """
-        protocols_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(protocols_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the protocol element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        protocols_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(protocols_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete protocols that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        protocols = input.split(',')
-        for protocol in protocols:
-            (code, comment) = _extractCodeAndComment(protocol)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(protocol):
-    codeAndComment = protocol.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/readout_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/readout_links.py
deleted file mode 100644
index d645772e58338333f59d03ded728c979260b8ad7..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/readout_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(readouts_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    readoutPath= "/YLAB-TEST/" + readouts_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, readouts_list)
-    if not permId:
-        permId = readouts_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, readouts_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        readouts_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if readouts_list:
-          sampleLink = _createSampleLink(readouts_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for readout in elements:
-        readouts_list = readout.getAttribute(ATR_CODE, "")
-        name = readout.getAttribute(ATR_NAME,"") 
-        comment_list=readout.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, readout, readouts_list)
-        row.setCell(CODE_LABEL, readouts_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new readout,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new readout relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRR')\
-                            .setDescription('Code of readout, e.g. "FRR1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected readout relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of readout sample, e.g. "FRR1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected readout relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new readout element with values from input fields
-           and add it to existing elements.
-        """
-        readouts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(readouts_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the readout element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        readouts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(readouts_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete readouts that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        readouts = input.split(',')
-        for readout in readouts:
-            (code, comment) = _extractCodeAndComment(readout)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(readout):
-    codeAndComment = readout.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/solution_buffers_quantity_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/solution_buffers_quantity_links.py
deleted file mode 100644
index bdf590f636a6aaaeb8ed2f61654929463805a4b8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/solution_buffers_quantity_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling SOLUTIONS BUFFERS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(buffers_list, buffer_quantity_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    bufferPath= "/YEAST_LAB/" + buffers_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, buffers_list)
-    if not permId:
-        permId = buffers_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, buffers_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_QUANTITY, buffer_quantity_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, QUANTITY_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        buffers_list = item.get('CODE')
-        buffer_quantity_list = item.get('QUANTITY')
-    if buffers_list:
-          sampleLink = _createSampleLink(buffers_list, buffer_quantity_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(QUANTITY_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for buffer in elements:
-        buffers_list = buffer.getAttribute(ATR_CODE, "")
-        name = buffer.getAttribute(ATR_NAME,"")
-        buffer_quantity_list=buffer.getAttribute(ATR_QUANTITY, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, buffer, buffers_list)
-        row.setCell(CODE_LABEL, buffers_list)
-        row.setCell(NAME_LABEL,name)
-        row.setCell(QUANTITY_LABEL, buffer_quantity_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new buffer,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new buffer relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of buffer, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected buffer relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of buffer sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(QUANTITY_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Quantity of the buffer sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(QUANTITY_LABEL, QUANTITY_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected buffer relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new buffer element with values from input fields
-           and add it to existing elements.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_quantity_list = action.getInputValue(QUANTITY_LABEL)
-        sampleLink = _createSampleLink(buffers_list, buffer_quantity_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the buffer element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_quantity_list = action.getInputValue(QUANTITY_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(buffers_list, buffer_quantity_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete buffers that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        buffers = input.split(',')
-        for buffer in buffers:
-            (code, quantity) = _extractCodeAndQuantity(buffer)
-            sampleLink = _createSampleLink(code, quantity)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndQuantity(buffer):
-    codeAndQuantity = buffer.split(':')
-    if (len(codeAndQuantity) == 2):
-        return (codeAndQuantity[0].strip(), codeAndQuantity[1].strip())
-    else:
-        return (codeAndQuantity[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/solutions_buffers_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/solutions_buffers_links.py
deleted file mode 100644
index 34501031b8140dd2bc6b2edfe9a97bf0a4acf949..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/solutions_buffers_links.py
+++ /dev/null
@@ -1,218 +0,0 @@
-""" 
-Managed Property Script for handling SOLUTIONS BUFFERS.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-ATR_NAME = "name"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-NAME_LABEL = "name"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(buffers_list, buffer_concentration_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    bufferPath= "/YEAST_LAB/" + buffers_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, buffers_list)
-    if not permId:
-        permId = buffers_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, buffers_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_CONC, buffer_concentration_list)
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRSOB1: 3nM, FRSOB2, FRSOB3: 4nM
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, CONC_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        buffers_list = item.get('CODE')
-        buffers_concentration_list = item.get('CONCENTRATION')
-     if buffers_list:
-          sampleLink = _createSampleLink(buffers_list, buffers_concentration_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL)
-    tableBuilder.addHeader(CONC_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for buffer in elements:
-        buffers_list = buffer.getAttribute(ATR_CODE, "")
-        name = buffer.getAttribute(ATR_NAME,"")
-        buffer_concentration_list=buffer.getAttribute(ATR_CONC, "")
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, buffer, buffers_list)
-        row.setCell(CODE_LABEL, buffers_list)
-        row.setCell(NAME_LABEL,name)
-        row.setCell(CONC_LABEL, buffer_concentration_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new buffer,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new buffer relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRC')\
-                            .setDescription('Code of buffer, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected buffer relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of buffer sample, e.g. "FRC1"'),
-        inputWidgetFactory().createTextInputField(CONC_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Concentration of the buffer sample, e.g. "1M"'),
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(CONC_LABEL, CONC_LABEL) 
-
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected buffer relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new buffer element with values from input fields
-           and add it to existing elements.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_concentration_list = action.getInputValue(CONC_LABEL)
-        sampleLink = _createSampleLink(buffers_list, buffer_concentration_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the buffer element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        buffers_list = action.getInputValue(CODE_LABEL)
-        buffer_concentration_list = action.getInputValue(CONC_LABEL)
-
-        
-
-        sampleLink = _createSampleLink(buffers_list, buffer_concentration_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete buffers that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        buffers = input.split(',')
-        for buffer in buffers:
-            (code, concentration) = _extractCodeAndConcentration(buffer)
-            sampleLink = _createSampleLink(code, concentration)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndConcentration(buffer):
-    codeAndConcentration = buffer.split(':')
-    if (len(codeAndConcentration) == 2):
-        return (codeAndConcentration[0].strip(), codeAndConcentration[1].strip())
-    else:
-        return (codeAndConcentration[0].strip(), "n.a.")
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/western_blot_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/western_blot_links.py
deleted file mode 100644
index 5e0b698152bd15d6dce10834e2407cd9d6521c7c..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/western_blot_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling WB samples.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(wbs_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    wbPath= "/YLAB-TEST/" + wbs_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, wbs_list)
-    if not permId:
-        permId = wbs_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, wbs_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        wbs_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if wbs_list:
-          sampleLink = _createSampleLink(wbs_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for wb in elements:
-        wbs_list = wb.getAttribute(ATR_CODE, "")
-        name = wb.getAttribute(ATR_NAME,"") 
-        comment_list=wb.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, wb, wbs_list)
-        row.setCell(CODE_LABEL, wbs_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new wb,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new wb relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRWB')\
-                            .setDescription('Code of wb, e.g. "FRWB1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected wb relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of wb sample, e.g. "FRWB1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected wb relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new wb element with values from input fields
-           and add it to existing elements.
-        """
-        wbs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(wbs_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the wb element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        wbs_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(wbs_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete wbs that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        wbs = input.split(',')
-        for wb in wbs:
-            (code, comment) = _extractCodeAndComment(wb)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(wb):
-    codeAndComment = wb.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/yeast parents.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/yeast parents.py
deleted file mode 100644
index eb013fcfd6c93c3ae95ad7b4fd65fdaf5d769365..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/yeast parents.py	
+++ /dev/null
@@ -1,182 +0,0 @@
-""" 
-Managed Property Script for handling YEAST parents of YEAST samples.
-
-@author: Piotr Buczek
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""plasmid_list attribute name"""
-ATR_CODE = "code"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(plasmid_list):
-    """
-       Creates sample link XML element for sample with specified 'plasmid_list'. The element will contain
-       given plasmid_list as 'plasmid_list' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'plasmid_list' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample plasmid_list="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample plasmid_list="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    plasmidPath= "/YEAST_LAB/" + plasmid_list
-    permId = entityInformationProvider().getSamplePermId(SPACE, plasmid_list)
-    if not permId:
-        permId = plasmid_list
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, plasmid_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRY1, FRY2, FRY3, FRY4
-"""
-
-#def showRawValueInForms():
- #   return False
- 
-#def batchColumnNames():
-#    return [CODE_LABEL]
-
-#def updateFromRegistrationForm(bindings):
-#    elements = []
-#    for item in bindings:
-#        plasmid_list = item.get('CODE')
-#        sampleLink = _createSampleLink(plasmid_list)
- #       elements.append(sampleLink)
-            
-#    property.value = propertyConverter().convertToString(elements)
-
- 
-
-
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        samples = input.split(',')
-        for plasmid_list in samples:
-            sampleLink = _createSampleLink(plasmid_list.strip())
-            elements.append(sampleLink)
-    property.value = propertyConverter().convertToString(elements)
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for plasmid in elements:
-        plasmid_list = plasmid.getAttribute(ATR_CODE, "")
-   
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, plasmid, plasmid_list)
-        row.setCell(CODE_LABEL, plasmid_list)
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new yeast parent,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new plasmid relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRY')\
-                            .setDescription('Code of yeast parent sample, e.g. "FRY1"')
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected plasmid relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of yeast parent sample, e.g. "FRY1"')
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected yeast parent relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new yeast parent element with values from input fields
-           and add it to existing elements.
-        """
-        plasmid_list = action.getInputValue(CODE_LABEL)
-        sampleLink = _createSampleLink(plasmid_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the yeast parent element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        plasmid_list = action.getInputValue(CODE_LABEL)
-        sampleLink = _createSampleLink(plasmid_list)
-        
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete yeast parents that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)    
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/yeast_links.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/yeast_links.py
deleted file mode 100644
index 98428a0c4ff9acc9d1b80f742b74f5bc9871c949..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_legacy/yeast_links.py
+++ /dev/null
@@ -1,221 +0,0 @@
-""" 
-Managed Property Script for handling Readouts.
-
-
-"""
-
-import re
-
-""""space that all parents come from (fixed)"""
-SPACE = "YEAST_LAB"
-
-"""code attribute name"""
-ATR_CODE = "code"
-ATR_NAME = "name"
-ATR_COMMENT = "comment"
-
-"""labels of table columns"""
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-NAME_LABEL = "name"
-COMMENT_LABEL = "comment"
-
-"""action labels"""
-
-ADD_ACTION_LABEL = "Add"
-EDIT_ACTION_LABEL = "Edit"
-DELETE_ACTION_LABEL = "Delete"
-
-"""helper functions"""
-
-def _createSampleLink(yeasts_list, comment_list):
-    """
-       Creates sample link XML element for sample with specified 'code'. The element will contain
-       given code as 'code' attribute apart from standard 'permId' attribute.
-       
-       If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-       
-       @return: sample link XML element as string, e.g.:
-       - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-       - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-    """
-    yeastPath= "/YLAB-TEST/" + yeasts_list
-    permId =entityInformationProvider().getSamplePermId(SPACE, yeasts_list)
-    if not permId:
-        permId = yeasts_list
-    name  = entityInformationProvider().getSamplePropertyValue(permId, 'NAME')
-    print "the name is", name
-    sampleLink = elementFactory().createSampleLink(permId)
-    
-    sampleLink.addAttribute(ATR_CODE, yeasts_list)
-    sampleLink.addAttribute(ATR_NAME, name) 
-    sampleLink.addAttribute(ATR_COMMENT, comment_list)
-    
-    return sampleLink    
-
-
-"""
-Example input:
-
-FRC1, FRC2, FRC3, FRC4
-"""
-
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [CODE_LABEL, COMMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        yeasts_list = item.get('CODE')
-        comment_list = item.get('COMMENT')
-    if yeasts_list:
-          sampleLink = _createSampleLink(yeasts_list, comment_list)
-          elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-
-def configureUI():
-    """Create table builder and add columns."""
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader(LINK_LABEL)
-    tableBuilder.addHeader(CODE_LABEL)
-    tableBuilder.addHeader(NAME_LABEL) 
-    tableBuilder.addHeader(COMMENT_LABEL) 
-
-    """The property value should contain XML with list of samples. Add a new row for every sample."""
-    elements = list(propertyConverter().convertToElements(property))
-    for yeast in elements:
-        yeasts_list = yeast.getAttribute(ATR_CODE, "")
-        name = yeast.getAttribute(ATR_NAME,"") 
-        comment_list=yeast.getAttribute(ATR_COMMENT, "")  
-        
-        row = tableBuilder.addRow()
-        row.setCell(LINK_LABEL, yeast, yeasts_list)
-        row.setCell(CODE_LABEL, yeasts_list)
-        row.setCell(NAME_LABEL, name)
-        row.setCell(COMMENT_LABEL, comment_list)
- 
-        
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new yeast,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add new yeast relationship:')
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setValue('FRY')\
-                            .setDescription('Code of yeast, e.g. "FRY1"'),
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comment')       
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected yeast parent,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected yeast relationship:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createTextInputField(CODE_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Code of yeast sample, e.g. "FRY1"'),
-       inputWidgetFactory().createMultilineTextInputField(COMMENT_LABEL)\
-                            .setMandatory(True)\
-                            .setDescription('Comments'),       
-    ]
-    editAction.addInputWidgets(widgets)  
-  # Bind field name with column name.
-    editAction.addBinding(CODE_LABEL, CODE_LABEL)
-    editAction.addBinding(COMMENT_LABEL, COMMENT_LABEL)
-
-  
-    """
-       3. delete selected yeast parents.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete the selected yeast relationships?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-    
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new yeast element with values from input fields
-           and add it to existing elements.
-        """
-        yeasts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL) 
-        sampleLink = _createSampleLink(yeasts_list, comment_list)
-        
-        elements.append(sampleLink)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the yeast element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        yeasts_list = action.getInputValue(CODE_LABEL)
-        comment_list = action.getInputValue(COMMENT_LABEL)
-        
-
-        sampleLink = _createSampleLink(yeasts_list, comment_list)
-        
-        
-
-        selectedRowId = action.getSelectedRows()[0]
-        elements[selectedRowId] = sampleLink
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete yeasts that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-            elements.pop(rowId)      
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)  
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        yeasts = input.split(',')
-        for yeast in yeasts:
-            (code, comment) = _extractCodeAndComment(yeast)
-            sampleLink = _createSampleLink(code, comment)
-            elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-    
-def _extractCodeAndComment(yeast):
-    codeAndComment = yeast.split(':')
-    if (len(codeAndComment) == 2):
-        return (codeAndComment[0].strip(), codeAndComment[1].strip())
-    else:
-        return (codeAndComment[0].strip(), "n.a.") 
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_managed.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_managed.py
deleted file mode 100644
index bb989c087c50af5773c750fa5191e2d83a02848f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/disabled_managed.py
+++ /dev/null
@@ -1,46 +0,0 @@
-def configureUI():
-    tableBuilder = createTableBuilder()
-    
-    ##
-    ## Headers
-    ##
-    tableBuilder.addHeader("message")
-    usedTableHeaders = {"message" : True}
-    samples = list(propertyConverter().convertToElements(property))
-    for sample in samples:
-        for annotation in sample.getAttributes():
-            if annotation not in usedTableHeaders:
-                tableBuilder.addHeader(annotation)
-                usedTableHeaders[annotation] = True
-    
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    ##
-    ## Data
-    ## 
-    row = tableBuilder.addRow()
-    row.setCell("message", "Please use the new managed properties annotations, legacy functionality is disabled.")
-    
-    for sample in samples:
-        row = tableBuilder.addRow()
-        for annotation in sample.getAttributes():
-            row.setCell(annotation, sample.getAttribute(annotation))
-    
-
-def updateFromUI(action):
-    raise Exception("Please use the new managed properties annotations, legacy functionality is disabled.")
-
-##
-## Batch Import Methods
-##
-def batchColumnNames():
-    allTypes = []
-    return allTypes
-
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        raise Exception("Please use the new managed properties annotations, legacy functionality is disabled.")
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/compatibility/managed.py b/plasmid/source/core-plugins/stellingmigration/1/compatibility/managed.py
deleted file mode 100644
index 16115f20ccd8bd3709d1f352f3d4dcb3f5e9180e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/compatibility/managed.py
+++ /dev/null
@@ -1,305 +0,0 @@
-from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider
-
-##
-## Configuration
-##
-
-# This needs to be edited for each sample type to match the Profile.js ANNOTATION_PROPERTIES map.
-configuration = {}
-
-configuration["GENERAL_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False },
-                          "SOLUTION_BUFFERS" : {"QUANTITY" : False },
-                          "MEDIA" : {"QUANTITY" : False },
-                          "ENZYME" : {"CONCENTRATION" : False }
-                         };
-
-configuration["MEDIA"] = {
-                          "CHEMICAL" : {"CONCENTRATION" : False },
-                          "SOLUTION_BUFFERS" : {"CONCENTRATION" : False },
-                          "MEDIA" : {"CONCENTRATION" : False }
-                         };
-
-configuration["PCR"] = {
-                          "CHEMICAL" : {"QUANTITY" : False },
-                          "SOLUTION_BUFFERS" : {"QUANTITY" : False },
-                          "ENZYME" : {"CONCENTRATION" : False }
-                         };
-
-configuration["POMBE"] = {
-                          "POMBE" : {}, #Just a placeholder, is actually used by the Plasmids of the Pombe to create the links
-                          "PLASMID" : {"PLASMID_ANNOTATION" : False, "PLASMID_RELATIONSHIP" : False, "COMMENTS" : False, "CONTAINED" : False }
-                         };
-
-configuration["READOUT"] = {
-                          "CHEMICAL" : {"QUANTITY" : False },
-                          "SOLUTION_BUFFERS" : {"QUANTITY" : False }
-                         };
-
-configuration["RESULT"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "DETAIL" : False }
-                         };
-
-configuration["SOLUTION_BUFFERS"] = {
-                          "CHEMICAL" : {"CONCENTRATION" : False },
-                          "SOLUTION_BUFFERS" : {"CONCENTRATION" : False }
-                         };
-
-configuration["WESTERN_BLOTTING"] = {
-                          "CHEMICAL" : {"QUANTITY" : False },
-                          "SOLUTION_BUFFERS" : {"QUANTITY" : False },
-                          "ANTIBODY" : {"QUANTITY" : False }
-                         };
-
-configuration["YEAST"] = {
-                          "YEAST" : {}, #Just a placeholder, is actually used by the Plasmids of the Yeast to create the links
-                          "PLASMID" : {"PLASMID_ANNOTATION" : False, "PLASMID_RELATIONSHIP" : False, "COMMENTS" : False, "CONTAINED" : False }
-                         };
-
-configurationCopyParents = {}
-configurationCopyParents["YEAST"] = { "YEAST" : "PLASMID" };
-configurationCopyParents["POMBE"] = { "POMBE" : "PLASMID" };
-
-#Global Variables
-annotableType = "<REPLACE_WITH_ANNOTABLE_TYPE>"
-server = CommonServiceProvider.getCommonServer()
-contextOrNull = server.tryToAuthenticateAsSystem()
-propertyTypes = server.listPropertyTypes(contextOrNull.getSessionToken(), False)
-
-##
-## Help Methods
-##
-def getAllAnnotableSampleTypesForType(fromAnnotableType):
-    allTypes = {};
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    allTypes[sampleTypeWithAnnotationsForType] = True;
-    return allTypes;
-
-def getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCodeToFind, fromAnnotableType):
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    if sampleTypeWithAnnotationsForType == sampleTypeCodeToFind:
-                            return configuration[sampleTypeWithAnnotations][sampleTypeWithAnnotationsForType];
-    return None;
-    
-def getPropertyType(propertyTypeCode):
-    for propertyType in propertyTypes:
-        if propertyType.code == propertyTypeCode:
-            return propertyType
-    return None;
-
-def createAnnotationsFor(identifier, annotations, sampleType):
-    permId = entityInformationProvider().getSamplePermId(identifier);
-    newAnnotation = elementFactory().createSampleLink(permId)
-    
-    newAnnotation.addAttribute("identifier", identifier)
-    newAnnotation.addAttribute("sampleType", sampleType)
-    for annotation in annotations:
-        newAnnotation.addAttribute(annotation, annotations[annotation])
-    return newAnnotation
-
-def getWidgetForAdd(sampleTypeCode, annotableType):
-    #print "sampleTypeCode:" + sampleTypeCode + " - " + annotableType #Deleting this comment causes the thing to break
-    widgets = []
-    widgetIdentifier = inputWidgetFactory().createTextInputField("identifier")\
-                            .setMandatory(True)\
-                            .setValue("")\
-                            .setDescription("")
-    widgets.append(widgetIdentifier)
-    for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-        propertyType = getPropertyType(propertyTypeCode)
-        widget = inputWidgetFactory().createTextInputField(propertyType.label)\
-                        .setMandatory(getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType)[propertyTypeCode])\
-                        .setValue("")\
-                        .setDescription(propertyType.description)
-        widgets.append(widget)
-    return widgets;
-
-def isValid(dataType, value):
-    return True
-
-##
-## Registration form (EXPERIMENTAL)
-##
-# def showRawValueInForms():
-#     return False
-# 
-# def inputWidgets():
-#     widgetsToCopyFrom = []
-#     toCopyFrom = configurationCopyParents[annotableType]
-#     if(toCopyFrom is not None):
-#         for key in toCopyFrom:
-#             widgetsToCopyFrom.append(inputWidgetFactory().createTextInputField(key + " to copy " + toCopyFrom[key]).setMandatory(False))
-#     print "EXECUTING inputWidgets " + str(len(widgetsToCopyFrom))
-#     return widgetsToCopyFrom
-# 
-# def updateFromRegistrationForm(bindings):
-#     print "EXECUTING updateFromRegistrationForm"
-#     for key, value in bindings:
-#         print "MANAGED WITH KEY: " + key
-
-##
-## Main Methods
-##
-def configureUI():
-    # Add Headers
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader("identifier")
-    tableBuilder.addHeader("sampleType")
-    tableBuilder.addHeader("name")
-    
-    usedTableHeaders = {"identifier" : True, "sampleType" : True, "name" : True }
-    
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            if propertyTypeCode not in usedTableHeaders:
-                tableBuilder.addHeader(propertyTypeCode)
-                usedTableHeaders[propertyTypeCode] = True
-
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    # Add Rows
-    samples = list(propertyConverter().convertToElements(property))
-    for sample in samples:
-        row = tableBuilder.addRow()
-        permId = sample.getAttribute("permId")
-        
-        #Set Name
-        nameValue = entityInformationProvider().getSamplePropertyValue(permId, "NAME")
-        if (nameValue is None) or (len(nameValue) == 0):
-            nameValue = entityInformationProvider().getSamplePropertyValue(permId, "PLASMID_NAME") #For PLASMID Sample Type
-        if (nameValue is None) or (len(nameValue) == 0):
-            nameValue = entityInformationProvider().getSamplePropertyValue(permId, "YEAST_STRAIN_NAME") #For YEAST Sample Type
-        if (nameValue is None) or (len(nameValue) == 0):
-            nameValue = entityInformationProvider().getSamplePropertyValue(permId, "BACTERIA_STRAIN_NAME") #For BACTERIA Sample Type
-        if (nameValue is None) or (len(nameValue) == 0):
-            nameValue = entityInformationProvider().getSamplePropertyValue(permId, "TARGET") #For OLIGO Sample Type
-        if nameValue is not None:
-            row.setCell("name", nameValue)
-        
-        for annotation in sample.getAttributes():
-            if annotation != "permId" and annotation != "NAME":
-                row.setCell(annotation, sample.getAttribute(annotation))
-        
-    # Add Create buttons
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        title = "Add " + sampleTypeCode;
-        addAction = uiDescription.addTableAction(title).setDescription(title)
-        widgets = getWidgetForAdd(sampleTypeCode, annotableType)
-        addAction.addInputWidgets(widgets)
-
-    # TO-DO Edit button for each type with different hooks to the columns depending on the type
-    # Add Edit Button (EXPERIMENTAL)
-#     editAction = uiDescription.addTableAction('Edit').setDescription('Edit selected table row')
-#     editAction.setRowSelectionRequiredSingle()
-#     editWidgets = []
-#     for headerKey in usedTableHeaders:
-#         editWidgets.append(inputWidgetFactory().createTextInputField(headerKey))
-#         editAction.addBinding(headerKey, headerKey)
-#     editAction.addInputWidgets(editWidgets)
-
-    # Add Delete button
-    deleteAction = uiDescription.addTableAction("Delete")\
-                                .setDescription('Are you sure you want to delete selected annotation?')
-    deleteAction.setRowSelectionRequired() # Delete is enabled when at least 1 row is selected.
-    
-def updateFromUI(action):
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-    
-    if action.name.startswith("Add"):
-        sampleTypeCode = action.name[4:]
-        identifier = action.getInputValue("identifier")
-        annotations = { }
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            propertyType = getPropertyType(propertyTypeCode)
-            propertyTypeValue = action.getInputValue(propertyType.label)
-            if not isValid(propertyType.dataType, propertyTypeValue):
-                raise ValidationException("Property " + str(propertyType.label) + " with invalid value " + str(propertyTypeValue))
-            if propertyTypeValue is None:
-                propertyTypeValue = ""
-            annotations[propertyTypeCode] = propertyTypeValue
-        newAnnotation = createAnnotationsFor(identifier, annotations, sampleTypeCode)
-        elements.append(newAnnotation)
-    
-    if action.name.startswith("Delete"):
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()
-        for rowId in rowIds:
-            elements.pop(rowId) 
-    
-    property.value = converter.convertToString(elements)
-
-##
-## Batch Import Methods
-##
-def batchColumnNames():
-    allTypes = []
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        allTypes.append(sampleTypeCode)
-    return allTypes
-
-def updateFromBatchInput(bindings):
-    #print "--------> UPDATE FROM BATCH INPUT: "
-    elements = []
-    
-    #Links Configuration
-    typesToCopyFrom = []
-    if annotableType in configurationCopyParents:
-        typesToCopyFrom = configurationCopyParents[annotableType]
-                
-    for annotableSampleType in getAllAnnotableSampleTypesForType(annotableType):
-        annotatedSamples = bindings.get(annotableSampleType)
-        #print "-----> TYPE: " + str(annotableSampleType) + " BINDINGS: " + str(annotatedSamples)
-        if (annotatedSamples != None and annotatedSamples != ""):
-            #Annotations
-            #print "-----> Annotations"
-            if annotableSampleType not in typesToCopyFrom:
-                for sampleLine in annotatedSamples.split("\\"):
-                    propertyTypes = getPropertyTypesForSampleTypeFromAnnotableType(annotableSampleType, annotableType)
-                    identifier = None
-                    permId = None
-                    sampleLink = None
-                    for sampleProperty in sampleLine.split(";"):
-                        propertyName = sampleProperty.split(":")[0]
-                        propertyValue = sampleProperty.split(":")[1]
-                        if propertyName == "identifier":
-                            identifier = propertyValue
-                            permId = entityInformationProvider().getSamplePermId(propertyValue)
-                            sampleLink = elementFactory().createSampleLink(permId)
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                            sampleLink.addAttribute('sampleType', annotableSampleType)
-                        elif propertyName in propertyTypes:
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                        else:
-                            raise NameError('Found invalid property: ' + propertyName + " on type " + annotableSampleType)
-                    if identifier is not None:
-                        elements.append(sampleLink)
-    #Links
-    #print "-----> links"
-    for typeToCopyFrom in typesToCopyFrom:
-        typeToCopy = typesToCopyFrom[typeToCopyFrom]
-        #print "-----> TYPE TO COPY FROM: " + str(typeToCopyFrom)
-        #print "-----> TYPE TO COPY: " + str(typeToCopy)
-        identifiersToCopyFrom = bindings.get(typeToCopyFrom)
-        if identifiersToCopyFrom is not None:
-            #print "-----> IDENTIFIERS TO COPY FROM: " + str(identifiersToCopyFrom)
-            identifiersForCopy = identifiersToCopyFrom.split(',')
-            for identifierToCopyFrom in identifiersForCopy:
-                #print "-----> IDENTIFIER TO COPY FROM: " + str(identifierToCopyFrom)
-                permIdFromIdentifier = entityInformationProvider().getSamplePermId(identifierToCopyFrom)
-                #print "-----> PERMID TO COPY FROM: " + str(permIdFromIdentifier)
-                parentsToCopyFromPermId = entityInformationProvider().getSamplePropertyValue(permIdFromIdentifier, "ANNOTATIONS_STATE")
-                #print "-----> ELEMENTS TO COPY: " + str(parentsToCopyFromPermId)
-                parentElements = list(propertyConverter().convertStringToElements(parentsToCopyFromPermId))
-                for parentAnnotation in parentElements:
-                    if parentAnnotation.getAttribute("sampleType") == typeToCopy:
-                        parentAnnotation.addAttribute("CONTAINED", identifierToCopyFrom)
-                        #print "-----> COPYING: " + str(parentAnnotation.getAttribute('identifier'))
-                        elements.append(parentAnnotation)
-    property.value = propertyConverter().convertToString(elements)
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingconsistency/consistency.py b/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingconsistency/consistency.py
deleted file mode 100644
index 411afcede1b08da8abd2acee36d935b4b2458081..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingconsistency/consistency.py
+++ /dev/null
@@ -1,338 +0,0 @@
-# some_file.py
-from datetime import datetime
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria, SearchSubCriteria
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-import xml.etree.ElementTree as ET
-
-##
-## Definitions
-##
-UPDATES_ENABLED = False
-updatesToExecute = {}
-
-sampleTypesToVerify = ["YEAST","POMBE"]
-logLevelsToPrint = ["ERROR", "REPORT", "MANUAL-FIX", "LOSTDEBUG", "UPDATED", "COUNTER"] #INFO not included, use it for debug only
-
-##
-## Logging
-##
-
-numberOfManualFixes = 0
-numberOfAutoFixesDeletes = 0
-numberOfAutoFixesLost = 0
-numberOfCanBeUpdated = 0
-
-def logManualFix(message, creator, sampleIdentifier, affectedSampleToBeAnnotated, creatorOfAncestor, ancestor):
-    log("MANUAL-FIX", message + "\t" + creator + "\t" + sampleIdentifier + "\t" + affectedSampleToBeAnnotated + "\t" + creatorOfAncestor + "\t" + ancestor)
-    
-def log(level, message):
-    if level == "MANUAL-FIX":
-        global numberOfManualFixes
-        numberOfManualFixes = numberOfManualFixes + 1
-    if level == "AUTO-FIX":
-        global numberOfAutoFixesDeletes
-        numberOfAutoFixesDeletes = numberOfAutoFixesDeletes + 1
-    if level == "AUTO-FIX-2":
-        global numberOfAutoFixesLost
-        numberOfAutoFixesLost = numberOfAutoFixesLost + 1
-    if level in logLevelsToPrint:
-        print "[" + level + "] " + message
-
-##
-## Cache
-##
-currentCache = []
-
-def getSampleFromCache(identifier):
-    sampleToReturn = None
-    for sample in currentCache:
-        if sample.getSampleIdentifier() == identifier:
-            return sample
-    return None
-
-##
-## Search
-##
-
-def getSamplesByType(tr, sampleType):
-    criteria = SearchCriteria()
-    criteria.setOperator(criteria.SearchOperator.MATCH_ANY_CLAUSES)
-    criteria.addMatchClause(criteria.MatchClause.createAttributeMatch(criteria.MatchClauseAttribute.TYPE, sampleType))
-    samples = tr.getSearchService().searchForSamples(criteria)
-    return samples
-
-def getSampleByPermId(tr, permId):
-    criteria = SearchCriteria()
-    criteria.setOperator(criteria.SearchOperator.MATCH_ANY_CLAUSES)
-    criteria.addMatchClause(criteria.MatchClause.createAttributeMatch(criteria.MatchClauseAttribute.PERM_ID, permId))
-    samples = tr.getSearchService().searchForSamples(criteria)
-    if len(samples) is 1:
-        return samples[0]
-    else:
-        return None
-
-##
-## Main Methods
-##
-def process(tr):
-    log("REPORT", "START VERIFICATION REPORT!")
-    logManualFix("MANUAL-FIX", "AFFECTED SAMPLE CREATOR", "AFFECTED SAMPLE", "ANNOTATION OF AFFECTED SAMPLE", "AFFECTED ANCESTOR CREATOR", "AFFECTED ANCESTOR")
-    for sampleType in sampleTypesToVerify:
-        samples = getSamplesByType(tr, sampleType)
-        global currentCache
-        currentCache.extend(samples)
-        print sampleType + ": "+ str(len(samples))
-        for sample in samples:
-            verify(tr, sample)
-    
-    global numberOfManualFixes
-    global numberOfAutoFixesDeletes
-    global numberOfAutoFixesLost
-    global numberOfCanBeUpdated
-    log("REPORT", "FOUND " + str(numberOfAutoFixesDeletes) + " AUTOMATIC DELETE FIXES!")
-    log("REPORT", "FOUND " + str(numberOfAutoFixesLost) + " AUTOMATIC LOST FIXES!")
-    log("REPORT", "UPDATABLE " + str(numberOfCanBeUpdated) + " SAMPLES!")
-    log("REPORT", "REQUIRED " + str(numberOfManualFixes-1) + " MANUAL FIXES!") #-1 For the Header
-    log("REPORT", "RUNNING UPDATES!")
-    global updatesToExecute;
-    for sampleIdentifierToUpdate in updatesToExecute:
-        sample = getSampleFromCache(sampleIdentifierToUpdate)
-        newAnnotations = updatesToExecute[sampleIdentifierToUpdate]
-        global numberOfCanBeUpdated;
-        numberOfCanBeUpdated = numberOfCanBeUpdated + 1;
-        log("UPDATED", "Updated: " + sample.getSampleIdentifier() + " - "+ str(newAnnotations))
-        sample =  tr.makeSampleMutable(sample);
-        #1. Create new annotations XML
-        newAnnotationsRoot = ET.Element("root");
-        counter = {};
-        for newAnnotation in newAnnotations:
-            addCount(counter, newAnnotation["identifier"])
-            newAnnotationsNode = ET.SubElement(newAnnotationsRoot, "Sample")
-            for newAttribute in newAnnotation:
-                newAnnotationsNode.attrib[newAttribute] = newAnnotation[newAttribute];
-            if getValueOrNull(newAnnotation, "PLASMID_RELATIONSHIP") == "LOT": #2. Add LOST parents
-                log("LOSTDEBUG", "Adding lost Parent " + newAnnotation["identifier"]);
-                parents = sample.getParentSampleIdentifiers();
-                parents.add(newAnnotation["identifier"]);
-                sample.setParentSampleIdentifiers(parents);
-                log("LOSTDEBUG", "Adding lost Parent list" + str(sample.getParentSampleIdentifiers()));
-        printCount(sample, counter)
-        sample.setPropertyValue("ANNOTATIONS_STATE", ET.tostring(newAnnotationsRoot, encoding='utf-8'));
-    log("REPORT", "UPDATES FINISH!")
-    log("REPORT", "FINISH VERIFICATION REPORT!")
-    #raise Exception("Test");
-
-def addCount(counter, identifier):
-    value = 0
-    if(identifier in counter):
-        value = counter[identifier]
-    value = value + 1
-    counter[identifier] = value
-
-def printCount(sample, counter):
-    for identifier in counter:
-        value = counter[identifier]
-        if value > 1:
-            log("COUNTER", sample.getSample().getRegistrator().getUserId() + " " + sample.getSampleIdentifier() + " " + identifier + " " + str(value))
-
-def verify(tr, sample):
-    newAnnotations = [];
-    newAnnotationsReady = True;
-    annotationsRoot = getAnnotationsRootNodeFromSample(sample)
-    #1.Annotations hierarchy
-    requiredAnnotationsFound = getRequiredAnnotations(sample) #To detect case 4
-    requiredAnnotationsFromParents = getRequiredAnnotationsFromParents(sample) #To detect case 5
-    if annotationsRoot is not None:
-        for annotation in annotationsRoot:
-            if getValueOrNull(annotation.attrib, "PLASMID_RELATIONSHIP") == "LOT": #Skip auto generated lot
-                continue;
-            annotatedSampleIdentifier = annotation.attrib["identifier"] #Identifier from annotated sample
-            requiredAnnotationsFound[annotatedSampleIdentifier] = True
-            requiredAnnotationsFromParents[annotatedSampleIdentifier] = True
-            try:
-                if isChild(sample, annotatedSampleIdentifier):
-                    #This is an annotation from a parent, this is by default correct and don't needs further inspection.
-                    newAnnotations.append(getAnnotationMap(annotation));
-                    log("INFO", "GOOT ANNOTATION AT SAMPLE: " + sample.getSampleIdentifier() + " ANNOTATION: " + annotatedSampleIdentifier)
-                else:
-                    foundAnnotationAndAncestor = getAnnotationAndAncestor(annotatedSampleIdentifier, sample.getParentSampleIdentifiers())
-                    foundAnnotation = foundAnnotationAndAncestor[0]
-                    foundAncestor = foundAnnotationAndAncestor[1]
-                    if foundAnnotation is not None and foundAncestor is not None:
-                        log("INFO", "BAD ANNOTATION FOUND - ON:" + sample.getSampleIdentifier() + " ANNOTATION:" + annotatedSampleIdentifier)
-                        if areAnnotationsEqual(annotation, foundAnnotation) and areAnnotationsEqual(foundAnnotation, annotation):
-                            log("AUTO-FIX", "CASE 1 - GOOD REPEATED ANNOTATION THAT CAN BE DELETED - AT SAMPLE: " + sample.getSampleIdentifier() + " FOR ANNOTATION: " + annotatedSampleIdentifier + " FOUND ORIGINAL AT: " + foundAncestor.getSampleIdentifier())
-                        else:
-                            logManualFix("Case 3 - The annotation is different on the sample and his ancestor.", sample.getSample().getRegistrator().getUserId(), sample.getSampleIdentifier(), annotatedSampleIdentifier, foundAncestor.getSample().getRegistrator().getUserId(), foundAncestor.getSampleIdentifier())
-                            newAnnotationsReady = False
-                    elif foundAncestor is None:
-                        logManualFix("Case 1 - The annotated sample is not an ancestor, is missing on the hierarchy for some reason.", sample.getSample().getRegistrator().getUserId(), sample.getSampleIdentifier(), annotatedSampleIdentifier, "?", "?")
-                        newAnnotationsReady = False
-                    elif foundAnnotation is None:
-                        logManualFix("Case 2 - The annotated sample is not annotated on the appropriate ancestor.", sample.getSample().getRegistrator().getUserId(), sample.getSampleIdentifier(), annotatedSampleIdentifier, foundAncestor.getSample().getRegistrator().getUserId(), foundAncestor.getSampleIdentifier())
-                        newAnnotationsReady = False
-            except Exception, err:
-                log("ERROR", "PROCESSING ANNOTATIONS XML CHILD " + sample.getSampleIdentifier() + " ERR: " + str(err))
-    #2.Missing Parents Annotations
-    for parentIdentifier in requiredAnnotationsFound:
-        if not requiredAnnotationsFound[parentIdentifier]:
-            logManualFix("Case 4 - Missing annotation on sample for parent.", sample.getSample().getRegistrator().getUserId(), sample.getSampleIdentifier(), parentIdentifier, "-", "-")
-            newAnnotationsReady = False
-    #3.Missing Annotations LOST
-    log("LOSTDEBUG", "Lost debug: " + sample.getSampleIdentifier() + " " + str(requiredAnnotationsFromParents));
-    for parentAnnotationIdentifier in requiredAnnotationsFromParents:
-        if not requiredAnnotationsFromParents[parentAnnotationIdentifier]:
-            lostPermId = getRequiredAnnotationsFromParentsPermId(sample, parentAnnotationIdentifier)
-            if lostPermId is None:
-                raise Exception("Lost PermId Not Found");
-            newAnnotations.append({ "permId" : lostPermId, "identifier" : parentAnnotationIdentifier, "PLASMID_RELATIONSHIP" : "LOT" });
-            log("AUTO-FIX-2", "CASE 2 - MISSING LOST ANNOTATIONS ON SAMPLE: " + sample.getSampleIdentifier() + " FOR LOST ANNOTATION: " + parentAnnotationIdentifier + " PRESENT INTO ONE OF THE PARENTS")
-    #4 Check parents from contained
-    expectedParents = getContainedFromAnnotations(sample)
-    lostParents = areParentsPresent(sample, expectedParents)
-    if len(lostParents) > 0:
-        logManualFix("Case 5 - Missing Parents present in Contained: ", sample.getSample().getRegistrator().getUserId(), sample.getSampleIdentifier(), str(lostParents), "?", "?")
-        newAnnotationsReady = False
-    #5 Check repeated parents in annotations
-#     if areAnnotationDuplicated(sample):
-#         logManualFix("Case 6 - Same annotation coming from different parents: ", sample.getSample().getRegistrator().getUserId(), sample.getSampleIdentifier(), "?", "?", "?")
-#         newAnnotationsReady = False
-    global UPDATES_ENABLED;
-    if newAnnotationsReady and UPDATES_ENABLED:
-        global numberOfCanBeUpdated;
-        updatesToExecute[sample.getSampleIdentifier()] = newAnnotations;
-        log("UPDATED", "Ready to updated: " + sample.getSampleIdentifier() + " - "+ str(newAnnotations))
-    elif not newAnnotationsReady:
-        log("UPDATED", "Not ready for update: " + sample.getSampleIdentifier());
-    else:
-        log("UPDATED", "Not updated but ready:" + sample.getSampleIdentifier() + " - "+ str(newAnnotations))
-
-def areAnnotationDuplicated(sample):
-    annotated = {}; #They should be parents of the sample and not been missing
-    annotationsRoot = getAnnotationsRootNodeFromSample(sample);
-    if annotationsRoot is not None:
-        for annotation in annotationsRoot:
-            permId = getValueOrNull(annotation.attrib, "permId");
-            if permId in annotated:
-                return True
-            else:
-                annotated[permId] = True
-    return False
-            
-def getContainedFromAnnotations(sample):
-    contained = []; #They should be parents of the sample and not been missing
-    annotationsRoot = getAnnotationsRootNodeFromSample(sample);
-    if annotationsRoot is not None:
-        for annotation in annotationsRoot:
-            containedFound = getValueOrNull(annotation.attrib, "CONTAINED");
-            if containedFound is not None and ('/' in containedFound):
-                contained.append(containedFound);
-    return contained;
-
-def areParentsPresent(sample, parents):
-    notPresent = [];
-    for parent in parents:
-        isPresent = (parent in sample.getParentSampleIdentifiers())
-        if not isPresent:
-            notPresent.append(parent);
-    return notPresent
-
-def getRequiredAnnotationsFromParentsPermId(sample, identifier):
-    for parentIdentifier in sample.getParentSampleIdentifiers():
-        if ("/FRY" in parentIdentifier) or ("/FRS" in parentIdentifier): #Only check Yeast and Pombe Parents
-            parent = getSampleFromCache(parentIdentifier)
-            parentAnnotationsRoot = getAnnotationsRootNodeFromSample(parent)
-            if parentAnnotationsRoot is not None:
-                for parentAnnotation in parentAnnotationsRoot:
-                    parentAnnotationIdentifier = parentAnnotation.attrib["identifier"]
-                    if "/FRP" in parentAnnotationIdentifier: #Only require Plasmids
-                        if identifier == parentAnnotationIdentifier:
-                            return parentAnnotation.attrib["permId"]
-    return None
-
-def getRequiredAnnotationsFromParents(sample):
-    log("LOSTDEBUG", "getRequiredAnnotationsFromParents - START: " + sample.getSampleIdentifier());
-    requiredAnnotationsFromParents = {}
-    log("LOSTDEBUG", "getRequiredAnnotationsFromParents - parents: " + str(sample.getParentSampleIdentifiers()));
-    for parentIdentifier in sample.getParentSampleIdentifiers():
-        if ("/FRY" in parentIdentifier) or ("/FRS" in parentIdentifier): #Only check Yeast and Pombe Parents
-            parent = getSampleFromCache(parentIdentifier)
-            parentAnnotationsRoot = getAnnotationsRootNodeFromSample(parent)
-            log("LOSTDEBUG", "getRequiredAnnotationsFromParents - parent: " + parent.getSampleIdentifier() + " annotations " + str(sample.getPropertyValue("ANNOTATIONS_STATE")));
-            if parentAnnotationsRoot is not None:
-                log("LOSTDEBUG", "getRequiredAnnotationsFromParents - parent: " + parent.getSampleIdentifier() + " root not none");
-                for parentAnnotation in parentAnnotationsRoot:
-                    log("LOSTDEBUG", "getRequiredAnnotationsFromParents - parent annotation: " + parent.getSampleIdentifier() + " " + str(parentAnnotation));
-                    parentAnnotationIdentifier = parentAnnotation.attrib["identifier"]
-                    annotationType = getValueOrNull(parentAnnotation.attrib, "PLASMID_RELATIONSHIP");
-                    log("LOSTDEBUG", "getRequiredAnnotationsFromParents - parent annotation: " + str(parentAnnotationIdentifier) + " " + str(annotationType));
-                    if "/FRP" in parentAnnotationIdentifier and ((annotationType is None) or (annotationType is not "LOT")): #Only require Plasmids not LOT
-                        requiredAnnotationsFromParents[parentAnnotationIdentifier] = False
-    log("LOSTDEBUG", "getRequiredAnnotationsFromParents - FINISH: " + sample.getSampleIdentifier());
-    return requiredAnnotationsFromParents
-
-def getRequiredAnnotations(sample):
-    requiredAnnotationsFound = {}
-    for parentIdentifier in sample.getParentSampleIdentifiers():
-        if "/FRP" in parentIdentifier: #Only require Plasmids
-            requiredAnnotationsFound[parentIdentifier] = False
-    return requiredAnnotationsFound
-
-def getAnnotationMap(annotation):
-    map = {};
-    for key in annotation.attrib:
-        value = getValueOrNull(annotation.attrib, key)
-        if value is not None:
-            map[key] = value;
-    return map
-
-def areAnnotationsEqual(annotationA, annotationB):
-    for key in annotationA.attrib:
-        value = getValueOrNull(annotationA.attrib, key)
-        if key != "CONTAINED":
-            if value != getValueOrNull(annotationB.attrib, key):
-                log("INFO", "EQUALITY FAILED FOR " + key + ": - " + str(value) + " " + str(getValueOrNull(annotationB.attrib, key)))
-                return False
-    return True
-
-def getValueOrNull(map, key):
-    if key in map:
-        value = map[key]
-        if not value: #Check for null strings
-            return None
-        else:
-            return value
-    else:
-        return None
-    
-def getAnnotationAndAncestor(annotatedSampleIdentifier, sampleParentsIdentifiers):
-    ancestorsIdentifiers = list(sampleParentsIdentifiers)
-    while( len(ancestorsIdentifiers) > 0):
-        ancestorIdentifier = ancestorsIdentifiers.pop(0)
-        ancestor = getSampleFromCache(ancestorIdentifier)
-        if ancestor is not None:
-                if isChild(ancestor, annotatedSampleIdentifier): #We only accept annotations from the original sample to avoid test repetitions
-                    ancestorAnnotationsRoot = getAnnotationsRootNodeFromSample(ancestor)
-                    if ancestorAnnotationsRoot is not None:
-                        for annotation in ancestorAnnotationsRoot:
-                            if annotation.attrib["identifier"] == annotatedSampleIdentifier:
-                                return [annotation, ancestor]
-                    return [None, ancestor]
-                else:
-                    ancestorsIdentifiers.extend(ancestor.getParentSampleIdentifiers())
-    return [None, None] #Should never happen
-
-def isChild(sample, identifier):
-    if any(identifier in s for s in sample.getParentSampleIdentifiers()):
-        return True
-    else:
-        return False
-    
-def getAnnotationsRootNodeFromSample(sample):
-    annotations = sample.getPropertyValue("ANNOTATIONS_STATE")
-    if '<root' in annotations:
-        try:
-            return ET.fromstring(annotations)
-        except Exception:
-            log("ERROR", "READING ANNOTATIONS XML FOR " + sample.getSampleIdentifier())
-    return None
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingconsistency/plugin.properties b/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingconsistency/plugin.properties
deleted file mode 100644
index 0f6f1d90c48e242d60dfd4418b4d55dc4f817fb6..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingconsistency/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path = consistency.py
-dropbox-name = stellingconsistency
-incoming-dir = ${root-dir}/stellingconsistency
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingmigration/migration.py b/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingmigration/migration.py
deleted file mode 100644
index 1fa994b96dd2380d118c6dc412ae18d3b1719b63..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingmigration/migration.py
+++ /dev/null
@@ -1,239 +0,0 @@
-# some_file.py
-from datetime import datetime
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria, SearchSubCriteria
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-import xml.etree.ElementTree as ET
-
-##
-## Generic Process Method
-##
-
-definitions = {
-                "GENERAL_PROTOCOL" : 
-                                     { 
-                                      "CHEMICALS" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     },
-                                      "SOLUTIONS_BUFFERS" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     },
-                                      "MEDIA" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     },
-                                      "GENERAL_PROTOCOL" : {
-                                                     "name" : "NAME"
-                                                     },
-                                      "ENZYMES" : {
-                                                     "name" : "NAME",
-                                                     "concentration" : "CONCENTRATION"
-                                                     }
-                                     },
-                "MEDIA" : 
-                                     { 
-                                      "CHEMICALS" : {
-                                                     "concentration" : "CONCENTRATION",
-                                                     "name" : "NAME"
-                                                     },
-                                      "SOLUTIONS_BUFFERS" : {
-                                                     "concentration" : "CONCENTRATION",
-                                                     "name" : "NAME"
-                                                     },
-                                      "MEDIA" : {
-                                                     "concentration" : "CONCENTRATION",
-                                                     "name" : "NAME"
-                                                     }
-                                     },
-                "PCR" : 
-                                     { 
-                                      "CHEMICALS" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     },
-                                      "SOLUTIONS_BUFFERS" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     },
-                                      "ENZYMES" : {
-                                                     "name" : "NAME",
-                                                     "concentration" : "CONCENTRATION"
-                                                     }
-                                     },
-                "POMBE" : 
-                                     { 
-                                      "PLASMIDS" : {
-                                                     "annotation" : "PLASMID_ANNOTATION",
-                                                     "rel" : "PLASMID_RELATIONSHIP"
-                                                     }
-                                     },
-               "READOUT" : 
-                                    { 
-                                     "CHEMICALS" : {
-                                                    "quantity" : "QUANTITY",
-                                                    "name" : "NAME"
-                                                    },
-                                     "SOLUTIONS_BUFFERS" : {
-                                                    "quantity" : "QUANTITY",
-                                                    "name" : "NAME"
-                                                    },
-                                     "GENERAL_PROTOCOL" : {
-                                                    "name" : "NAME"
-                                                    }
-                                    },
-               "RESULT" : 
-                                    { 
-                                     "ANNOTATIONS" : {
-                                                    "quantity" : "QUANTITY",
-                                                    "name" : "NAME",
-                                                    "detail" : "DETAIL"
-                                                    }
-                                    },
-               "SOLUTIONS_BUFFERS" : 
-                                    { 
-                                     "CHEMICALS" : {
-                                                     "concentration" : "CONCENTRATION",
-                                                     "name" : "NAME"
-                                                     },
-                                     "SOLUTIONS_BUFFERS" : {
-                                                     "concentration" : "CONCENTRATION",
-                                                     "name" : "NAME"
-                                                     }
-                                    },
-               "WESTERN_BLOTTING" : 
-                                    {
-                                     "ANTIBODY" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     },
-                                     "CHEMICALS" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     },
-                                     "SOLUTIONS_BUFFERS" : {
-                                                     "quantity" : "QUANTITY",
-                                                     "name" : "NAME"
-                                                     }
-                                    },
-               "YEAST" : 
-                                    {
-                                     "PLASMIDS" : {
-                                                     "annotation" : "PLASMID_ANNOTATION",
-                                                     "rel" : "PLASMID_RELATIONSHIP"
-                                                     }
-                                    }
-};
-
-currentCache = None
-
-def process(tr):
-    print "START!"
-    for sampleType in definitions:
-        properties = definitions[sampleType]
-        samples = getSamplesByType(tr, sampleType)
-        global currentCache
-        currentCache = samples
-        print sampleType + ": "+ str(len(samples))
-        for sample in samples:
-            translate(tr, sample, properties)
-    print "FINISH!"
-
-def getSamplesByType(tr, sampleType):
-    criteria = SearchCriteria()
-    criteria.setOperator(criteria.SearchOperator.MATCH_ANY_CLAUSES)
-    criteria.addMatchClause(criteria.MatchClause.createAttributeMatch(criteria.MatchClauseAttribute.TYPE, sampleType))
-    samples = tr.getSearchService().searchForSamples(criteria)
-    return samples
-
-def getSampleByPermId(tr, permId):
-    criteria = SearchCriteria()
-    criteria.setOperator(criteria.SearchOperator.MATCH_ANY_CLAUSES)
-    criteria.addMatchClause(criteria.MatchClause.createAttributeMatch(criteria.MatchClauseAttribute.PERM_ID, permId))
-    samples = tr.getSearchService().searchForSamples(criteria)
-    if len(samples) is 1:
-        return samples[0]
-    else:
-        return None
-
-def getSampleFromCache(identifier):
-    sampleToReturn = None
-    for sample in currentCache:
-        if sample.getSampleIdentifier() == identifier:
-            return sample
-    return None
-
-def translate(tr, sample, properties):
-    sampleType = sample.getSampleType()
-    # Create new annotations from scratch
-    newAnnotations = sample.getPropertyValue("ANNOTATIONS_STATE")
-    newAnnotationsRoot = None
-    newAnnotationsRoot = ET.Element("root")
-    
-    # Read old annotations
-    for property in properties:
-        propertyDefinitions = properties[property]
-        oldAnnotationsRoot = None
-        try:
-            propertyValue = unicode(sample.getPropertyValue(property), "utf-8")
-            if '<root>' in propertyValue:
-                oldAnnotationsRoot = ET.fromstring(propertyValue)
-        except Exception:
-            print "[ERROR - PROCESSING PROPERTY_CODE] " + sample.code + " " + property
-            
-        if oldAnnotationsRoot is not None:
-            for child in oldAnnotationsRoot:
-                    try:
-                        permId = child.attrib["permId"]
-                        linkedSample = getSampleByPermId(tr, permId)
-                        linkedSampleIdentifier = linkedSample.getSampleIdentifier()
-                        if property == "GENERAL_PROTOCOL":
-                            #Don't migrate them, they should be parents and contain no information.
-                            #sample.getParentSampleIdentifiers().add(linkedSampleIdentifier) 
-                            print "[PROTOCOL] " + sample.code + " " + linkedSampleIdentifier
-                        else:
-                            newAnnotationsNode = ET.SubElement(newAnnotationsRoot, "Sample")
-                            print "[INFO - PROCESSING PERM_ID] " + sample.code + " " + permId
-                            newAnnotationsNode.attrib["sampleType"] = linkedSample.sampleType
-                            newAnnotationsNode.attrib["permId"] = permId
-                            newAnnotationsNode.attrib["identifier"] = linkedSampleIdentifier
-                            for oldName in propertyDefinitions:
-                                newName = propertyDefinitions[oldName]
-                                value = getValueOrNull(child.attrib, oldName)
-                                if(value is not None):
-                                    newAnnotationsNode.attrib[newName] = value
-                            if property == "PLASMIDS":
-                                #Is plasmid a link? it is if it's not a parent
-                                isLink = True
-                                for sampleParentIdentifier in sample.getParentSampleIdentifiers():
-                                    if sampleParentIdentifier == linkedSampleIdentifier:
-                                        isLink = False
-                                if isLink: #Find parent who owns it
-                                    isFound = False
-                                    for sampleParentIdentifier in sample.getParentSampleIdentifiers():
-                                        parentFromSample = getSampleFromCache(sampleParentIdentifier) #tr.getSample(sampleParentIdentifier)
-                                        parentAnnotations = None
-                                        if parentFromSample != None:
-                                            parentAnnotations = parentFromSample.getPropertyValue("ANNOTATIONS_STATE")
-                                        if parentAnnotations != None:
-                                            if (permId in parentAnnotations):
-                                                newAnnotationsNode.attrib["CONTAINED"] = sampleParentIdentifier
-                                                isFound = True
-                                        else:
-                                            print "[WARNING - PARENTANNOTATIONS NONE] " + sample.code + " " + permId
-                                    if not isFound:
-                                        print "[ERROR - NOTFOUND CONTAINER] " + sample.code + " " + permId
-                                    
-                    except Exception, e:
-                        print "[ERROR - PROCESSING PERM_ID] " + sample.code + " " + permId + str(e)
-    save(tr, sample, "ANNOTATIONS_STATE", ET.tostring(newAnnotationsRoot, encoding='utf-8'))
-
-def save(tr, sample, property, propertyValue):
-    mutableSample = tr.makeSampleMutable(sample)
-    mutableSample.setPropertyValue(property, propertyValue)
-    
-def getValueOrNull(map, key):
-    if key in map:
-        return map[key]
-    else:
-        return None
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingmigration/plugin.properties b/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingmigration/plugin.properties
deleted file mode 100644
index b98adb60611c0d4b6aa5b533a500ab5bd3465824..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/stellingmigration/1/dss/drop-boxes/stellingmigration/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path = migration.py
-dropbox-name = stellingmigration
-incoming-dir = ${root-dir}/stellingmigration
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/as/definitions.py b/plasmid/source/core-plugins/weismigration/1/as/definitions.py
deleted file mode 100644
index 409687f79602319d1fa048823be15d14f6c1690f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/as/definitions.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Documentation
-##
-## Properties starting by "+" will be created in openBIS, but will not be read from FileMaker but if set programmatically will be put back in openBIS.
-## Properties starting by "-" will not be created in openBIS but will be read from FileMaker.
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-#
-# Scripts
-#
-commentsScriptName = "COMMENTS";
-gcScriptName= "GC"
-atScriptName= "AT"
-lengthScriptName= "SEQUENCE_LENGTH"
-annotationsScriptName="ANNOTATIONS"
-antibodyrefnumScriptName="ANTIBODY_REFNUM"
-antibodynameScriptName="ANTIBODY_NAME"
-chemicalrefnumScriptName="CHEMICAL_REFNUM"
-oligonameScriptName="OLIGO_NAME"
-oligorefnumScriptName="OLIGO_REFNUM"
-oligosysnameScriptName = "SYS_NAME"
-plasmidnameScriptName="PLASMID_NAME"
-plasmidrefnumScriptName="PLASMID_REFNUM"
-strainnameScriptName="STRAIN_NAME"
-strainglycerolScriptName="STRAIN_GLYCEROL_STOCK_NUM"
-
-
-#
-# Experiment Types
-#
-experimentDefinition = [
-    ["NAME",                   "General", "Name",                     DataType.MULTILINE_VARCHAR,             None,    "Name", None, None, False],
-    ["EXPERIMENTAL_GOALS",     "General", "Experimental goals",       DataType.MULTILINE_VARCHAR,   None,    "Goal of the experiment", None, None, False],
-    ["GRANT",                  "General", "Grant",                    DataType.MULTILINE_VARCHAR,             None,    "grant name", None, None, False],
-    ["START_DATE",             "General", "Start Date",               DataType.TIMESTAMP,           None,    "Start Date", None, None, False],
-    ["END_DATE",               "General", "End Date",                 DataType.TIMESTAMP,           None,    "End Date", None, None, False],
-    ["EXPERIMENTAL_RESULTS",   "General", "Experimental results",     DataType.MULTILINE_VARCHAR,   None,    "Brief summary of the results obtained", None, None, False],
-    ["XMLCOMMENTS",            "Comments","Comments List",            DataType.XML,                 None,    "Several comments can be added by different users", commentsScriptName, None, False]
-];
-
-#
-#Sample Types
-#
-antibodyDefinition = [
-    ["+AB_REF_NUMBER",                          "General",                  "RefNumber",                           DataType.VARCHAR,                      None, "", None, antibodyrefnumScriptName, False],
-    ["-REF_NUM",                          "General",                  "RefNum",                           DataType.VARCHAR,                      None, "", None, None, False],
-    ["NAME",                          "General",                  "Name",                           DataType.MULTILINE_VARCHAR,                      None, "", None, None, False],       
-    ["+AB_NAME",                          "General",                  "Antibody Name",                           DataType.VARCHAR,                      None, "", None, antibodynameScriptName, False],       
-    ["ANTIGEN",                          "General",                  "Antigen",                           DataType.VARCHAR,                      None, "", None, None, False],   
-    ["MONO_POLY",                          "General",                  "MonoPoly",                           DataType.CONTROLLEDVOCABULARY,                      "AB_CLONALITY", "", None, None, False],       
-    ["SPECIES",                          "General",                  "Species",                           DataType.CONTROLLEDVOCABULARY,                      "AB_SPECIES", "", None, None, False],       
-    ["AB_TYPE",                          "General",                  "Type",                           DataType.CONTROLLEDVOCABULARY,                      "AB_TYPE", "", None, None, False],
-    ["FORM",                          "General",                  "Form",                           DataType.CONTROLLEDVOCABULARY,                      "AB_FORM", "", None, None, False],       
-    ["PRIMARY",                          "General",                  "Primary",                           DataType.VARCHAR,                     None, "", None, None, False],       
-    ["SECONDARY",                          "General",                  "Secondary",                           DataType.VARCHAR,                      None, "", None, None, False],       
-    ["COUPLED",                          "General",                  "Coupled",                           DataType.VARCHAR,                      None, "", None, None, False],       
-    ["VENDOR",                          "General",                  "Vendor",                           DataType.VARCHAR,                      None, "", None, None, False],       
-    ["AB_CATALOG_NUM",                  "General",                 "Catalog#",                        DataType.VARCHAR,                   None,  "", None, None, False],    
-    ["BY",                           "General",                "By",                        DataType.CONTROLLEDVOCABULARY,                    "LAB_MEMBERS",  "", None, None, False],
-    ["REQUEST_DATE",                          "General",                  "RequestDate",                           DataType.TIMESTAMP,                      None, "", None, None, False],
-    ["RECEIVE_DATE",                          "General",                  "ReceiveDate",                           DataType.TIMESTAMP,                      None, "", None, None, False],
-    ["+ANNOTATIONS_STATE",                "Comments",                "Annotations State",                    DataType.XML,                    None, "Annotations State", annotationsScriptName, None, False],        
-    ["NOTES",                           "Comments",                "Notes",                        DataType.MULTILINE_VARCHAR,                    None,  "", None, None, False],
-    ["WBDIL",                          "Comments",                  "WBDil",                           DataType.VARCHAR,                      None, "", None, None, False],       
-    ["IFDIL",                          "Comments",                  "IFDil",                           DataType.VARCHAR,                      None, "", None, None, False],          
-    ["STORAGE_LOCATION",                          "Storage",                  "StorageLocation",                           DataType.CONTROLLEDVOCABULARY,                      "AB_LOCATION", "", None, None, False],           
-    ["BOX",                          "Storage",                  "Box",                           DataType.VARCHAR,                      None, "", None, None, False],       
-    ["AB_EMPTY",                          "Storage",                  "emtpy?",                           DataType.BOOLEAN,                      None, "", None, None, False],       
-    
-];
-
-
-strainDefinition = [
-    ["-NAME",                             "General",                  "KWY number",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],      
-    ["+NAME_STRAIN",                             "General",                  "Strain name",                             DataType.VARCHAR,       None,  "", None, strainnameScriptName, False],          
-    ["MAT",                             "General",                  "MAT",                             DataType.CONTROLLEDVOCABULARY,       "MAT",  "", None, None, False],    
-    ["+GENOTYPE",                             "General",                  "Genotype",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["BASE_STRAIN",                             "General",                  "base strain",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],
-    ["+YEAST_BACKGROUND",                             "General",                  "yeast background",                             DataType.CONTROLLEDVOCABULARY,       "YEAST_BACKGROUND",  "", None, None, False],
-    ["DERIVED_FROM",                             "General",                  "derived from",                             DataType.VARCHAR,       None,  "", None, None, False],       
-    ["COMMENTS",                             "General",                  "comments",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],
-    ["GENOTYPE_CONFIRMATION",                             "General",                  "genotype confirmation",                             DataType.MULTILINE_VARCHAR,       None,  "", None, None, False],    
-    ["WHO_ENTERED",                             "General",                  "who entered",                             DataType.CONTROLLEDVOCABULARY,       "LAB_MEMBERS",  "", None, None, False],    
-    ["REMOVED",                             "General",                  "removed",                             DataType.BOOLEAN,       None,  "", None, None, False],    
-    ["+GLYCEROL_STOCK_NUMBER",                             "General",                  "Glycerol stock number",                             DataType.VARCHAR,       None,  "", None, strainglycerolScriptName, False],    
-    ["DATE_ENTERED",                             "General",                  "date entered",                             DataType.TIMESTAMP,       None,  "", None, None, False],    
-    ["+ANNOTATIONS_STATE",                "Comments",                "Annotations State",                    DataType.XML,                    None,                                "Annotations State", annotationsScriptName, None, False]
-];
-
-strainDefinitionRepetitions = [
-    ["-DISRUPTIONS_1",         "Genotype",        "disruptions[1]",         DataType.VARCHAR,                     None, "",       None, None, False],
-    ["-DISRUPTIONS_2",         "Genotype",        "disruptions[2]",         DataType.VARCHAR,                     None, "",       None, None, False],
-    ["-DISRUPTIONS_3",         "Genotype",        "disruptions[3]",         DataType.VARCHAR,                     None, "",       None, None, False],
-    ["-DISRUPTIONS_4",         "Genotype",        "disruptions[4]",         DataType.VARCHAR,                     None, "",       None, None, False],
-    ["-DISRUPTIONS_5",         "Genotype",        "disruptions[5]",         DataType.VARCHAR,                     None, "",       None, None, False],
-    ["-MARKERS_1",          "Genotype",        "markers[1]",      DataType.VARCHAR,                    None, "",        None, None, False],
-    ["-MARKERS_2",          "Genotype",        "markers[2]",      DataType.VARCHAR,                    None, "",        None, None, False],
-    ["-MARKERS_3",          "Genotype",        "markers[3]",      DataType.VARCHAR,                    None, "",        None, None, False],
-    ["-MARKERS_4",          "Genotype",        "markers[4]",      DataType.VARCHAR,                    None, "",        None, None, False],
-    ["-MARKERS_5",          "Genotype",        "markers[5]",      DataType.VARCHAR,                    None, "",        None, None, False],
-    ["-UNMARKED_MUTATIONS_1",       "Genotype",        "\"unmarked mutations\"[1]",   DataType.VARCHAR,                    None, "",     None, None, False],
-    ["-UNMARKED_MUTATIONS_2",       "Genotype",        "\"unmarked mutations\"[2]",   DataType.VARCHAR,                    None, "",     None, None, False],
-    ["-UNMARKED_MUTATIONS_3",       "Genotype",        "\"unmarked mutations\"[3]",   DataType.VARCHAR,                    None, "",     None, None, False],
-    ["-UNMARKED_MUTATIONS_4",       "Genotype",        "\"unmarked mutations\"[4]",   DataType.VARCHAR,                    None, "",     None, None, False],
-    ["-UNMARKED_MUTATIONS_5",       "Genotype",        "\"unmarked mutations\"[5]",   DataType.VARCHAR,                    None, "",     None, None, False]
-];
-
-oligoDefinition = [
-    ["-NAME",                          "Storage",                  "UC Number",                           DataType.MULTILINE_VARCHAR,                      None, "", None, None, False],
-    ["+OLIGO_NAME",                          "General",                  "Oligo name",                           DataType.VARCHAR,                      None, "", None, oligonameScriptName, False],    
-    ["+OLIGO_REF_NUM",                          "General",                  "RefNum",                           DataType.VARCHAR,                      None, "", None, oligorefnumScriptName, False],    
-    ["SEQUENCE",                          "General",                  "Sequence",                           DataType.MULTILINE_VARCHAR,                      None, "", None, None, False],
-    ["LENGTH",                          "General",                  "Length",                           DataType.INTEGER,                      None, "", None, lengthScriptName, False],
-    ["GROUP",                          "General",                  "Group",                           DataType.VARCHAR,                      None, "", None, None, False],
-    ["SENSE",                          "General",                  "Sense",                           DataType.CONTROLLEDVOCABULARY,                      "OLIGO_SENSE", "", None, None, False],
-    ["CATEGORY",                          "General",                  "category",                           DataType.CONTROLLEDVOCABULARY,                      "OLIGO_CATEGORY", "", None, None, False],
-    ["NOTES",                          "General",                  "Notes",                           DataType.MULTILINE_VARCHAR,                      None, "", None, None, False],
-    ["REORDERED",                          "General",                  "Reordered",                           DataType.VARCHAR,                      None, "", None, None, False],
-    ["LABELS",                          "General",                  "Labels",                           DataType.VARCHAR,                      None, "", None, None, False],
-    ["BY",                          "General",                  "By",                           DataType.CONTROLLEDVOCABULARY,                      "LAB_MEMBERS", "", None, None, False],
-    ["+ANNOTATIONS_STATE",                "Comments",                "Annotations State",                    DataType.XML,                    None,                                "Annotations State", annotationsScriptName, None, False],
-    ["+XMLCOMMENTS",                     "Comments",                "Comments List",                        DataType.XML,                    None, "Several comments can be added by different users", commentsScriptName, None, False],
-    ["+SYS_NAME",                          "Information",                  "SysName",                           DataType.VARCHAR,                      None, "", None, oligosysnameScriptName, False],
-    ["OLIGO_TYPE",                          "Information",                  "Type",                           DataType.VARCHAR,                      None, "", None, None, False],
-    ["STANDARD_TM",                          "Information",                  "StandardTm",                           DataType.REAL,                      None, "", None, None, False],
-    ["AT",                          "Information",                  "AT%",                           DataType.INTEGER,                      None, "", None , atScriptName, False],
-    ["GC",                          "Information",                  "GC%",                           DataType.INTEGER,                      None, "", None, gcScriptName, False],
-    ["MMEXTCOEFF",                          "Information",                  "mMExtCoeff",                           DataType.REAL,                      None, "", None, None, False],
-    ["MOLWEIGHT",                          "Information",                  "MolWeight",                           DataType.REAL,                      None, "", None, None, False],
-    ["OD",                          "Information",                  "OD",                           DataType.REAL,                      None, "", None, None, False],
-    ["REQUEST_DATE",                          "Information",                  "RequestDate",                           DataType.TIMESTAMP,                      None, "", None, None, False],
-    ["RECEIVE_DATE",                          "Information",                  "ReceiveDate",                           DataType.TIMESTAMP,                      None, "", None, None, False],
-    ["FROM_NUC",                          "Information",                  "fromNuc",                           DataType.INTEGER,                      None, "", None, None, False],
-    ["TONUC",                          "Information",                  "toNuc",                           DataType.INTEGER,                      None, "", None, None, False],
-    ["LIST",                          "Information",                  "List",                           DataType.VARCHAR,                      None, "", None, None, False],
-    ["OLIGO_LOCATION",                          "Information",                  "Location",                           DataType.VARCHAR,                      None, "", None, None, False],
-    ["PMOL_UL",                          "Information",                  "pMol_ul",                           DataType.REAL,                      None, "", None, None, False],
-    ["UG_UL",                          "Information",                  "ug_ul",                           DataType.REAL,                      None, "", None, None, False],
-    ["VOLUME",                          "Information",                  "Volume",                           DataType.REAL,                      None, "", None, None, False],
-];
-
-plasmidDefinition = [
-    ["-NAME",                        "General",                  "pKW Number",                         DataType.MULTILINE_VARCHAR,      None,  "", None, None, False],    
-    ["+PL_NAME",                        "General",                  "pKW Number Calculated",                         DataType.VARCHAR,      None,  "", None, plasmidnameScriptName, False],    
-    ["PLASMID_NAME",                        "General",                  "Plasmid name",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["BACTERIAL_STRAIN",                        "General",                  "Bacterial strain",                         DataType.CONTROLLEDVOCABULARY,      "PLASMID_BACTERIAL_STRAIN",  "", None, None, False],
-    ["BY",                        "General",                  "By",                         DataType.CONTROLLEDVOCABULARY,      "LAB_MEMBERS",  "", None, None, False],
-    ["NOTEBOOK_REF",                        "General",                  "Note Book ref.",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["REFERENCE",                        "General",                  "Reference",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["VECTOR",                        "General",                  "Vector",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["GENE",                        "General",                  "Gene",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["SELECTION_MARKER",                        "General",                  "Selection marker",                         DataType.CONTROLLEDVOCABULARY,      "PLASMID_SELECTION_MAKER",  "", None, None, False],    
-    ["DRUG_RES",                        "General",                  "Drug res.",                         DataType.CONTROLLEDVOCABULARY,      "PLASMID_DRUG_RES",  "", None, None, False],    
-    ["SIZE",                        "General",                  "Size",                         DataType.REAL,      None,  "", None, None, False],    
-    ["CONCENTRATION",                        "General",                  "Concentration",                         DataType.REAL,      None,  "", None, None, False],    
-    ["DNA_PREPARED_ON",                        "General",                  "DNA prepared on",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["VECTOR_TYPE",                        "General",                  "Vector Type",                         DataType.CONTROLLEDVOCABULARY,      "PLASMID_VECTOR_TYPE",  "", None, None, False],    
-    ["+ANNOTATIONS_STATE",                "Comments",                "Annotations State",                    DataType.XML,                    None,                                "Annotations State", annotationsScriptName, None, False],
-    ["COMMENT",                        "Comments",                  "Comment",                         DataType.MULTILINE_VARCHAR,      None,  "", None, None, False],
-    ["PARENT_PLASMID",                        "Cloning Information",                  "Parent plasmid",                         DataType.VARCHAR,      None,  "", None, None, False],        
-    ["SIZE_PARENT",                        "Cloning Information",                  "Size parent",                         DataType.REAL,      None,  "", None, None, False],    
-    ["5END",                        "Cloning Information",                  "5' end",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["3END",                        "Cloning Information",                  "3' end",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["5MOD",                        "Cloning Information",                  "5' Modif.",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["3MOD",                        "Cloning Information",                  "3' Modif.",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["INSERT",                        "Cloning Information",                  "Insert",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["INSERT_SIZE",                        "Cloning Information",                  "Insert size",                         DataType.REAL,      None,  "", None, None, False],    
-    ["5INSERT_MOD",                        "Cloning Information",                  "5' insert modif.",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["3INSERT_MOD",                        "Cloning Information",                  "3' insert modif.",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["5END_MOD",                        "Cloning Information",                  "5' end insert",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["3END_INSERT",                        "Cloning Information",                  "3' end insert",                         DataType.VARCHAR,      None,  "", None, None, False],
-    ["PCR_3_OLIGO",                        "Cloning Information",                  "PCR 3' oligo",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["PCR_5_OLIGO",                        "Cloning Information",                  "PCR 5' oligo",                         DataType.VARCHAR,      None,  "", None, None, False],            
-    ["MUTAGENIC_OLIGO",                        "Cloning Information",                  "Mutagenic oligo",                         DataType.VARCHAR,      None,  "", None, None, False],    
-    ["-REF_NUM",                        "Storage",                  "Ref. N.",                         DataType.INTEGER,      None,  "", None, None, False],    
-    ["+PL_REF_NUM",                        "Storage",                  "Ref. N.",                         DataType.INTEGER,      None,  "", None, plasmidrefnumScriptName, False],    
-    ["MUTATION",                        "General",                  "Mutation",                         DataType.VARCHAR,      None,  "", None, None, False],    
-   ];
-
-chemicalDefinition = [
-    ["NAME",                         "General",                 "Chemical",                         DataType.MULTILINE_VARCHAR,                   None,  "", None, None, False],
-    ["-ID",                           "General",                 "#",                         DataType.VARCHAR,                   None,  "", None, None, False],    
-    ["+CHEM_ID",                           "General",                 "#",                         DataType.VARCHAR,                   None,  "", None, chemicalrefnumScriptName, False],    
-    ["COMPANY",                      "General",                 "Company",                          DataType.VARCHAR,      None,  "", None, None, False],
-    ["DISSOLVED_IN",                 "General",                 "dissolved in",                     DataType.VARCHAR,                   None,  "", None, None, False],
-    ["USED_FOR",                     "General",                 "Used for",                         DataType.MULTILINE_VARCHAR,                   None,  "", None, None, False],
-    ["CHEM_EMPTY",                        "General",                 "empty?",                           DataType.BOOLEAN,                   None,  "", None, None, False],
-    ["DATE_ORDERED",                 "General",                 "date ordered",                     DataType.VARCHAR,                 None,  "", None, None, False],
-    ["LOT_NUM",                      "General",                 "Lot #",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CHEM_CATALOG_NUM",                  "General",                 "Catalog #",                        DataType.VARCHAR,                   None,  "", None, None, False],
-    ["STOCK_CONCENTRATION",          "General",                 "Stock concentration",              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["USED_BY",                      "General",                 "used by",                          DataType.CONTROLLEDVOCABULARY,                   "LAB_MEMBERS",  "", None, None, False],
-    ["CHEMICAL_LOCATION",                      "Storage",                 "Location",                          DataType.CONTROLLEDVOCABULARY,                   "CHEMICALS_LOCATION",  "", None, None, False],  
-    ["COMMENTS",                     "Comments",                "Comments",                         DataType.MULTILINE_VARCHAR,                   None,  "", None, None, False],
-    ["+ANNOTATIONS_STATE",                "Comments",                "Annotations State",                    DataType.XML,                    None, "Annotations State", annotationsScriptName, None, False]
-];
-
-RestrictionEnzymeDefinition = [
-    ["NAME",                            "General",                  "Name",                             DataType.MULTILINE_VARCHAR,                   None,  "", None, None, False],
-    ["COMMENT",                         "Comments",                  "Comment",                          DataType.MULTILINE_VARCHAR,                   None,  "", None, None, False],
-    ["+ANNOTATIONS_STATE",                "Comments",                "Annotations State",                    DataType.XML,                    None, "Annotations State", annotationsScriptName, None, False],  
-    ["BLOCK",                           "Storage",                  "Block",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["POSITION",                        "Storage",                  "Position",                         DataType.VARCHAR,                   None,  "", None, None, False]
-];
-
-ExperimentalStepDefinition= [
-    ["NAME",                             "General",                "Name",                                    DataType.MULTILINE_VARCHAR,        None,"Name", None, None, False],
-    ["OWNER",                             "General",                "Owner",                                DataType.CONTROLLEDVOCABULARY,    "LAB_MEMBERS", "Who produced/owned the sample", None, None, False],
-    ["EXPERIMENTAL_GOALS",                 "General",                "Experimental Goals",                    DataType.MULTILINE_VARCHAR,        None,  "Goal of the experiment", None, None, False],
-    ["EXPERIMENTAL_RESULTS",             "General",                "Experimental Results",                    DataType.MULTILINE_VARCHAR,        None,"Brief summary of the results obtained", None, None, False],
-    ["START_DATE",             "General",                "Start date",                    DataType.TIMESTAMP,        None,"Date when the experimental step is started", None, None, False],
-    ["END_DATE",             "General",                "End date",                    DataType.TIMESTAMP,        None, "Date when the experimental step is completed", None, None, False],
-    ["EXPERIMENTAL_READOUT",             "Readout details",        "Experimental readout",                    DataType.CONTROLLEDVOCABULARY,    "EXPERIMENTAL_READOUT", "Experimental readout used in the experiment", None, None, False],
-    ["MACHINE",                         "Readout details",        "Machine",                                DataType.CONTROLLEDVOCABULARY,    "MACHINE","Machine used to perform the experiment", None, None, False],
-    ["FREEFORM_TABLE_STATE",             "Readout details",        "Freeform Table State",                    DataType.MULTILINE_VARCHAR,        None,  "Table describing how the order of samples measured in the experiments", None, None, False],
-    ["PUBLICATION",                     "Comments",                "Publication",                            DataType.MULTILINE_VARCHAR,        None, "Publication from where the information was first found OR technical sheet given by the manufacturer", None, None, False],
-    ["NOTES",                             "Comments",             "Notes",                                DataType.MULTILINE_VARCHAR,        None,"Notes", None, None, False],
-    ["XMLCOMMENTS",                     "Comments",                "Comments List",                        DataType.XML,                    None, "Several comments can be added by different users", commentsScriptName, None, False],
-    ["ANNOTATIONS_STATE",                "Comments",                "Annotations State",                    DataType.XML,                    None, "Annotations State", annotationsScriptName, None, False]
-];
-
-DefaultDatasetDefinition=[
-        ["NAME", "General", "Name", DataType.MULTILINE_VARCHAR, None,    "Name", None, None,False],
-        ["NOTES", "General information", "Notes", DataType.MULTILINE_VARCHAR, None, "Notes regarding the dataset", None, None,False],
-        ["XMLCOMMENTS",    "Comments","Comments List",    DataType.XML,    None,    "Several comments can be added by different users", commentsScriptName, None,False]
-    ]
diff --git a/plasmid/source/core-plugins/weismigration/1/as/definitionsVoc.py b/plasmid/source/core-plugins/weismigration/1/as/definitionsVoc.py
deleted file mode 100644
index d320499d505ae025593a585faf72f1b8a94573c3..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/as/definitionsVoc.py
+++ /dev/null
@@ -1,296 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                           "LAB_MEMBERS" : [
-                                          ["ELISA_DULTZ",   "E. Dultz"],
-                                          ["A_KOEK",   "A. Koek"],
-                                          ["A_MADRID",   "A. Madrid"],
-                                          ["AC_STROM",   "A.C. Strom"],
-                                          ["A_HIBBEL",   "A. Hibbel"],
-                                          ["B_ZEITLER",   "B. Zeitler"],
-                                          ["B_MONTPETIT",   "B. Montpetit"],
-                                          ["C_BRUNE",   "C. Brune"],
-                                          ["C_DERRER",   "C. Derrer"],
-                                          ["C_SMOLKE",   "C. Smolke"],
-                                          ["C_WEIRICH",   "C. Weirich"],
-                                          ["C_MUGLER",   "C. Mugler"],
-                                          ["E_GREEN",   "E. Green"],
-                                          ["E_ONISHCHENKO",   "E. Onishchenko"],
-                                          ["E_WEIDER",   "E. Weider"],
-                                          ["J_CARROLL",   "J. Carroll"],
-                                          ["J_TANG",   "J. Tang"],
-                                          ["J_SODERHOLM",   "Jon Soderholm"],
-                                          ["K_WEIS",   "K. Weis"],
-                                          ["L_STANTON",   "L. Stanton"],
-                                          ["M_BLOWER",   "M. Blower"],
-                                          ["M_HERZOG",   "M. Herzog"],
-                                          ["M_HOCHSTRASSER",   "M. Hochstrasser"],
-                                          ["M_HONDELE",   "M. Hondele"],
-                                          ["M_NACHURY",   "M. Nachury"],
-                                          ["N_FISCHER",   "N. Fischer"],                                          
-                                          ["L_CHAN",   "L. Chan"],                                          
-                                          ["P_KALAB",   "P. Kalab"],                                          
-                                          ["R_JOYNER",   "R. Joyner"],                                          
-                                          ["R_SACHDEV",   "R. Sachdev"],                                          
-                                          ["R_MANCINI",   "R. Mancini"],                                          
-                                          ["S_MUNCHEL",   "S. Munchel"],                                          
-                                          ["N_TAKIZAWA",   "N. Takizawa"],                                          
-                                          ["S_BIRD",   "S. Bird"],                                          
-                                          ["S_HEINRICH",   "S. Heinrich"],                                          
-                                          ["S_RAJOO",   "S. Rajoo"],                                          
-                                          ["Y_JIANG",   "Y. Jiang"],                                          
-                                          ["Z_DOSSANI",   "Z. Dossani"],                                          
-                                          ["B_ROBINSON",   "B. Robison"],                                          
-                                          ["C_MCGOURTY",   "C. McGourty"],                                          
-                                          ["SEE_COMMENTS",   "See comments"],                                          
-                                         
-                                         ],
-                              "AB_CLONALITY" : [
-                                         ["MONOCLONAL",   "monoclonal"],
-                                         ["POLYCLONAL",   "polyclonal"],
-                                      ],                       
-                              "AB_SPECIES" : [
-                                         ["HUMAN",   "Human"],
-                                         ["RABBIT",   "Rabbit"],
-                                         ["MOUSE",   "Mouse"],
-                                         ["CHICKEN",   "Chicken"],
-                                         ["DONKEY",   "Donkey"],  
-                                         ["CAMEL",   "Camel"],   
-                                         ["GOAT",   "Goat"],   
-                                         ["SHEEP",   "Sheep"],   
-                                         ["RAT",   "Rat"],   
-                                         ["UNKWOWN",   "?"],   
-                                         ["SEE_COMMENTS",   "see comments"],   
-                                                                                                                        
-                                      ],  
-                              "AB_TYPE" : [
-                                         ["IGG",   "IgG"],
-                                         ["IGM",   "IgM"],
-                                         ["IGY",   "IgY"],
-                                         ["UNKNOWN",   "?"],
-                                         ["SEE_COMMENTS",   "see comments"],  
-                                                                                                                     
-                                      ],                           
-                              "AB_FORM" : [
-                                         ["SERUM",   "serum"],
-                                         ["AFFINITY_PURIFIED",   "affinity purified"],
-                                         ["TISSUE_CULT_SUPERNATANT",   "tissue culture supernatant"],
-                                         ["SEE_COMMENTS",   "see comments"],  
-                                                                                                                     
-                                      ],                                          
-                              "AB_PRIMSEC" : [
-                                         ["PRIMARY",   "primary"],
-                                         ["SECONDAY",   "secondary"],
-                                
-                                      ], 
-                              "AB_LOCATION" : [
-                                         ["FOUR_DEG",   "4C"],
-                                         ["MINUS_20",   "-20C"],
-                                         ["MINUS_80",   "-80C"],                                         
-                                         ["RT",   "RT"],                                         
-                                         ["SEE_COMMENTS",   "see comments"],                                 
-                                      ],                           
-                              "CHEMICALS_LOCATION" : [
-                                         ["CHEM_CABINET",   "Chemical cabinet"],
-                                         ["CHEM_CABINET_E8",   "Chemical cabinet E8"],
-                                         ["MINUS_20",   "-20C"],
-                                         ["FOUR_DEG",   "4C"],
-                                         ["MINUS_80",   "-80C"],
-                                         ["SMALL_CHEMICALS",   "Small chemicals"],
-                                         ["DYES",   "Dyes"],                                                                                  
-                                         ["SEE_COMMENTS",   "see comments"],
-                                
-                                      ],  
-                              "YEAST_BACKGROUND" : [
-                                         ["UNKWNOWN",   "?"]
-                                
-                                      ],  
- 
-                              "OLIGO_CATEGORY" : [
-                                         ["CHECKING",   "Checking"],
-                                         ["CLONING",   "Cloning"],
-                                         ["MUTAGENESIS",   "Mutagenesis"],
-                                         ["PRINGLE",   "Pringle"],
-                                         ["QPCR",   "qPCR"],  
-                                         ["SEQUENCING",   "qPCR"],                                                                                  
-                                      ],
-                              "OLIGO_SENSE" : [
-                                         ["SENSE",   "sense"],
-                                         ["ANTISENSE",   "antisense"],
-                                      ],                         
-                              "PLASMID_BACTERIAL_STRAIN" : [                         
-                                              ["XL1BLUE",   "XL1blue"],
-                                              ["XL10-GOLD",   "XL10-Gold"],
-                                              ["XL1-BLUE",   "XL1-Blue"],
-                                              ["TG2",   "TG2"],
-                                              ["TG1",   "TG1"],
-                                              ["SURE",   "SURE"],
-                                              ["STBL3",   "STBL3"],
-                                              ["STBL2",   "STBL2"],
-                                              ["SOLR_CELLS",   "SOLR cells"],
-                                              ["SG13",   "SG13"],
-                                              ["SCS110",   "SCS110"],
-                                              ["MC1061",   "MC1061"],
-                                              ["MACH1",   "MACH1"],
-                                              ["M15PREP4",   "M15prep4"],
-                                              ["KC8",   "KC8"],
-                                              ["HB101",   "HB101"],
-                                              ["E_COLI",   "E.coli"],
-                                              ["DH5ALPHA",   "DH5alpha"],
-                                              ["DH10B",   "DH10B"],
-                                              ["DH1",   "DH1"],
-                                              ["CCDB_SURVIVAL",   "ccdB Survival"],
-                                              ["BLR",   "BLR"],
-                                              ["BL21_PLUS",   "BL21+"],
-                                              ["BL21-LYSS",   "BL21[LysS]"],
-                                              ["BL21",   "BL21"],
-                                              ["UNKNOWN",   "???"]
-                                              ],                          
-                             "PLASMID_DRUG_RES" : [                                
-                                                           ["AMP",   "Amp"],
-                                                           ["AMP_MAYBE",   "AMP?"],
-                                                           ["CAM",   "CAM"],
-                                                           ["KAN",   "KAN"],
-                                                           ["KAN_CAM",   "kan cam"],
-                                                           ["KAN-CAM-CCDB_CELLS",   "KAN,CAM, ccdB cells"],
-                                                           ["TET",   "tet"],
-                                                           ["ZEO",   "Zeo"]
-                                                    ],    
-
-                             "PLASMID_SELECTION_MAKER" : [                            
-                                                   ["URA3_ADE3",    "URA3, ADE3"],
-                                                   ["ADE2",    "ADE2"],
-                                                   ["CAURA",    "CaURA"],
-                                                   ["CAURA3",    "CaURA3"],
-                                                   ["CEN_HIS3",    "CEN, HIS3"],
-                                                   ["G418",    "G418"],
-                                                   ["HIS3",    "HIS3"],
-                                                   ["HIS3_OR_LEU2",    "HIS3 or LEU2"],
-                                                   ["HIS3MX",    "HIS3MX"],
-                                                   ["HIS5",    "HIS5"],
-                                                   ["HIS5MX",    "His5MX"],
-                                                   ["HISMX",    "HisMX"],
-                                                   ["HISMX6",    "HISMX6"],
-                                                   ["HPHMX",    "HphMx"],
-                                                   ["HYG",    "Hyg"],
-                                                   ["HYGB",    "HYGB"],
-                                                   ["HYGB_R",    "HygB R"],
-                                                   ["KAN",    "kan"],
-                                                   ["KANMX",    "KanMX"],
-                                                   ["LEU",    "Leu"],
-                                                   ["LEU2",    "LEU2"],
-                                                   ["MET15",    "MET15"],
-                                                   ["NAT",    "Nat"],
-                                                   ["NATMX",    "NatMX"],
-                                                   ["NEO",    "Neo"],
-                                                   ["NOTHING",    "nothing"],
-                                                   ["S_POMBE_HIS5",    "S. pombe His5"],
-                                                   ["SPHIS5",    "SpHIS5"],
-                                                   ["TRP1",    "TRP1"],
-                                                   ["URA",    "URA"],
-                                                   ["URA3",    "URA3"],
-                                                   ["URA3_CA",    "URA3 (C.a.)"]
-                                            ],
-                             "PLASMID_VECTOR_TYPE" : [                                
-                                                           ["BACTERIAL_EXPRESSION",   "Bacterial expression"],
-                                                           ["YEAST_INTEGRATION",   "Yeast integration"],
-                                                           ["PRINGLE",   "Pringle"],
-                                                           ["MAMMALIAN_EXPRESSION",   "Mammalian expression"],
-                                                           ["YEAST_CEN",   "Yeast CEN"],
-                                                           ["YEAST_CENLESS",   "Yeast CEN-less with ARS"],
-                                                           ["YEAST_2U",   "Yeast 2u"],
-                                                           ["CLONING_INTERMEDIATE",   "Cloning intermediate"],
-                                                           ["PLASMID",   "Plasmid"],
-                                                           ["PHAGEMID",   "Phagemid"]
-                                                           
-                                                    ],                             
-                            "EXPERIMENTAL_READOUT":
-                                    [
-                                        ["FLOW_CYTOMETRY", "flow citometry", None],
-                                        ["SORTING", "cell sorting", None],
-                                        ["GROWTH", "growth", None],
-                                        ["WESTERN_BLOTTING", "western blotting", None],
-                                        ["RT_QPCR", "RT-qPCR", None]
-                                    ],
-                            "MACHINE":
-                                    [
-                                        ["LSRII_FORTESSA", "SRII Fortessa", None],
-                                        ["TECAN_READER", "Tecan reader", None],
-                                        ["BIOLECTOR", "BioLector", None],
-                                        ["LICOR_ODYSSEY", "LI-COR Odyssey", None],
-                                        ["TI_ECLIPSE", "TI Eclipse (Nikon)", None],
-                                        ["SRX_101A", "Konica Minolta SRX-101A", None],
-                                        ["LIGHT_CYCLER", "LightCycler 480", None]
-                                    ],                        
-                                 "FREEZER" : [
-                                             ["BENCH-20",  "Bench -20�C"],
-                                             ["BENCH-80",  "Bench -80�C"],
-                                             ["BENCH-RT",  "Bench RT"],
-                                             ["BENCH",  "Bench"]
-                                        ],
-                                 "MAT" : [
-                                             ["ALPHA",  "a"],
-                                             ["A",  "A"],
-                                             ["ALPHA_A",  "a/A"],
-                                             ["A_A",  "A/A"],
-                                             ["ALPHA_ALPHA",  "a/a"],
-                                             ["UNKNOWN",  "?"],
-                                        ]                         
-                         
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/as/initialize-master-data.py b/plasmid/source/core-plugins/weismigration/1/as/initialize-master-data.py
deleted file mode 100644
index 2f15877fe4c9e3314fb40a5197c05ab420084df1..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/as/initialize-master-data.py
+++ /dev/null
@@ -1,327 +0,0 @@
-#
-# Copyright 2014 ETH Zuerich, Scientific IT Services
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##
-## Configuration
-##
-#PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/juanf/Documents/workspace/openbis/source/core-plugins/petermigration/1/compatibility/";
-PATH_TO_MANAGE_PROPERTIES_SCRIPTS = "/Users/barillac/openbis-weis/servers/core-plugins/weismigration/1/compatibility/";
-
-# MasterDataRegistrationTransaction Class
-import definitions
-import definitionsVoc
-import os
-import copy
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-##
-## Globals
-##
-vocabulariesCache = {};
-propertiesCache = {};
-samplesCache = {};
-tr = service.transaction()
-
-##
-## API Facade
-##
-def createVocabularyWithTerms(vocabularyCode, terms):
-    vocabulary = tr.createNewVocabulary(vocabularyCode);
-    vocabulary.setChosenFromList(True);
-    addTerms(vocabulary, terms);
-    vocabulariesCache[vocabularyCode] = vocabulary;
-    
-def addTerms(vocabulary, terms):
-    for term in terms:
-        addTermWithLabel(vocabulary, term[0], term[1])
-    
-def addTermWithLabel(vocabulary, termCode, termLabel):
-    newTerm = tr.createNewVocabularyTerm(termCode);
-    newTerm.setLabel(termLabel);
-    vocabulary.addTerm(newTerm);
-    
-def createSampleTypeWithProperties(sampleTypeCode, description, properties):
-    newSampleType = tr.getOrCreateNewSampleType(sampleTypeCode);
-    newSampleType.setDescription(description);
-    newSampleType.setShowParents(True);
-    newSampleType.setAutoGeneratedCode(True);
-    if sampleTypeCode == "CHEMICAL":
-        newSampleType.setGeneratedCodePrefix("CHEM");
-    elif sampleTypeCode == "RESTRICTION_ENZYME":
-        newSampleType.setGeneratedCodePrefix("RE");        
-    elif sampleTypeCode == "ANTIBODY":
-        newSampleType.setGeneratedCodePrefix("AB");        
-    elif sampleTypeCode == "OLIGO":
-        newSampleType.setGeneratedCodePrefix("CH");
-    elif sampleTypeCode == "PLASMID":
-        newSampleType.setGeneratedCodePrefix("PKW");
-    elif sampleTypeCode == "STRAIN":
-        newSampleType.setGeneratedCodePrefix("KWY"); 
-    elif sampleTypeCode == "EXPERIMENTAL_STEP":
-        newSampleType.setGeneratedCodePrefix("EXP");                
-    addProperties(newSampleType, properties);
-    samplesCache[sampleTypeCode] = newSampleType;
-    
-def createDataSetTypeWithProperties(dataSetCode, description, properties):
-    newDataSet = tr.getOrCreateNewDataSetType(dataSetCode);
-    newDataSet.setDescription(description);
-    addProperties(newDataSet, properties);
-    
-def createExperimentTypeWithProperties(experimentTypeCode, description, properties):
-    newExperiment = tr.getOrCreateNewExperimentType(experimentTypeCode);
-    newExperiment.setDescription(description);
-    addProperties(newExperiment, properties);
-
-def addPropertiesToSamples(sampleTypeCodes, properties):
-    for sampleTypeCode in sampleTypeCodes:
-        sampleType = samplesCache[sampleTypeCode];
-        addProperties(sampleType, properties);
-    
-def addProperties(entity, properties):
-    for property in properties:
-        propertyCode = property[0];
-        if propertyCode.startswith("-"):
-            continue
-        elif propertyCode.startswith("+"):
-            propertyCode = propertyCode[1:];
-        
-        addProperty(entity, propertyCode, property[1], property[2], property[3], property[4], property[5], property[6], property[7], property[8]);
-    
-def addProperty(entity, propertyCode, section, propertyLabel, dataType, vocabularyCode, propertyDescription, managedScript, dynamicScript, isMandatory):
-    property = None;
-    
-    if propertyCode in propertiesCache:
-        property = propertiesCache[propertyCode];
-    else:
-        property = createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode);
-    
-    propertyAssignment = tr.assignPropertyType(entity, property);
-    propertyAssignment.setSection(section);
-    propertyAssignment.setMandatory(isMandatory);
-    propertyAssignment.setShownEdit(True);
-    
-    if managedScript != None:
-        propertyAssignment.setManaged(True);
-        propertyAssignment.setScriptName(managedScript);
-    if dynamicScript != None:
-        propertyAssignment.setDynamic(True);
-        propertyAssignment.setShownEdit(False);
-        propertyAssignment.setScriptName(dynamicScript);
-
-def createProperty(propertyCode, dataType, propertyLabel, propertyDescription, vocabularyCode):
-    property = tr.getOrCreateNewPropertyType(propertyCode, dataType);
-    property.setDescription(propertyDescription);
-    property.setLabel(propertyLabel);
-    propertiesCache[propertyCode] = property;
-    if dataType == DataType.CONTROLLEDVOCABULARY:
-        property.setVocabulary(vocabulariesCache[vocabularyCode]);
-    return property;
-
-#Valid Script Types: DYNAMIC_PROPERTY, MANAGED_PROPERTY, ENTITY_VALIDATION 
-def createScript(path, name, description, scriptType, entityType):
-    scriptAsString = open(path, 'r').read();
-    script = tr.getOrCreateNewScript(name);
-    script.setName(name);
-    script.setDescription(description);
-    script.setScript(scriptAsString);
-    script.setScriptType(scriptType);
-    script.setEntityForScript(entityType);
-    return script;
-
-
-def createAnnotationsScriptForType(sampleTypeCode):
-    annotationsScriptName = None;
-    if PATH_TO_MANAGE_PROPERTIES_SCRIPTS != None:
-        annotationsScriptName = "ANNOTATIONS_" + sampleTypeCode;
-        annotationsScriptAsString = open(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "managed.py", 'r').read();
-        annotationsScriptAsString = annotationsScriptAsString.replace("<REPLACE_WITH_ANNOTABLE_TYPE>", sampleTypeCode);
-        annotationsScript = tr.getOrCreateNewScript(annotationsScriptName);
-        annotationsScript.setName(annotationsScriptName);
-        annotationsScript.setDescription("Annotations Handler for " + sampleTypeCode);
-        annotationsScript.setScript(annotationsScriptAsString);
-        annotationsScript.setScriptType("MANAGED_PROPERTY");
-        annotationsScript.setEntityForScript("SAMPLE");
-    return annotationsScriptName;    
-##
-## Managed properties scripts
-##
-commentsScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "comments.py",
-                                  definitions.commentsScriptName,
-                                  "Comments Handler",
-                                  "MANAGED_PROPERTY",
-                                  "SAMPLE");
-
-##
-## Dynamic properties scripts
-##
-
-
-
-
-gcScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "gc.py",
-                                  definitions.gcScriptName,
-                                  "Count percentage of G and C in sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-
-atScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "at.py",
-                                  definitions.atScriptName,
-                                  "Count percentage of A and T in sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-
-lengthScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "length.py",
-                                  definitions.lengthScriptName,
-                                  "Count length sequence",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-
-antibodyrefnumScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "antibody_refnum.py",
-                                  definitions.antibodyrefnumScriptName,
-                                  "Antibody ref num from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-antibodynameScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "antibody_name.py",
-                                  definitions.antibodynameScriptName,
-                                  "Antibody name from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-chemicalrefnumScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "chemical_refnum.py",
-                                  definitions.chemicalrefnumScriptName,
-                                  "Chemical ref num from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-oligonameScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "oligo_name.py",
-                                  definitions.oligonameScriptName,
-                                  "Oligo name from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-oligorefnumScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "oligo_refnum.py",
-                                  definitions.oligorefnumScriptName,
-                                  "Oligo ref num from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-                                  
-oligosysnameScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "sysname_calculation.py",
-                                  definitions.oligosysnameScriptName,
-                                  "Oligo sys name calculation",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-                                  
-plasmidnameScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "plasmid_name.py",
-                                  definitions.plasmidnameScriptName,
-                                  "Plasmid name from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-plasmidrefnumScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "plasmid_refnum.py",
-                                  definitions.plasmidrefnumScriptName,
-                                  "Plasmid ref num from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-strainnameScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "strain_name.py",
-                                  definitions.strainnameScriptName,
-                                  "Strain name from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-strainglycerolScriptName = createScript(PATH_TO_MANAGE_PROPERTIES_SCRIPTS + "strain_glycerol_stock_number.py",
-                                  definitions.strainglycerolScriptName,
-                                  "Strain glycerol stock number from code",
-                                  "DYNAMIC_PROPERTY",
-                                  "SAMPLE");
-
-
-
-    
-
-
-##
-## Vocabulary Types
-##
-for vocabularyCode, vocabularyValues in definitionsVoc.vocabularyDefinitions.iteritems():
-    createVocabularyWithTerms(vocabularyCode, vocabularyValues)
-
-##
-## DataSet Types
-##
-createDataSetTypeWithProperties("ELN_PREVIEW", "ELN Preview image", definitions.DefaultDatasetDefinition);
-createDataSetTypeWithProperties("SEQ_FILE", "",definitions.DefaultDatasetDefinition);
-createDataSetTypeWithProperties("RAW_DATA", "",definitions.DefaultDatasetDefinition);
-createDataSetTypeWithProperties("ANALYZED_DATA", "",  definitions.DefaultDatasetDefinition);  
-    #===============================================================================================
-    # createDataSetTypeWithProperties("SEQ_FILE", "", [
-    #     ["NAME", "General", "Name", DataType.MULTILINE_VARCHAR, None,    "Name", None, None,False],
-    #     ["NOTES", "General information", "Notes", DataType.MULTILINE_VARCHAR, None, "Notes regarding the dataset", None, None,False],
-    #     ["XMLCOMMENTS",    "Comments","Comments List",    DataType.XML,    None,    "Several comments can be added by different users", commentsScriptName, None,False]
-    #     
-    # ]);
-    # 
-    # createDataSetTypeWithProperties("RAW_DATA", "", [
-    #     ["NAME", "General", "Name", DataType.MULTILINE_VARCHAR, None,    "Name", None, None,False],
-    #     ["NOTES", "General information", "Notes", DataType.MULTILINE_VARCHAR, None, "Notes regarding the dataset", None, None,False],
-    #     ["XMLCOMMENTS",    "Comments","Comments List",    DataType.XML,    None,    "Several comments can be added by different users", commentsScriptName, None,False]
-    # ]);
-    # 
-    # createDataSetTypeWithProperties("ANALYZED_DATA", "", [
-    #     ["NAME", "General", "Name", DataType.MULTILINE_VARCHAR, None,    "Name", None, None,False],
-    #     ["NOTES", "General information", "Notes", DataType.MULTILINE_VARCHAR, None, "Notes regarding the dataset", None, None,False],
-    #     ["XMLCOMMENTS",    "Comments","Comments List",    DataType.XML,    None,    "Several comments can be added by different users", commentsScriptName, None,False]
-    #     ["XMLCOMMENTS",     "Comments","Comments List",   DataType.XML,                 None,    "Several comments can be added by different users", commentsScriptName, None, False]
-    # ]);
-    # 
-    #===============================================================================================
-
-
-##
-## Experiment Types
-##
-createExperimentTypeWithProperties("DEFAULT_EXPERIMENT", "Default Experiment", definitions.experimentDefinition);
-createExperimentTypeWithProperties("MATERIAL", "FOLDER FOR ORGANIZING MATERIALS SAMPLES", []);
-createExperimentTypeWithProperties("METHOD", "FOLDER FOR ORGANIZING METHODS SAMPLES", []);
-
-
-##
-## Sample Types
-##
-annotationsScriptName = createAnnotationsScriptForType("ANTIBODY");
-createSampleTypeWithProperties("ANTIBODY", "", definitions.antibodyDefinition);
-#addStorageGroups(definitions.numberOfStorageGroups, "ANTIBODY");
-annotationsScriptName = createAnnotationsScriptForType("STRAIN");
-createSampleTypeWithProperties("STRAIN", "", definitions.strainDefinition);
-# addRepetition(definitions.numberOfRepetitions, "STRAIN");
-annotationsScriptName = createAnnotationsScriptForType("PLASMID");
-createSampleTypeWithProperties("PLASMID", "", definitions.plasmidDefinition);
-# addStorageGroups(definitions.numberOfStorageGroups, "PLASMID");
-annotationsScriptName = createAnnotationsScriptForType("OLIGO");
-createSampleTypeWithProperties("OLIGO", "", definitions.oligoDefinition);
-annotationsScriptName = createAnnotationsScriptForType("CHEMICAL");
-createSampleTypeWithProperties("CHEMICAL", "", definitions.chemicalDefinition);
-annotationsScriptName = createAnnotationsScriptForType("RESTRICTION_ENZYME");
-createSampleTypeWithProperties("RESTRICTION_ENZYME", "", definitions.RestrictionEnzymeDefinition);
-annotationsScriptName = createAnnotationsScriptForType("EXPERIMENTAL_STEP");
-createSampleTypeWithProperties("EXPERIMENTAL_STEP", "", definitions.ExperimentalStepDefinition);
-
-
-    
-    
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/adenosine_count.py b/plasmid/source/core-plugins/weismigration/1/compatibility/adenosine_count.py
deleted file mode 100644
index 58363afbe1c2b60133113de10b140a4ace143e99..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/adenosine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('A')+entity.propertyValue('SEQUENCE').count('a')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/antibody_name.py b/plasmid/source/core-plugins/weismigration/1/compatibility/antibody_name.py
deleted file mode 100644
index 137e26f9b9adeee242f5107ad5c8976b0f321dd5..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/antibody_name.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-    code= entity.entityPE().code
-    
-    return code
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/antibody_refnum.py b/plasmid/source/core-plugins/weismigration/1/compatibility/antibody_refnum.py
deleted file mode 100644
index 4a88e4102d91019583d397c0b375830e1c357c27..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/antibody_refnum.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-   	codeNum= entity.entityPE().code.split('AB')
-	
-	return codeNum[1]
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/at.py b/plasmid/source/core-plugins/weismigration/1/compatibility/at.py
deleted file mode 100644
index 60aa3b66afe2b4db3f9b956737df7f788bc53050..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/at.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result = (len(re.findall("A|a|T|t", entity.propertyValue('SEQUENCE'))) * 100)/len(re.findall("A|a|C|c|G|g|T|t|U|u", entity.propertyValue('SEQUENCE')))	
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/chemical_refnum.py b/plasmid/source/core-plugins/weismigration/1/compatibility/chemical_refnum.py
deleted file mode 100644
index c45f80adea4ba2686f0335ac9ff4a26757bc6922..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/chemical_refnum.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-    codeNum= entity.entityPE().code.split('CHEM')
-    
-    return codeNum[1]
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/comments.py b/plasmid/source/core-plugins/weismigration/1/compatibility/comments.py
deleted file mode 100644
index 02c50d2364afd8bf0dce2d50297c6bff2ccb35bf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/comments.py
+++ /dev/null
@@ -1,174 +0,0 @@
-from java.util import Date
-
-"""
-Example XML property value handled by this script:
-<root>
-  <commentEntry date="2011-02-20 14:15:28 GMT+01:00" person="buczekp">Here is the 1st  entry text.<commentEntry>
-  <commentEntry date="2011-02-20 14:16:28 GMT+01:00" person="kohleman">Here is the 2nd  entry text - a warning!<commentEntry>
-  <commentEntry date="2011-02-20 14:17:28 GMT+01:00" person="tpylak">Here is the 3rd  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:18:28 GMT+01:00" person="brinn">Here is the 4th  entry text - an error!!!<commentEntry>
-  <commentEntry date="2011-02-20 14:19:28 GMT+01:00" person="felmer">Here is the 5th  entry text - a warning!<commentEntry>
-</root>
-"""
-  
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-
-""" labels of table columns and corresponding input fields """
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-  
-""" names of attributes of XML elements for comment entries """
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-  
-""" action labels (shown as button labels in UI) """
-ADD_ACTION_LABEL = 'Add Comment Entry'
-EDIT_ACTION_LABEL = 'Edit'
-DELETE_ACTION_LABEL = 'Delete'
-  
-  
-def configureUI():
-    """Create table builder and add headers of columns."""
-    builder = createTableBuilder()
-    builder.addHeader(DATE_LABEL, 250) # date and comment text values are long, override default width (150)
-    builder.addHeader(PERSON_LABEL)
-    builder.addHeader(COMMENT_TEXT_LABEL, 400)
-      
-    """
-       Extract XML elements from property value to a Python list.
-       For each element (comment entry) add add a row to the table.  
-    """
-    elements = list(propertyConverter().convertToElements(property))
-    for commentEntry in elements:
-        row = builder.addRow()
-        row.setCell(DATE_LABEL, Date(long(commentEntry.getAttribute(DATE_ATTRIBUTE))))
-        row.setCell(PERSON_LABEL, commentEntry.getAttribute(PERSON_ATTRIBUTE))
-        row.setCell(COMMENT_TEXT_LABEL, commentEntry.getData())
-  
-    """Specify that the property should be shown in a tab and set the table output."""
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(builder.getTableModel())
-  
-    """
-       Define and add actions with input fields used to:
-       1. specify attributes of new comment entry,
-    """
-    addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\
-                             .setDescription('Add a new comment entry:')
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL)\
-                            .setMandatory(True)
-    ]
-    addAction.addInputWidgets(widgets)
-      
-    """
-       2. modify attributes of a selected comment entry,
-    """
-    editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\
-                              .setDescription('Edit selected comment entry:')
-    # Exactly 1 row needs to be selected to enable action.
-    editAction.setRowSelectionRequiredSingle()            
-    widgets = [
-        inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL).setMandatory(True)
-    ]
-    editAction.addInputWidgets(widgets)
-    # Bind field name with column name.
-    editAction.addBinding(COMMENT_TEXT_LABEL, COMMENT_TEXT_LABEL)
-  
-    """
-       3. delete selected comment entries.
-    """
-    deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\
-                                .setDescription('Are you sure you want to delete selected comment entry?')
-    # Delete is enabled when at least 1 row is selected.
-    deleteAction.setRowSelectionRequired()
-    
-  
-def updateFromUI(action):
-    """Extract list of elements from old value of the property."""
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-  
-    """Implement behaviour of user actions."""
-    if action.name == ADD_ACTION_LABEL:
-        """
-           For 'add' action create new comment entry element with values from input fields
-           and add it to existing elements.
-        """
-        element = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-        """Fill element attributes with appropriate values."""
-        element.addAttribute(DATE_ATTRIBUTE, str(Date().getTime()))            # current date
-        element.addAttribute(PERSON_ATTRIBUTE, action.getPerson().getUserId()) # invoker the action
-        """Retrieve values from input fields filled by user on the client side."""
-
-        """Set comment text as a text element, not an attribute."""
-        element.setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        """Add the new entry to the end of the element list."""
-        elements.append(element)
-    elif action.name == EDIT_ACTION_LABEL:
-        """
-           For 'edit' action find the comment entry element corresponding to selected row
-           and replace it with an element with values from input fields.
-        """
-        
-        selectedRowId = action.getSelectedRows()[0]
-        xmlUser = elements[selectedRowId].getAttribute(PERSON_ATTRIBUTE)
-        if action.getPerson().getUserId() == xmlUser:
-          elements[selectedRowId].setData(action.getInputValue(COMMENT_TEXT_LABEL))
-        else:
-          raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    elif action.name == DELETE_ACTION_LABEL:
-        """
-           For 'delete' action delete the entries that correspond to selected rows.
-           NOTE: As many rows can be deleted at once it is easier to delete them in reversed order.
-        """
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()       
-        for rowId in rowIds:
-              xmlUser = elements[rowId].getAttribute(PERSON_ATTRIBUTE)
-              if action.getPerson().getUserId() == xmlUser:
-                elements.pop(rowId)
-              else:
-                raise ValidationException('Comment creator and current user differ:\n' +  str(xmlUser) + "!=" + str(action.getPerson().getUserId()) )
-    else:
-        raise ValidationException('action not supported')
-      
-    """Update value of the managed property to XML string created from modified list of elements."""
-    property.value = converter.convertToString(elements)
-
-def _createCommentEntry(comment_text_list):
-    #if comment_text_list is not None:
-    commentEntry = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-                     
-    commentEntry.addAttribute(PERSON_ATTRIBUTE, person.getUserId())
-    commentEntry.addAttribute(DATE_ATTRIBUTE,str(Date().getTime()))
-    commentEntry.setData(comment_text_list)
-    return commentEntry   
-
-def showRawValueInForms():
-    return False
- 
-def batchColumnNames():
-    return [COMMENT_ENTRY_ELEMENT_LABEL]
- 
-def updateFromRegistrationForm(bindings):
-    elements = []
-    for item in bindings:
-        comment_text_list = item.get('COMMENTENTRY')
-        sampleLink = _createCommentEntry(comment_text_list)
-        elements.append(sampleLink)
-            
-    property.value = propertyConverter().convertToString(elements)
-
-
-
-        
-def updateFromBatchInput(bindings):
-    elements = []
-    input = bindings.get('')
-    if input is not None:
-        commentEntry = _createCommentEntry(input)
-        elements.append(commentEntry)
-        property.value = propertyConverter().convertToString(elements)
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/cytosine_count.py b/plasmid/source/core-plugins/weismigration/1/compatibility/cytosine_count.py
deleted file mode 100644
index faed851214f3a13d5fd25c093a6b44b2fa3ea6c0..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/cytosine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('C')+entity.propertyValue('SEQUENCE').count('c')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/gc.py b/plasmid/source/core-plugins/weismigration/1/compatibility/gc.py
deleted file mode 100644
index 6e0edde3126b787a16acd8af0bb67184d77f377a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/gc.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result = (len(re.findall("G|g|C|c", entity.propertyValue('SEQUENCE'))) * 100)/len(re.findall("A|a|C|c|G|g|T|t|U|u", entity.propertyValue('SEQUENCE')))	
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/genotype.py b/plasmid/source/core-plugins/weismigration/1/compatibility/genotype.py
deleted file mode 100644
index b8e214a367e7132814e0bc91215e450f59ea1cbb..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/genotype.py
+++ /dev/null
@@ -1,19 +0,0 @@
-def calculateValue():
-    mat= entity.propertyValue('MAT')+":" 
-    
-    result1=entity.propertyValue('DISRUPTIONS_1')+"::" +entity.propertyValue('MARKERS_1')+" " +entity.propertyValue('UNMARKED_MUTATIONS_1') +" " 
-        
-    result2=entity.propertyValue('DISRUPTIONS_2')+"::" +entity.propertyValue('MARKERS_2')+" " +entity.propertyValue('UNMARKED_MUTATIONS_2') +" " 
-        
-    result3=entity.propertyValue('DISRUPTIONS_3')+"::" +entity.propertyValue('MARKERS_3')+" " +entity.propertyValue('UNMARKED_MUTATIONS_3') +" " 
-    
-    result4=entity.propertyValue('DISRUPTIONS_4')+"::" +entity.propertyValue('MARKERS_4')+" " +entity.propertyValue('UNMARKED_MUTATIONS_4') +" " 
-    
-    result5=entity.propertyValue('DISRUPTIONS_5')+"::" +entity.propertyValue('MARKERS_5')+" " +entity.propertyValue('UNMARKED_MUTATIONS_5') +" " 
-    
-    
-    result_tot= mat+result1+result2+result3+result4+result5
-    return result_tot
-
-def calculate():
-    return calculateValue()
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/guanosine_count.py b/plasmid/source/core-plugins/weismigration/1/compatibility/guanosine_count.py
deleted file mode 100644
index 913b9db58cc74a5804779a4b2d9dcddd5ab12290..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/guanosine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('G')+entity.propertyValue('SEQUENCE').count('g')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/length.py b/plasmid/source/core-plugins/weismigration/1/compatibility/length.py
deleted file mode 100644
index 3566e9b943e0a88502b2fc78e8643f0f25826f58..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/length.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result = len(re.findall("A|a|C|c|G|g|T|t|U|u", entity.propertyValue('SEQUENCE')))	
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/managed.py b/plasmid/source/core-plugins/weismigration/1/compatibility/managed.py
deleted file mode 100644
index 6d6312c0f92b6c8bcc7e59032b5bbad4d7005858..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/managed.py
+++ /dev/null
@@ -1,331 +0,0 @@
-from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider
-
-##
-## Configuration
-##
-
-# This needs to be edited for each sample type to match the Profile.js ANNOTATION_PROPERTIES map.
-configuration = {}
-configuration["MEDIA"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["SOLUTION_BUFFER"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["GENERAL_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "GENERAL_PROTOCOL" : {"COMMENTS" : False }
-                         };
-
-configuration["PCR_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["WESTERN_BLOTTING_PROTOCOL"] = {
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False }
-                         };
-
-configuration["PLASMID"] = {
-                          "PLASMID" : {"COMMENTS" : False }
-                         };
-
-configuration["BACTERIA"] = {
-                          "BACTERIA" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False }
-                         };
-
-configuration["YEAST"] = {
-                          "YEAST" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False, "CONTAINED" : False }
-                         };
-
-configuration["CELL_LINE"] = {
-                          "CELL_LINE" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False },
-                          "FLY" : {"COMMENTS" : False }
-                         };
-
-configuration["FLY"] = {
-                          "FLY" : {"COMMENTS" : False },
-                          "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False }
-                         };
-
-configuration["EXPERIMENTAL_STEP"] = {
-                          "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "BACTERIA" : {"COMMENTS" : False },
-                          "CELL_LINE" : {"COMMENTS" : False },
-                          "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "FLY" : {"COMMENTS" : False },
-                          "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "OLIGO" : {"COMMENTS" : False },
-                          "PLASMID" : {"COMMENTS" : False },
-                          "RNA" : {"COMMENTS" : False },
-                          "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False },
-                          "YEAST" : {"COMMENTS" : False },
-                          "GENERAL_PROTOCOL" : {"COMMENTS" : False },
-                          "PCR_PROTOCOL" : {"COMMENTS" : False },
-                          "WESTERN_BLOTTING_PROTOCOL" : {"COMMENTS" : False }
-                         };
-
-configurationCopyParents = {}
-configurationCopyParents["YEAST"] = { "YEAST" : "PLASMID" };
-
-#Global Variables
-annotableType = "<REPLACE_WITH_ANNOTABLE_TYPE>"
-propertyTypes = None
-def getPropertyTypes():
-    global propertyTypes
-    if propertyTypes is None:
-        server = CommonServiceProvider.getCommonServer()
-        contextOrNull = server.tryToAuthenticateAsSystem()
-        propertyTypes = server.listPropertyTypes(contextOrNull.getSessionToken(), False)
-    return propertyTypes;
-
-##
-## Help Methods
-##
-def getAllAnnotableSampleTypesForType(fromAnnotableType):
-    allTypes = {};
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    allTypes[sampleTypeWithAnnotationsForType] = True;
-    return allTypes;
-
-def getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCodeToFind, fromAnnotableType):
-    for sampleTypeWithAnnotations in configuration:
-        if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations):
-            for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]:
-                    if sampleTypeWithAnnotationsForType == sampleTypeCodeToFind:
-                            return configuration[sampleTypeWithAnnotations][sampleTypeWithAnnotationsForType];
-    return None;
-    
-def getPropertyType(propertyTypeCode):
-    for propertyType in getPropertyTypes():
-        if propertyType.code == propertyTypeCode:
-            return propertyType
-    return None;
-
-def createAnnotationsFor(identifier, annotations, sampleType):
-    permId = entityInformationProvider().getSamplePermId(identifier);
-    newAnnotation = elementFactory().createSampleLink(permId)
-    
-    newAnnotation.addAttribute("identifier", identifier)
-    newAnnotation.addAttribute("sampleType", sampleType)
-    for annotation in annotations:
-        newAnnotation.addAttribute(annotation, annotations[annotation])
-    return newAnnotation
-
-def getWidgetForAdd(sampleTypeCode, annotableType):
-    #print "sampleTypeCode:" + sampleTypeCode + " - " + annotableType #Deleting this comment causes the thing to break
-    widgets = []
-    widgetIdentifier = inputWidgetFactory().createTextInputField("identifier")\
-                            .setMandatory(True)\
-                            .setValue("")\
-                            .setDescription("")
-    widgets.append(widgetIdentifier)
-    for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-        propertyType = getPropertyType(propertyTypeCode)
-        widget = inputWidgetFactory().createTextInputField(propertyType.label)\
-                        .setMandatory(getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType)[propertyTypeCode])\
-                        .setValue("")\
-                        .setDescription(propertyType.description)
-        widgets.append(widget)
-    return widgets;
-
-def isValid(dataType, value):
-    return True
-
-##
-## Registration form (EXPERIMENTAL)
-##
-
-# def inputWidgets():
-#     print "EXECUTING inputWidgets START"
-#     widgetsToCopyFrom = []
-#     if annotableType in configurationCopyParents:
-#         toCopyFrom = configurationCopyParents[annotableType]
-#         if(toCopyFrom is not None):
-#             for key in toCopyFrom:
-#                 widgetLabel = key + " to copy " + toCopyFrom[key]
-#                 print "EXECUTING inputWidgets key: " + widgetLabel
-#                 widgetToCopyFrom = inputWidgetFactory().createTextInputField(widgetLabel).setMandatory(False)
-#                 widgetsToCopyFrom.append(widgetToCopyFrom)
-#     print "EXECUTING inputWidgets " + str(len(widgetsToCopyFrom))
-#     return widgetsToCopyFrom
-# 
-# def updateFromRegistrationForm(bindings):
-#     print "EXECUTING updateFromaRegistrationForm"
-#     for key in bindings:
-#         print "MANAGED WITH KEY: " + str(key)
-
-##
-## Main Methods
-##
-def configureUI():
-    # Add Headers
-    tableBuilder = createTableBuilder()
-    tableBuilder.addHeader("identifier")
-    tableBuilder.addHeader("sampleType")
-    tableBuilder.addHeader("name")
-    
-    usedTableHeaders = {"identifier" : True, "sampleType" : True, "name" : True }
-    
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            if propertyTypeCode not in usedTableHeaders:
-                tableBuilder.addHeader(propertyTypeCode)
-                usedTableHeaders[propertyTypeCode] = True
-
-    property.setOwnTab(True)
-    uiDescription = property.getUiDescription()
-    uiDescription.useTableOutput(tableBuilder.getTableModel())
-    
-    # Add Rows
-    samples = list(propertyConverter().convertToElements(property))
-    for sample in samples:
-        row = tableBuilder.addRow()
-        permId = sample.getAttribute("permId")
-        
-        nameValue = entityInformationProvider().getSamplePropertyValue(permId, "NAME")
-        if nameValue is not None:
-            row.setCell("name", nameValue)
-        
-        for annotation in sample.getAttributes():
-            if annotation != "permId":
-                if annotation == "identifier":
-                    row.setCell(annotation, sample, sample.getAttribute(annotation))
-                else:
-                    row.setCell(annotation, sample.getAttribute(annotation))
-            
-    # Add Create buttons
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        title = "Add " + sampleTypeCode;
-        addAction = uiDescription.addTableAction(title).setDescription(title)
-        widgets = getWidgetForAdd(sampleTypeCode, annotableType)
-        addAction.addInputWidgets(widgets)
-
-    # TO-DO Edit button for each type with different hooks to the columns depending on the type
-    # Add Edit Button (EXPERIMENTAL)
-#     editAction = uiDescription.addTableAction('Edit').setDescription('Edit selected table row')
-#     editAction.setRowSelectionRequiredSingle()
-#     editWidgets = []
-#     for headerKey in usedTableHeaders:
-#         editWidgets.append(inputWidgetFactory().createTextInputField(headerKey))
-#         editAction.addBinding(headerKey, headerKey)
-#     editAction.addInputWidgets(editWidgets)
-
-    # Add Delete button
-    deleteAction = uiDescription.addTableAction("Delete")\
-                                .setDescription('Are you sure you want to delete selected annotation?')
-    deleteAction.setRowSelectionRequired() # Delete is enabled when at least 1 row is selected.
-    
-def updateFromUI(action):
-    converter = propertyConverter()
-    elements = list(converter.convertToElements(property))
-    
-    if action.name.startswith("Add"):
-        sampleTypeCode = action.name[4:]
-        identifier = action.getInputValue("identifier")
-        annotations = { }
-        for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType):
-            propertyType = getPropertyType(propertyTypeCode)
-            propertyTypeValue = action.getInputValue(propertyType.label)
-            if not isValid(propertyType.dataType, propertyTypeValue):
-                raise ValidationException("Property " + str(propertyType.label) + " with invalid value " + str(propertyTypeValue))
-            if propertyTypeValue is None:
-                propertyTypeValue = ""
-            annotations[propertyTypeCode] = propertyTypeValue
-        newAnnotation = createAnnotationsFor(identifier, annotations, sampleTypeCode)
-        elements.append(newAnnotation)
-    
-    if action.name.startswith("Delete"):
-        rowIds = list(action.getSelectedRows())
-        rowIds.reverse()
-        for rowId in rowIds:
-            elements.pop(rowId) 
-    
-    property.value = converter.convertToString(elements)
-
-##
-## Batch Import Methods
-##
-def batchColumnNames():
-    allTypes = []
-    for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType):
-        allTypes.append(sampleTypeCode)
-    return allTypes
-
-def updateFromBatchInput(bindings):
-    #print "--------> UPDATE FROM BATCH INPUT: "
-    elements = []
-    
-    #Links Configuration
-    typesToCopyFrom = []
-    if annotableType in configurationCopyParents:
-        typesToCopyFrom = configurationCopyParents[annotableType]
-                
-    for annotableSampleType in getAllAnnotableSampleTypesForType(annotableType):
-        annotatedSamples = bindings.get(annotableSampleType)
-        #print "-----> TYPE: " + str(annotableSampleType) + " BINDINGS: " + str(annotatedSamples)
-        if (annotatedSamples != None and annotatedSamples != ""):
-            #Annotations
-            #print "-----> Annotations"
-            if annotableSampleType not in typesToCopyFrom:
-                for sampleLine in annotatedSamples.split("\\"):
-                    propertyTypes = getPropertyTypesForSampleTypeFromAnnotableType(annotableSampleType, annotableType)
-                    identifier = None
-                    permId = None
-                    sampleLink = None
-                    for sampleProperty in sampleLine.split(";"):
-                        propertyName = sampleProperty.split(":")[0]
-                        propertyValue = sampleProperty.split(":")[1]
-                        if propertyName == "identifier":
-                            identifier = propertyValue
-                            permId = entityInformationProvider().getSamplePermId(propertyValue)
-                            sampleLink = elementFactory().createSampleLink(permId)
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                            sampleLink.addAttribute('sampleType', annotableSampleType)
-                        elif propertyName in propertyTypes:
-                            sampleLink.addAttribute(propertyName, propertyValue)
-                        else:
-                            raise NameError('Found invalid property: ' + propertyName + " on type " + annotableSampleType)
-                    if identifier is not None:
-                        elements.append(sampleLink)
-    #Links
-    #print "-----> links"
-    for typeToCopyFrom in typesToCopyFrom:
-        typeToCopy = typesToCopyFrom[typeToCopyFrom]
-        #print "-----> TYPE TO COPY FROM: " + str(typeToCopyFrom)
-        #print "-----> TYPE TO COPY: " + str(typeToCopy)
-        identifiersToCopyFrom = bindings.get(typeToCopyFrom)
-        if identifiersToCopyFrom is not None:
-            #print "-----> IDENTIFIERS TO COPY FROM: " + str(identifiersToCopyFrom)
-            identifiersForCopy = identifiersToCopyFrom.split(',')
-            for identifierToCopyFrom in identifiersForCopy:
-                #print "-----> IDENTIFIER TO COPY FROM: " + str(identifierToCopyFrom)
-                permIdFromIdentifier = entityInformationProvider().getSamplePermId(identifierToCopyFrom)
-                #print "-----> PERMID TO COPY FROM: " + str(permIdFromIdentifier)
-                parentsToCopyFromPermId = entityInformationProvider().getSamplePropertyValue(permIdFromIdentifier, "ANNOTATIONS_STATE")
-                #print "-----> ELEMENTS TO COPY: " + str(parentsToCopyFromPermId)
-                parentElements = list(propertyConverter().convertStringToElements(parentsToCopyFromPermId))
-                for parentAnnotation in parentElements:
-                    if parentAnnotation.getAttribute("sampleType") == typeToCopy:
-                        parentAnnotation.addAttribute("CONTAINED", identifierToCopyFrom)
-                        #print "-----> COPYING: " + str(parentAnnotation.getAttribute('identifier'))
-                        elements.append(parentAnnotation)
-    property.value = propertyConverter().convertToString(elements)
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/nucleotide_count.py b/plasmid/source/core-plugins/weismigration/1/compatibility/nucleotide_count.py
deleted file mode 100644
index e7630820e04b82ee92614b9951711a6343a8ec58..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/nucleotide_count.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result = len(re.findall("R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE')))	
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/oligo_name.py b/plasmid/source/core-plugins/weismigration/1/compatibility/oligo_name.py
deleted file mode 100644
index 137e26f9b9adeee242f5107ad5c8976b0f321dd5..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/oligo_name.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-    code= entity.entityPE().code
-    
-    return code
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/oligo_refnum.py b/plasmid/source/core-plugins/weismigration/1/compatibility/oligo_refnum.py
deleted file mode 100644
index ff132a9cf1579cb889e3c88de8d723513ae64e12..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/oligo_refnum.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-def calculate():
-    code =  entity.entityPE().code
-    if re.search ('UC', code):
-        codeNum= entity.entityPE().code.split('UC')
-    elif re.search('CH',code):
-        codeNum= entity.entityPE().code.split('CH')    
-    
-    return codeNum[1]
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/plasmid_name.py b/plasmid/source/core-plugins/weismigration/1/compatibility/plasmid_name.py
deleted file mode 100644
index 2d2bbeacf7138dc70be363ee71a948607371db47..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/plasmid_name.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-    codeNum= entity.entityPE().code.split('PKW')
-    plasmidName='pKW'+codeNum[1]
-    return plasmidName
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/plasmid_refnum.py b/plasmid/source/core-plugins/weismigration/1/compatibility/plasmid_refnum.py
deleted file mode 100644
index 2986b14ea77d0b48decab8ce96efefb34da69ed2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/plasmid_refnum.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-    codeNum= entity.entityPE().code.split('PKW')
-    
-    return codeNum[1]
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/strain_glycerol_stock_number.py b/plasmid/source/core-plugins/weismigration/1/compatibility/strain_glycerol_stock_number.py
deleted file mode 100644
index bf6c13c2617528d18b0bcc31766996534bb3b298..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/strain_glycerol_stock_number.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-    codeNum= entity.entityPE().code.split('KWY')
-    
-    return codeNum[1]
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/strain_name.py b/plasmid/source/core-plugins/weismigration/1/compatibility/strain_name.py
deleted file mode 100644
index 137e26f9b9adeee242f5107ad5c8976b0f321dd5..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/strain_name.py
+++ /dev/null
@@ -1,4 +0,0 @@
-def calculate():
-    code= entity.entityPE().code
-    
-    return code
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/sysname_calculation.py b/plasmid/source/core-plugins/weismigration/1/compatibility/sysname_calculation.py
deleted file mode 100644
index 6777c648ee0851d8a099376e1e1bdd7cf1db8cef..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/sysname_calculation.py
+++ /dev/null
@@ -1,33 +0,0 @@
-import re
-
-def calculate_sysname(): 
-	result = (len(re.findall("A|a|T|t", entity.propertyValue('SEQUENCE'))) * 100)/len(re.findall("A|a|C|c|G|g|T|t|U|u", entity.propertyValue('SEQUENCE')))	
-
-	type=entity.propertyValue('OLIGO_TYPE')
-	if type == "DNA":
-		type = "d"
-	else:
-		type ="r"
-
-	sense= entity.propertyValue('SENSE')
-	if sense == "SENSE":
-		sense = "s"
-	elif sense == "ANTISENSE":
-		sense ="a"
-
-	group =  entity.propertyValue('GROUP')
-
-
-	fromNuc =  entity.propertyValue('FROM_NUC')
-
-
-	toNuc=  entity.propertyValue('TONUC')
-	
-
-
-	result = type + "-" +sense +"-" +group + "-" + "[" +fromNuc +"-"+toNuc+"]"
-
-	return result
-     
-def calculate():
-	return calculate_sysname()
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/thymidine_count.py b/plasmid/source/core-plugins/weismigration/1/compatibility/thymidine_count.py
deleted file mode 100644
index 9d9db9385a916e533b74363d60f9b2acefecb8aa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/thymidine_count.py
+++ /dev/null
@@ -1 +0,0 @@
-entity.propertyValue('SEQUENCE').count('T')+entity.propertyValue('SEQUENCE').count('t')
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/compatibility/tm.py b/plasmid/source/core-plugins/weismigration/1/compatibility/tm.py
deleted file mode 100644
index a841d384a3226c09d47d7e72cccd7cb8aa52cc56..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/compatibility/tm.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import re
-
-def calculate_Onuc(): 
-	result =68.3+ (0.41* float(len(re.findall("G|g|C|c", entity.propertyValue('SEQUENCE'))) * 100)/float(len(re.findall("A|a|C|c|G|g|T|t|R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE'))))) -(600/float(len(re.findall("A|a|C|c|G|g|T|t|R|r|Y|y|M|m|K|k|S|s|W|w|H|h|b|B|D|d|X|x|n|N", entity.propertyValue('SEQUENCE')))))		
-
-	return result
-     
-def calculate():
-	return calculate_Onuc()
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/add_plasmid_parents.py b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/add_plasmid_parents.py
deleted file mode 100644
index 5bf1013b2d6b4672fbbf28736f3d3e8d22a1d3aa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/add_plasmid_parents.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#Dropbox for updating PLASMID samples with Plasmid parents. The input is a txt file downlaoded from openBIS, containing the codes of teh plasmdis already registered, the parents and a property called Plasmid Parents.
-#we read the property called plasmid parents and add these to the list of already existing parents. This has to be done in thi way, and cannot be done when creating the plasmids, becuase to set plasmid parenst these have to be already registered in openBIS.
-#
-
-import os, re, glob, shutil,csv
-
-
-print "###################################################"
-
-
-   
-#read txt file
-def parse_incoming(tr):
-  data_rows = []
-  f = open(tr.getIncoming().getAbsolutePath(), 'rU')
-  dialect = csv.Sniffer().sniff(f.read(1024))
-  f.seek(0)
-  reader = csv.DictReader(f, dialect=dialect)
-  for row in reader:
-    data_rows.append(row)
-  f.close()
-  return data_rows  
-
-def update_sample_with_parents(tr, sample_dict):
-  """ Get the specified sample or register it if necessary """
-
-  space_code = "MATERIALS"
-  project_code = "PLASMIDS"
-  # The dictionary keys come from the CSV file
-  sample_code = sample_dict['Code']
-  parents_code=sample_dict['Parents']
-  parents_code_list=re.split(" ", parents_code)
-  plasmid_list=[]
-  plasmid_parent_code = sample_dict['Parent plasmid']
-  plasmid_parent_code_split = re.split("/|\+|-|\?|\(|\)|\ and |", plasmid_parent_code)
-  print sample_code, plasmid_parent_code_split
- 
-  
-  sample_id = "/%(space_code)s/%(sample_code)s" % vars()
-
-  for name in plasmid_parent_code_split:
-    sample = tr.getSample(sample_id)
-    sample_for_update = tr.makeSampleMutable(sample)
-    if sample_id == "/MATERIALS/PKW3386":
-        sample_for_update.setParentSampleIdentifiers(['/MATERIALS/PKW3363', '/MATERIALS/PKW3355'])
-    if not sample_id =="/MATERIALS/PKW581" and not sample_id == "/MATERIALS/PKW3386" and not sample_id == "/MATERIALS/PKW3158":   
-      if re.search ("pKW ", name):
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pKW ","PKW").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)           
-      elif re.search ("pKW467 pRS CRM1", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pKW467 pRS CRM1","PKW467").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)       
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)      
-      elif re.search ("pKW468 pRS CRM1", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pKW468 pRS CRM1","PKW468").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)       
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)      
-      elif re.search ("HA pKW2682", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("HA pKW2682","PKW2682").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)       
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)  
-      elif re.search ("pKW639 pCFP", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pKW639 pCFP","PKW639").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)       
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            print "P2 : ", plasmid_list
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)
-      elif re.search ("pKW001", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pKW001","PKW1").strip()
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)              
-      elif re.search ("PKW001", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("PKW001","PKW1").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)  
-      elif re.search ("pkw", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pkw","PKW").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)       
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list) 
-      elif re.search ("pKW", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pKW","PKW").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)       
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)  
-      elif re.search ("pKw", name): 
-        plasmid_parent_id = "/MATERIALS/"+name.replace("pKw","PKW").strip()
-        print "PARENT: ", plasmid_parent_id
-        if not parents_code_list ==['']:
-            parents_code_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(parents_code_list)       
-        else:
-            plasmid_list.append(plasmid_parent_id)
-            sample_for_update.setParentSampleIdentifiers(plasmid_list)                            
-      elif re.search ("PKW", name):
-          plasmid_parent_id = "/MATERIALS/"+name.strip()
-          plasmid_list.append(plasmid_parent_id)
-          print "PARENT : ", plasmid_list
-          sample_for_update.setParentSampleIdentifiers(plasmid_list)     
-
- 
-
-def register_samples_in_openbis(tr, data_rows):
-  for sample_dict in data_rows:
-    update_sample_with_parents(tr, sample_dict)
-
-
-def process(tr):
-  data_rows = parse_incoming(tr)
-  register_samples_in_openbis(tr, data_rows)
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/plasmid_parents_030715.txt b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/plasmid_parents_030715.txt
deleted file mode 100644
index c1837af2a78c23eac526163a86cd3e477460a0e7..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/plasmid_parents_030715.txt
+++ /dev/null
@@ -1 +0,0 @@
-Code	Parents	Parent plasmid
PKW1		
PKW10		
PKW100		pJG4-5
PKW1000		
PKW1001		
PKW1002		
PKW1003		
PKW1004		pKW 966
PKW1005		pKW 966
PKW1006		pKW 966
PKW1007		
PKW1008		pKW710
PKW1009		pKW656
PKW101		pJG4-5
PKW1010		pKW710
PKW1011		pKW656
PKW1012		pKW927
PKW1013		pKW929
PKW1014		pKW999 (pPW66R)
PKW1015		pKW999 (pPW66R)
PKW1016	/MATERIALS/US386 /MATERIALS/US605	pKW347
PKW1017		pRS313
PKW1018		pRS313
PKW1019		pRS313
PKW102		pJG4-5
PKW1020		pRS313
PKW1021		pRS313
PKW1022		pRS313
PKW1023		
PKW1024		pKW786 (pRS404)
PKW1025		
PKW1026		pKW345
PKW1027		pKW345
PKW1028		
PKW1029		
PKW103		pJG4-5
PKW1030		
PKW1031		
PKW1032		pKW345
PKW1033		pKW708 - pRS404
PKW1034		
PKW1035		
PKW1036		
PKW1037		
PKW1038		
PKW1039		
PKW104		pJG4-5
PKW1040		
PKW1041		
PKW1042		
PKW1043		
PKW1044		
PKW1045		
PKW1046		pKW343
PKW1047		pKW344
PKW1048		pKW1046
PKW1049		pKW1047
PKW105		pJG4-5
PKW1050		pKW1032
PKW1051		pRS305 (EBO 1107)
PKW1052		pKW625
PKW1053		pKW625
PKW1054		
PKW1055		
PKW1056		
PKW1057		
PKW1058		
PKW1059		
PKW106		pJG4-5
PKW1060		pKW1052
PKW1061		
PKW1062		
PKW1063		
PKW1064		pKW1048
PKW1065		pKW1049
PKW1066		pKW1050
PKW1067		pKW1048
PKW1068		pKW1049
PKW1069		pKW1050
PKW107		pJG4-5
PKW1070		
PKW1071		
PKW1072		
PKW1073		
PKW1074		
PKW1075		
PKW1076		
PKW1077		
PKW1078	/MATERIALS/US328 /MATERIALS/US704	pKW618
PKW1079		
PKW108		pJG4-5
PKW1080		
PKW1081		
PKW1082	/MATERIALS/US661 /MATERIALS/US662	pKW1081/DP3570
PKW1083	/MATERIALS/US648 /MATERIALS/US649	pKW1081?DP3570
PKW1084		pKW1085
PKW1085		
PKW1086		
PKW1087		
PKW1088		pRS313
PKW1089		pRS313
PKW109		pJG4-5
PKW1090		pRS313
PKW1091		pRS313
PKW1092		pRS313
PKW1093		pRS313
PKW1094		pRS313
PKW1095		pRS313
PKW1096		pRS313
PKW1097		pRS313
PKW1098		pRS313
PKW1099		pRS313
PKW11		pGEM7
PKW110		pJG4-5
PKW1100		pRS313
PKW1101		pRS313
PKW1102		pKW1064
PKW1103		pKW1065
PKW1104		pKW1066
PKW1105		pKW1067
PKW1106		pKW1068
PKW1107		pKW1069
PKW1108		pKW788 (pRS406)
PKW1109	/MATERIALS/US761 /MATERIALS/US762	pKW 966
PKW111		pJG4-5
PKW1110	/MATERIALS/US755 /MATERIALS/US756	pKW 966
PKW1111	/MATERIALS/US755 /MATERIALS/US756	pKW 966
PKW1112		pKW 970
PKW1113		pKW 970
PKW1114		pKW617
PKW1115		pKW346
PKW1116		pKW617
PKW1117	/MATERIALS/US786 /MATERIALS/US787	pKW 966
PKW1118	/MATERIALS/US786 /MATERIALS/US787	pKW 966
PKW1119	/MATERIALS/US1002 /MATERIALS/US776	pKW 1270
PKW112		pJG4-5
PKW1120		pKW 1112
PKW1121		pKW 1120
PKW1122		pKW 1120
PKW1123		pKW 617
PKW1124		pKW 621
PKW1125		pKW 980
PKW1126		pKW 617
PKW1127		
PKW1128		pCMV4-3HA
PKW1129		
PKW113		pJG4-5
PKW1130		
PKW1131		
PKW1132		
PKW1133		
PKW1134		pKW 1131
PKW1135		pKW 1131
PKW1136		pKW 1131
PKW1137		pKW 1131
PKW1138		pKW 1131
PKW1139		pEGFP-C1
PKW114		pJG4-5
PKW1140		pAS147
PKW1141	/MATERIALS/US607 /MATERIALS/US777	pKW350
PKW1142	/MATERIALS/US789 /MATERIALS/US790	pKW1125
PKW1143		pKW1125
PKW1144		pKW346
PKW1145		
PKW1146		
PKW1147		
PKW1148		
PKW1149		pKW1142
PKW115		pJG4-5
PKW1150		pKW617
PKW1151		pKW 621
PKW1152		
PKW1153		pKW1152
PKW1154		pKW1113
PKW1155		pKW 1059 (pPD49.78)
PKW1156	/MATERIALS/US800 /MATERIALS/US801	pKW 966
PKW1157		pKW 1153
PKW1158		pKW 1153
PKW1159		
PKW116		pJG4-5
PKW1160	/MATERIALS/US814 /MATERIALS/US815	pKW 966
PKW1161		
PKW1162	/MATERIALS/US803 /MATERIALS/US804	pKW409
PKW1163	/MATERIALS/US803 /MATERIALS/US804	pKW409
PKW1164		pKW1163
PKW1165	/MATERIALS/US817 /MATERIALS/US818	pKW999
PKW1166		pKW983
PKW1167		pKW983
PKW1168		pKW415 (pRS416-PGAL)
PKW1169		pKW415 (pRS416-PGAL)
PKW117		pJG4-5
PKW1170		
PKW1171		
PKW1172		
PKW1173		
PKW1174		pCDNA3
PKW1175		pKW347
PKW1176		pKW348
PKW1177		pKW349
PKW1178		pKW1052
PKW1179	/MATERIALS/US856 /MATERIALS/US857	pKW1168
PKW118		pJG4-5
PKW1180	/MATERIALS/US856 /MATERIALS/US857	pKW1169
PKW1181		
PKW1182		
PKW1183		
PKW1184	/MATERIALS/US856 /MATERIALS/US898	pKW1168
PKW1185	/MATERIALS/US856 /MATERIALS/US898	pKW1169
PKW1186	/MATERIALS/US856 /MATERIALS/US898	pKW673
PKW1187	/MATERIALS/US856 /MATERIALS/US898	pKW674
PKW1188		pKW832
PKW1189	/MATERIALS/US919 /MATERIALS/US920	pKW786
PKW119		pJG4-5
PKW1190	/MATERIALS/US919 /MATERIALS/US920	pKW788
PKW1191		pKW786
PKW1192	/MATERIALS/US851 /MATERIALS/US923	pKW788
PKW1193		pKW351
PKW1194		pKW352
PKW1195		pKW353
PKW1196		pKW351
PKW1197		pKW352
PKW1198		pKW353
PKW1199		pKW351
PKW12		
PKW120		pJG4-5
PKW1200		pKW352
PKW1201		pKW353
PKW1202		pKW351
PKW1203		pKW352
PKW1204		pKW353
PKW1205		pKW351
PKW1206		pKW352
PKW1207		pKW353
PKW1208		pKW351
PKW1209		pKW352
PKW121		pJG4-5
PKW1210		pKW353
PKW1211		pKW351
PKW1212		pKW352
PKW1213		pKW353
PKW1214		pKW351
PKW1215		pKW352
PKW1216		pKW353
PKW1217		pKW351
PKW1218		pKW352
PKW1219		pKW353
PKW122		pJG4-5
PKW1220		pKW347
PKW1221		pKW348
PKW1222		pKW966
PKW1223		pKW987
PKW1224		pKW966
PKW1225		
PKW1226		
PKW1227		
PKW1228		pKW1151
PKW1229	/MATERIALS/US946 /MATERIALS/US947	pKW970
PKW123		pJG4-5
PKW1230		pKW1224
PKW1231		pKW1151
PKW1232		pKW1151
PKW1233		pKW1229
PKW1234		pKW970
PKW1235		pKW1244
PKW1236		pKW1244
PKW1237		
PKW1238		
PKW1239		
PKW124		pJG4-5
PKW1240		
PKW1241		
PKW1242		
PKW1243		
PKW1244		
PKW1245		
PKW1246		
PKW1247		
PKW1248		pKW1229
PKW1249		pKW1233
PKW125		pJG4-5
PKW1250		
PKW1251	/MATERIALS/US530 /MATERIALS/US814	pKW1249
PKW1252	/MATERIALS/US529 /MATERIALS/US815	pKW 1249
PKW1253	/MATERIALS/US913 /MATERIALS/US914	pKW1249
PKW1254	/MATERIALS/US915 /MATERIALS/US916	pKW1249
PKW1255		pKW999
PKW1256		pKW999
PKW1257		pKW1152
PKW1258		
PKW1259		
PKW126		pJG4-5
PKW1260		
PKW1261		
PKW1262		
PKW1263		
PKW1264		
PKW1265	/MATERIALS/US998 /MATERIALS/US999	pKW966
PKW1266	/MATERIALS/US997 /MATERIALS/US998	pKW1229
PKW1267	/MATERIALS/US1000 /MATERIALS/US999	pKW1229
PKW1268	/MATERIALS/US1000 /MATERIALS/US1001	pKW1229
PKW1269	/MATERIALS/US998 /MATERIALS/US999	pKW1229
PKW127		pJG4-5
PKW1270		pKW970
PKW1271		
PKW1272		pKW1255
PKW1273		pKW1256
PKW1274		pKW1257
PKW1275		pKW1257
PKW1276		pKW1270
PKW1277	/MATERIALS/US1011	
PKW1278	/MATERIALS/US1012	
PKW1279		pKW1270
PKW128		pJG4-5
PKW1280		pKW1270
PKW1281		pKW1113
PKW1282		pKW1270
PKW1283		
PKW1284		
PKW1285		
PKW1286		
PKW1287		
PKW1288		
PKW1289		pKW1276
PKW129		pJG4-5
PKW1290		pKW 762
PKW1291		pKW903
PKW1292		
PKW1293		
PKW1294		
PKW1295		
PKW1296		1113
PKW1297		pKW1296
PKW1298		pKW13
PKW1299		pKW13
PKW13		pSG6
PKW130		pJG4-5
PKW1300		
PKW1301		pKW1296
PKW1302		pKW1297
PKW1303		pKW1297
PKW1304		pKW1300
PKW1305		pKW1300
PKW1306		pKW1300
PKW1307		pKW1300
PKW1308		pKW1300
PKW1309		pKW1029 - YCpRPL25-Flag
PKW131		pJG4-5
PKW1310	/MATERIALS/US1057 /MATERIALS/US1058	pKW503 - pBluescript II KS
PKW1311		pRS315
PKW1312		
PKW1313	/MATERIALS/US1060 /MATERIALS/US1061	pKW1310 - pBS RRP6
PKW1314		pEG202
PKW1315		pEG202
PKW1316		pJG4-5
PKW1317		pJG4-5
PKW1318		pJG4-5
PKW1319		pJG4-5
PKW132		pJG4-5
PKW1320		pEG202
PKW1321		pSV271
PKW1322		pSV272
PKW1323		pSV271
PKW1324		pSV272
PKW1325		pSV271
PKW1326		pSV272
PKW1327		pKW1336
PKW1328		pKW1337
PKW1329		pSV271
PKW133		pJG4-5
PKW1330		pSV272
PKW1331		pSV271
PKW1332		pSV272
PKW1333		pKW657
PKW1334		pKW657
PKW1335		pKW657
PKW1336		pKW657
PKW1337		pKW657
PKW1338		pKW657
PKW1339		pKW657
PKW134		pJG4-5
PKW1340		pKW1557
PKW1341		
PKW1342		
PKW1343		
PKW1344		
PKW1345		pKW1272
PKW1346		pKW1272
PKW1347		pKW1329
PKW1348		pKW1330
PKW1349		pKW1331
PKW135		pJG4-5
PKW1350		pKW1332
PKW1351		pKW1336
PKW1352		pKW1337
PKW1353		pKW1341
PKW1354		pKW1319
PKW1355		pKW1249
PKW1356		pKW1249
PKW1357		YIplac211
PKW1358		YIplac204
PKW1359		pKW1220
PKW136		pJG4-5
PKW1360		pKW709
PKW1361	/MATERIALS/US1071 /MATERIALS/US803	pKW1162
PKW1362	/MATERIALS/US1072 /MATERIALS/US803	pKW1162
PKW1363	/MATERIALS/US1073 /MATERIALS/US803	pKW1162
PKW1364	/MATERIALS/US803 /MATERIALS/US804	pKW1162
PKW1365	/MATERIALS/US803 /MATERIALS/US804	pKW1162
PKW1366		pKW1220
PKW1367		pKW708 - pRS304
PKW1368		pKW1273
PKW1369		pKW1272
PKW137		pJG4-5
PKW1370		pKW1273
PKW1371		pKW1272
PKW1372		pKW1273
PKW1373		pKW 966
PKW1374	/MATERIALS/US1129 /MATERIALS/US1130	pET p97 (pKW485)
PKW1375	/MATERIALS/US1129 /MATERIALS/US1130	pET-p97[1-601] (pKW 747)
PKW1376		pKW1359
PKW1377		
PKW1378		
PKW1379		
PKW138		pJG4-5
PKW1380		pKW657 - pGEX 4T-1
PKW1381	/MATERIALS/US102 /MATERIALS/US1158	pKW1373
PKW1382	/MATERIALS/US102 /MATERIALS/US1159	pKW1373
PKW1383		pKW503
PKW1384		pKW503 - pBluescript II KS+
PKW1385	/MATERIALS/US1137 /MATERIALS/US1138	pKW354
PKW1386		
PKW1387		
PKW1388		
PKW1389		
PKW139		pJG4-5
PKW1390		
PKW1391		
PKW1392		
PKW1393		
PKW1394		
PKW1395		
PKW1396		
PKW1397		pKW868
PKW1398		
PKW1399		
PKW14		pSG8
PKW140		pJG4-5
PKW1400		
PKW1401		
PKW1402		
PKW1403		
PKW1404		
PKW1405		
PKW1406		
PKW1407		pKW926
PKW1408		pKW349
PKW1409		pKW928
PKW141		pJG4-5
PKW1410		pKW348
PKW1411	/MATERIALS/US1092 /MATERIALS/US1138	pKW345 - pRS315(G)
PKW1412	/MATERIALS/US1092 /MATERIALS/US1099	pKW345 - pRS315(G)
PKW1413	/MATERIALS/US1099 /MATERIALS/US1211	pKW345 - pRS315(G)
PKW1414	/MATERIALS/US1138 /MATERIALS/US1211	pKW345 - pRS315(G)
PKW1415		pKW1558
PKW1416		pKW1558
PKW1417		pKW961
PKW1418	/MATERIALS/US1214 /MATERIALS/US1215	pKW 970
PKW1419		pRS426 (pKW354)
PKW142		pJG4-5
PKW1420		pKW 1418
PKW1421	/MATERIALS/US1229 /MATERIALS/US1231	pKW1169
PKW1422	/MATERIALS/US1229 /MATERIALS/US1231	pKW1169
PKW1423		pKW1384
PKW1424	/MATERIALS/US1228 /MATERIALS/US1230	pKW1169
PKW1425	/MATERIALS/US1228 /MATERIALS/US1230	pKW1185
PKW1426	/MATERIALS/US1228 /MATERIALS/US1229	pKW1424
PKW1427	/MATERIALS/US1228 /MATERIALS/US1229	pKW1425
PKW1428		pKW927
PKW1429	/MATERIALS/US1252 /MATERIALS/US1253	pKW348
PKW143		pJG4-5
PKW1430		pKW1557
PKW1431		pKW349
PKW1432	/MATERIALS/US1070 /MATERIALS/US803	pkw1361
PKW1433	/MATERIALS/US1135 /MATERIALS/US803	pkw1361
PKW1434	/MATERIALS/US1136 /MATERIALS/US803	pKW1361
PKW1435	/MATERIALS/US1134 /MATERIALS/US803	pKW1361
PKW1436		
PKW1437		
PKW1438		pKW346
PKW1439		pKW1228
PKW144		pKW149 - pSGK-45
PKW1440		pKW1228
PKW1441		pKW349
PKW1442		pKW931
PKW1443		pKW1430
PKW1444		pKW1443
PKW1445		pKW1443
PKW1446		
PKW1447		pKW409-pGFPS65T-NES
PKW1448		pKW927
PKW1449		pKW 486
PKW145		pSGK1
PKW1450		pET 30a
PKW1451	/MATERIALS/US1256 /MATERIALS/US1258	pET 30a
PKW1452	/MATERIALS/US1146 /MATERIALS/US1257	pET 30a
PKW1453	/MATERIALS/US1257 /MATERIALS/US1258	pET 30a
PKW1454	/MATERIALS/US190 /MATERIALS/US803	pKW349 - pRS315
PKW1455		
PKW1456		
PKW1457		pKW931
PKW1458		pKW1407
PKW1459		pKW1611 - pSV271
PKW146		pKW149 - pSGK-45
PKW1460		pKW349
PKW1461		pKW933
PKW1462	/MATERIALS/US1280 /MATERIALS/US1281	pKW 1113
PKW1463	/MATERIALS/US1236 /MATERIALS/US1237	pKW 987
PKW1464		
PKW1465		
PKW1466		
PKW1467		
PKW1468		
PKW1469		
PKW147		pKW149 - pSGK-45
PKW1470		pKW1331
PKW1471		pKW1332
PKW1472		pKW1346
PKW1473		pKW1346
PKW1474		pKW1443
PKW1475		pKW970
PKW1476		pKW987
PKW1477		pKW349
PKW1478		pKW1443
PKW1479		pKW1477
PKW148		pKW149 - pSGK-45
PKW1480		pKW1477
PKW1481		pKW1477
PKW1482		pKW1477
PKW1483		pKW1477
PKW1484		pKW1477
PKW1485		pKW1477
PKW1486		pKW1477
PKW1487		pKW1477
PKW1488		pKW1477
PKW1489		pKW1558
PKW149		pSGK1
PKW1490		pKW1558
PKW1491		pKW975
PKW1492	/MATERIALS/US1146 /MATERIALS/US1317	pKW 1467
PKW1493	/MATERIALS/US1146 /MATERIALS/US1257	pKW 1467
PKW1494		pKW1484
PKW1495		pKW1485
PKW1496		pKW1486
PKW1497		pKW1484
PKW1498		pKW1485
PKW1499		pKW1486
PKW15		
PKW150		pSGK1
PKW1500		pKW1484
PKW1501		pKW1485
PKW1502		pKW1486
PKW1503		
PKW1504		pKW1221
PKW1505		pKW1504
PKW1506		YCPlac33
PKW1507		
PKW1508		pKW431
PKW1509		
PKW151		pKW149 - pSGK-45
PKW1510		
PKW1511		
PKW1512		
PKW1513		
PKW1514		
PKW1515		
PKW1516		
PKW1517		
PKW1518		
PKW1519		
PKW152		pKW149 - pSGK-45
PKW1520		
PKW1521		
PKW1522		
PKW1523		
PKW1524		
PKW1525		
PKW1526		
PKW1527		pKW346
PKW1528		pKW346
PKW1529		pKW346
PKW153		pSGK1
PKW1530	/MATERIALS/US1291 /MATERIALS/US1292	pKW1346
PKW1531	/MATERIALS/US1379 /MATERIALS/US1380	pKW 966
PKW1532		
PKW1533		pALR10
PKW1534		
PKW1535		
PKW1536		pKW503
PKW1537		pKW970
PKW1538	/MATERIALS/US1361 /MATERIALS/US1362	pKW1473
PKW1539	/MATERIALS/US1361 /MATERIALS/US1362	pKW1473
PKW154		pSGK1
PKW1540	/MATERIALS/US1399 /MATERIALS/US789	pKW1473
PKW1541	/MATERIALS/US1399 /MATERIALS/US789	pKW1473
PKW1542		
PKW1543	/MATERIALS/US1313 /MATERIALS/US1365	pKW963
PKW1544		pECFP-C1
PKW1545		pKW966
PKW1546	/MATERIALS/US1257 /MATERIALS/US1400	pKW1532
PKW1547		pKW927
PKW1548		pKW503
PKW1549		pKW1536
PKW155		pKW149 - pSGK-45
PKW1550		pKW1472
PKW1551		pKW1472
PKW1552		pKW1430
PKW1553		pKW1444
PKW1554		pKW1445
PKW1555		pKW1478
PKW1556		pKW1505
PKW1557		pKW1558
PKW1558		pKW349
PKW1559		pKW1505
PKW156		pKW146 - pSGK-21
PKW1560		pKW1505
PKW1561		pKW1505
PKW1562		
PKW1563		
PKW1564		
PKW1565		pKW1341
PKW1566		pKW503
PKW1567		pKW503
PKW1568		pKW503
PKW1569		pKW503
PKW157		pUEXI
PKW1570		pKW503
PKW1571		pKW503
PKW1572		pKW708
PKW1573		pKW708
PKW1574		
PKW1575	/MATERIALS/US1361 /MATERIALS/US1398	pKw1530
PKW1576		pKW1443
PKW1577		pKW1474
PKW1578	/MATERIALS/US492 /MATERIALS/US493	pKW 312
PKW1579		pKW1548
PKW158		pEG202
PKW1580		pKW784
PKW1581		pKW784
PKW1582		pKW927
PKW1583		pKW503
PKW1584		pKW1476
PKW1585		pKW970
PKW1586		pKW1578
PKW1587		pKW1585
PKW1588	/MATERIALS/US1388 /MATERIALS/US1389	pKW 975
PKW1589		pBlueScript
PKW159		pSH17-4
PKW1590		pBlueScript
PKW1591		
PKW1592		pKW 1475
PKW1593		
PKW1594		
PKW1595		
PKW1596		pKW503
PKW1597		
PKW1598		
PKW1599		
PKW16		pGEM-5Zf
PKW160		pKW158 - pEG202
PKW1600		pKW970
PKW1601		pKW1592
PKW1602		
PKW1603		
PKW1604		
PKW1605		pKW1008
PKW1606		pKW1605
PKW1607		
PKW1608		pKW1592
PKW1609		pGEX-2TK
PKW161		pJK101
PKW1610		
PKW1611		
PKW1612		pKW968
PKW1613		pKW 969
PKW1614		pKW 972
PKW1615		pKW 973
PKW1616		pKW 1592
PKW1617		pKW344
PKW1618		
PKW1619		pKW1618
PKW162		LR1Del1
PKW1620	/MATERIALS/US1486 /MATERIALS/US1487	pKW 1257
PKW1621	/MATERIALS/US1378 /MATERIALS/US1381	pKW810
PKW1622		pKW1621
PKW1623		pKW1621
PKW1624		pKW1621
PKW1625		pKW1006
PKW1626	/MATERIALS/US1446 /MATERIALS/US1461	pKW 1622
PKW1627	/MATERIALS/US1446 /MATERIALS/US1461	pKW 1622
PKW1628		pKW230
PKW1629	/MATERIALS/US1448 /MATERIALS/US1449	pKW 1467
PKW163		pKW158 - pEG202
PKW1630		pKW1257
PKW1631		pKW1630
PKW1632		pKW349
PKW1633		pKW349
PKW1634		pKW 1629
PKW1635		pKW1628
PKW1636	/MATERIALS/US102 /MATERIALS/US1466	pKW 1587
PKW1637	/MATERIALS/US102 /MATERIALS/US539	pKW 966
PKW1638	/MATERIALS/US102 /MATERIALS/US538	pKW 966
PKW1639	/MATERIALS/US102 /MATERIALS/US539	pKW 1592
PKW164		pJG4-5
PKW1640		pKW1254
PKW1641		pKW 1600
PKW1642		pKW348
PKW1643		pkw983
PKW1644		pkw983
PKW1645		
PKW1646		
PKW1647		
PKW1648		pKW 1585
PKW1649		pKW1642
PKW165		pKW163 - pEG202+4
PKW1650		pKW1642
PKW1651		pKW1642
PKW1652		pKW1642
PKW1653		pKW1642
PKW1654		pKW1642
PKW1655		pKW1642
PKW1656		pKW1642
PKW1657		pKW1642
PKW1658	/MATERIALS/US1496 /MATERIALS/US1497	pKW503 - pBluescript II KS+
PKW1659		pKW 1585
PKW166		pKW165 - pEG80
PKW1660	/MATERIALS/US102 /MATERIALS/US1466	pKW 1592
PKW1661	/MATERIALS/US102 /MATERIALS/US1528	pKW 966
PKW1662	/MATERIALS/US1517 /MATERIALS/US1518	pKW1620
PKW1663		
PKW1664		
PKW1665		
PKW1666		
PKW1667		
PKW1668		
PKW1669		pKW348
PKW167		pJG4-5
PKW1670		pKW1669
PKW1671		pKW1669
PKW1672		pKW1669
PKW1673	/MATERIALS/US1557 /MATERIALS/US1558	pKW503 - pBluescript II KS+
PKW1674		pKW758 - pAFS52 lac operator
PKW1675		
PKW1676		pSV271
PKW1677		pSV272
PKW1678		
PKW1679		pKW 1585
PKW168		pJG4-5
PKW1680		pKW 1585
PKW1681		pKW 1585
PKW1682		
PKW1683		
PKW1684		pKW 1587
PKW1685		pKW960
PKW1686		pKW1685
PKW1687		pKW 1685
PKW1688		pKW658 - pGEX-4T-2
PKW1689		pKW1674 - pAFS52-lacOp-YBR022W
PKW169		pJG4-5
PKW1690	/MATERIALS/US1592 /MATERIALS/US1594	pKW353
PKW1691		
PKW1692	/MATERIALS/US1599 /MATERIALS/US1600	pKW 1274
PKW1693	/MATERIALS/US1593 /MATERIALS/US1594	pKW353
PKW1694		pKW1224
PKW1695		pCDNA6.2/V5/GW/D-TOPO (Invitrogen)
PKW1696		pCDNA6.2/V5/GW/D-TOPO (Invitrogen)
PKW1697	/MATERIALS/US1617 /MATERIALS/US1618	pKW1690
PKW1698		pRS306 INO1
PKW1699		p6INO1lac128
PKW17		
PKW170		pJG4-5
PKW1700		
PKW1701		pKW1697
PKW1702		pKW1697
PKW1703		pKW1697
PKW1704		pKW1697
PKW1705		pKW1601
PKW1706	/MATERIALS/US1617 /MATERIALS/US1618	pKW1693
PKW1707		pKW 1462
PKW1708		pKW1467
PKW1709		pKW1467
PKW171		pJG4-5
PKW1710		pKW1467
PKW1711		pKW 1601
PKW1712	/MATERIALS/US1599 /MATERIALS/US1600	pKW1528
PKW1713		pKW348
PKW1714		pKW348
PKW1715		pKW348
PKW1716		pSV272
PKW1717		pSV212
PKW1718		pKW350
PKW1719		pKW1611
PKW172		pKW163 - pEG202+4
PKW1720		pSV272
PKW1721		pKW708
PKW1722		
PKW1723		
PKW1724		
PKW1725		pKW230
PKW1726	/MATERIALS/US1619 /MATERIALS/US1620	PKW1258
PKW1727		pKW350
PKW1728		pKW350
PKW1729		pKW350
PKW173		pKW158 - pEG202
PKW1730		
PKW1731		pKW 1707
PKW1732		pKW1725
PKW1733	/MATERIALS/US1599 /MATERIALS/US1600	pKW1258
PKW1734	/MATERIALS/US1599 /MATERIALS/US1600	pKW1258
PKW1735	/MATERIALS/US1623 /MATERIALS/US1624	pKW1258
PKW1736		pKW1156
PKW1737		pKW708
PKW1738		
PKW1739		pKW348
PKW174		pKW158 - pEG202
PKW1740		pKW348
PKW1741		pKW348
PKW1742		pKW1358
PKW1743		pKW347
PKW1744		pKW349
PKW1745		pKW 1601
PKW1746		pKW 1601
PKW1747		pKW1601
PKW1748		pKW 1601
PKW1749		pKW1601
PKW175		pKW158 - pEG202
PKW1750		pKW1601
PKW1751	/MATERIALS/US1687 /MATERIALS/US1688	pKW1291
PKW1752		pKW1706 (NUP59-CFP)
PKW1753		pSV272
PKW1754		pKW348
PKW1755		pKW348
PKW1756		pKW348
PKW1757		pKW347
PKW1758		pKW348
PKW1759		pKW349
PKW176		pKW158 - pEG202
PKW1760		pKW343
PKW1761		pKW344
PKW1762		pKW345
PKW1763		pKW346
PKW1764		pKW347
PKW1765		pKW347
PKW1766		pKW348
PKW1767		pKW348
PKW1768		pKW349
PKW1769		pKW349
PKW177		pKW158 - pEG202
PKW1770		pKW350
PKW1771		pKW350
PKW1772		pKW350
PKW1773		
PKW1774		
PKW1775		
PKW1776		pKW348
PKW1777	/MATERIALS/US1600 /MATERIALS/US1696	pKW 1258
PKW1778	/MATERIALS/US1600 /MATERIALS/US1697	pKW1258
PKW1779	/MATERIALS/US1600 /MATERIALS/US1698	pKW1258
PKW178		pKW172 - pEG-XCons
PKW1780		pKW349
PKW1781		pKW1258
PKW1782		pKW1301
PKW1783		pKW1216 (NLS-RFP)
PKW1784		
PKW1785		
PKW1786		
PKW1787		pKW708
PKW1788		pRS314
PKW1789		pKW1788
PKW179		pKW178 - pEG-XCons-941/942
PKW1790		pKW1788
PKW1791		
PKW1792		
PKW1793	/MATERIALS/US1766 /MATERIALS/US1767	pKW1544
PKW1794	/MATERIALS/US1759 /MATERIALS/US1760	pCW405
PKW1795		pKW1793
PKW1796		pKW589
PKW1797		pKW589
PKW1798		pKW589
PKW1799		pKW589
PKW18		
PKW180		pKW178 - pEG-XCons-941/942
PKW1800		pKW589
PKW1801		pKW589
PKW1802		pKW589
PKW1803		pKW1742
PKW1804	/MATERIALS/US1795 /MATERIALS/US1796	pKW970
PKW1805		pKW1743
PKW1806		pKW1472
PKW1807		pKW1472
PKW1808		pKW1745
PKW1809		pKT127
PKW181		pKW178 - pEG-XCons-941/942
PKW1810		pKT128
PKW1811		pKT209
PKW1812		pKT127
PKW1813		pKT128
PKW1814		pKW710
PKW1815		pKW708
PKW1816		pKW1721
PKW1817		
PKW1818		pKW349
PKW1819		
PKW182		pKW178 - pEG-XCons-941/942
PKW1820		pKW1818
PKW1821		
PKW1822		
PKW1823		
PKW1824		
PKW1825		
PKW1826		
PKW1827		
PKW1828		
PKW1829		pKW1472
PKW183		pKW178 - pEG-XCons-941/942
PKW1830	/MATERIALS/US1790 /MATERIALS/US1791	pKW1276
PKW1831		
PKW1832		
PKW1833		pKW708
PKW1834		pKW1833
PKW1835		pKW1768
PKW1836		pKW1768
PKW1837		pKW1769
PKW1838	/MATERIALS/US1842 /MATERIALS/US1843	pKW988- Pho4-GFP3
PKW1839		pKW1769
PKW184		pKW178 - pEG-XCons-941/942
PKW1840		pKW349
PKW1841		pKW1081
PKW1842		
PKW1843		
PKW1844		pKW1608
PKW1845		pKW1841
PKW1846		pFBHTC
PKW1847	/MATERIALS/US1779 /MATERIALS/US1780	pKW503
PKW1848	/MATERIALS/US1779 /MATERIALS/US1780	pKW503
PKW1849		pKW1472
PKW185		pKW178 - pEG-XCons-941/942
PKW1850		pKW1472
PKW1851	/MATERIALS/US1737 /MATERIALS/US1738	pKW1642
PKW1852	/MATERIALS/US1737 /MATERIALS/US1738	pKW1642
PKW1853		pBACe3.6
PKW1854		pBACe3.6
PKW1855		
PKW1856		
PKW1857		
PKW1858		
PKW1859		pKW1648
PKW186		pKW178 - pEG-XCons-941/942
PKW1860	/MATERIALS/US1895 /MATERIALS/US1896	pKW1608
PKW1861		pEGFP-C1
PKW1862		pKW1648
PKW1863		pKW1721
PKW1864		pKW1815
PKW1865		pKW1844
PKW1866		
PKW1867		pKW710
PKW1868	/MATERIALS/US578 /MATERIALS/US582	pKW709
PKW1869		
PKW187		pKW178 - pEG-XCons-941/942
PKW1870		pkw1348
PKW1871		pKW1864
PKW1872		
PKW1873		pKW657
PKW1874		pKW657
PKW1875		
PKW1876		
PKW1877		
PKW1878		
PKW1879		
PKW188		pKW178 - pEG-XCons-941/942
PKW1880		pET101DTOPO
PKW1881		pKW1880
PKW1882	/MATERIALS/US2000 /MATERIALS/US2001	pKW1467
PKW1883		
PKW1884		pKW1818
PKW1885		pKW1820
PKW1886		pKW1834
PKW1887		maybe EBO347 (pKW845)
PKW1888		
PKW1889		
PKW189		pKW178 - pEG-XCons-941/942
PKW1890		
PKW1891	/MATERIALS/US2025 /MATERIALS/US2026	pKW195
PKW1892		"pGFP-Cb (Shulga,Goldfarb 1999)"
PKW1893		"pGFP-Cb (Shulga,Goldfarb 1999)"
PKW1894		"pGFP-Cb (Shulga,Goldfarb 1999)"
PKW1895		"pGFP-Cb (Shulga,Goldfarb 1999)"
PKW1896		"pGFP-Cb (Shulga,Goldfarb 1999)"
PKW1897		"pGFP-Cb (Shulga,Goldfarb 1999)"
PKW1898		pKW349
PKW1899	/MATERIALS/US1879 /MATERIALS/US1880	pKW631
PKW19		pUEXI
PKW190		pUEXI
PKW1900	/MATERIALS/US2027 /MATERIALS/US2028	pKW 1891
PKW1901		pKW1348
PKW1902	/MATERIALS/US2026 /MATERIALS/US2076	pKW195
PKW1903		pKW1902
PKW1904		
PKW1905		
PKW1906		pKW961
PKW1907	/MATERIALS/US2027 /MATERIALS/US2028	pKW1902
PKW1908	/MATERIALS/US2027 /MATERIALS/US2028	pKW1902
PKW1909		pKW1901
PKW191		
PKW1910		pKW657
PKW1911		pKW657
PKW1912		pKW657
PKW1913		pKW657
PKW1914		pKW1314
PKW1915		
PKW1916		pKW1329
PKW1917		pKW1329
PKW1918		pKW1329
PKW1919		pKW1329
PKW192		pKW350 - pRS316
PKW1920		pKW1329
PKW1921		
PKW1922		
PKW1923		pSV272
PKW1924		
PKW1925	/MATERIALS/US2103 /MATERIALS/US2104	pKW1924
PKW1926	/MATERIALS/US2103 /MATERIALS/US2104	pKW1924
PKW1927		pKW1924
PKW1928		
PKW1929		
PKW193		pKW15 - pVT102-U
PKW1930		
PKW1931		
PKW1932		
PKW1933		
PKW1934		
PKW1935		
PKW1936		
PKW1937		pKW1472
PKW1938		pKW1833
PKW1939		pKW1050
PKW194		pSG5
PKW1940		
PKW1941		
PKW1942		
PKW1943		pALR10
PKW1944		
PKW1945		
PKW1946		
PKW1947		
PKW1948		
PKW1949		
PKW195		pRSET A
PKW1950	/MATERIALS/US2143 /MATERIALS/US2144	pKW656
PKW1951	/MATERIALS/US2143 /MATERIALS/US2144	pKW710
PKW1952		pKW589
PKW1953		
PKW1954		pAC-6
PKW1955		
PKW1956		
PKW1957		
PKW1958		
PKW1959		
PKW196		pRSET B
PKW1960		
PKW1961		
PKW1962		pDH5
PKW1963		
PKW1964		
PKW1965		
PKW1966		
PKW1967		
PKW1968	/MATERIALS/US2396 /MATERIALS/US2397	pKW1648
PKW1969		pKW1833
PKW197		pRSET C
PKW1970		pKW657
PKW1971		pKW657
PKW1972		pKW1969
PKW1973		
PKW1974	/MATERIALS/US2172 /MATERIALS/US2173	pKW656
PKW1975	/MATERIALS/US2172 /MATERIALS/US2173	pKW710
PKW1976	/MATERIALS/US2188 /MATERIALS/US2189	pKW656
PKW1977	/MATERIALS/US2188 /MATERIALS/US2189	pKW710
PKW1978		
PKW1979		
PKW198		pSG5
PKW1980		
PKW1981	/MATERIALS/US2166 /MATERIALS/US2167	pKW348
PKW1982		pKW1954
PKW1983		pKW345
PKW1984		pKW1901
PKW1985		
PKW1986		
PKW1987		
PKW1988		
PKW1989		
PKW199		pRC/CMV
PKW1990		
PKW1991		pKW1966
PKW1992	/MATERIALS/US2225 /MATERIALS/US2226	pKW656
PKW1993	/MATERIALS/US2225 /MATERIALS/US2226	pKW710
PKW1994	/MATERIALS/US2225 /MATERIALS/US2226	pKW1965
PKW1995		
PKW1996		pKW350
PKW1997	/MATERIALS/US2225 /MATERIALS/US2226	pKW1966
PKW1998	/MATERIALS/US2271 /MATERIALS/US2272	pGEX4T-1
PKW1999		
PKW2		
PKW20		pUEXI
PKW200		pRC/CMV
PKW2000		pKW708
PKW2001		pKW1606
PKW2002	/MATERIALS/US2205 /MATERIALS/US2206	pKW1981
PKW2003	/MATERIALS/US2008 /MATERIALS/US2009	pKW1981
PKW2004		pKW657
PKW2005		pKW1455
PKW2006		pKW1833
PKW2007		pKW1833
PKW2008		pKW1833
PKW2009		pKW1833
PKW201		pBluescript SK-
PKW2010		pKW1833
PKW2011		pKW1988
PKW2012		pKW2006
PKW2013		pKW2007
PKW2014		pKW2008
PKW2015		pKW2009
PKW2016		pKW2010
PKW2017		pRS305
PKW2018	/MATERIALS/US2271 /MATERIALS/US2272	pKW1954
PKW2019	/MATERIALS/US2285 /MATERIALS/US2286	pKW2000
PKW202		pBluescript SK-
PKW2020		pKW1809
PKW2021		pKW1810
PKW2022		pKW2001
PKW2023	/MATERIALS/US2287 /MATERIALS/US2288	pKW2019
PKW2024		
PKW2025		pKW2011
PKW2026		pKW1987
PKW2027		pKW1989
PKW2028		
PKW2029		
PKW203		lafmid BA
PKW2030		
PKW2031		pKW1788
PKW2032		
PKW2033		pKW2024
PKW2034		pET3a
PKW2035		pET3a
PKW2036	/MATERIALS/US2287 /MATERIALS/US2288	pKW2023
PKW2037		pKW2023
PKW2038		pKW2023
PKW2039		pKW2023
PKW204		pBluescript KS+
PKW2040		pKW2023
PKW2041		pKW2024
PKW2042		pkw1611
PKW2043		
PKW2044		pKW1833
PKW2045		pKW657
PKW2046		
PKW2047		pKW2044
PKW2048		pKW2044
PKW2049		pKW708
PKW205		pET3a
PKW2050		pKW1954
PKW2051		pKW1954
PKW2052	/MATERIALS/US2244 /MATERIALS/US2445	pKW1999
PKW2053		pKW1999
PKW2054		pKW1999
PKW2055		pKW1968
PKW2056	/MATERIALS/US2349 /MATERIALS/US2359	pRS313(pKW347)
PKW2057		
PKW2058		
PKW2059		pKW1833
PKW206		pBSII-KS+
PKW2060		pKW657
PKW2061	/MATERIALS/US2396 /MATERIALS/US2397	pKW1648
PKW2062		pKW2054
PKW2063		pKW2054
PKW2064		
PKW2065		pKW2059
PKW2066		pKW2059
PKW2067		pKW1901
PKW2068		
PKW2069		
PKW207		pBluescript SK-
PKW2070		
PKW2071		pKW 2064
PKW2072		pKW2064
PKW2073		pKW353
PKW2074		pKW353
PKW2075		pKW353
PKW2076		pKW2074
PKW2077		
PKW2078		
PKW2079		
PKW208		pDS-56H
PKW2080		
PKW2081		
PKW2082		
PKW2083		
PKW2084		
PKW2085		
PKW2086		
PKW2087		
PKW2088		
PKW2089		
PKW209		pUEXI
PKW2090		
PKW2091		
PKW2092		
PKW2093		
PKW2094		
PKW2095		
PKW2096		
PKW2097		
PKW2098		
PKW2099		
PKW21		pUEXI
PKW210		pUEXI
PKW2100		
PKW2101		
PKW2102		
PKW2103		
PKW2104		
PKW2105		
PKW2106		
PKW2107		
PKW2108		
PKW2109		
PKW211		pUEXI
PKW2110		
PKW2111		
PKW2112	/MATERIALS/US2515 /MATERIALS/US2516	pKW503
PKW2113		pKW710
PKW2114		pKW2049
PKW2115		pKW2049
PKW2116		pKW2049
PKW2117		
PKW2118		
PKW2119		
PKW212		pUEXI
PKW2120		
PKW2121		pKW2022
PKW2122		pKW2121
PKW2123		pKW2122
PKW2124		pKW656
PKW2125	/MATERIALS/US2450 /MATERIALS/US2513	pKW2034
PKW2126	/MATERIALS/US2450 /MATERIALS/US2513	pKW2035
PKW2127		pKW1253
PKW2128		
PKW2129		
PKW213		pUEXI
PKW2130		
PKW2131		
PKW2132		pkw503
PKW2133		pKW2049
PKW2134		
PKW2135		
PKW2136		
PKW2137		pKW606
PKW2138		pKW606
PKW2139		pKW710
PKW214		pUEXI
PKW2140		pKW656
PKW2141	/MATERIALS/US2556 /MATERIALS/US2557	pKW1615
PKW2142	/MATERIALS/US2556 /MATERIALS/US2557	pKW1915
PKW2143	/MATERIALS/US2556 /MATERIALS/US2557	pKW1915
PKW2144	/MATERIALS/US2556 /MATERIALS/US2557	pKW1915
PKW2145		pKW2074
PKW2146		pKW2074
PKW2147		pKW2073
PKW2148		pKW2073
PKW2149		pKW1833
PKW215		pUEXI
PKW2150		pKW1906
PKW2151		pKW1916
PKW2152		pKW1916
PKW2153	/MATERIALS/US2596 /MATERIALS/US2597	pKW1915
PKW2154		pKW2056
PKW2155		
PKW2156		
PKW2157		
PKW2158		pKW2149
PKW2159		pKW1608
PKW216		pUEXI
PKW2160		pRS304
PKW2161		
PKW2162	/MATERIALS/US2559 /MATERIALS/US2560	pKW2061
PKW2163		pKW349
PKW2164		pKW1608
PKW2165		pKW1683
PKW2166		pKW1273
PKW2167		pKW656
PKW2168		pKW1683
PKW2169		pKW2073
PKW217		pUEXI
PKW2170		pKW2073
PKW2171		pKW2073
PKW2172		pKW2073
PKW2173		pKW1368
PKW2174		pKW589
PKW2175		pKW788
PKW2176	/MATERIALS/US2446 /MATERIALS/US2447	pKW2051
PKW2177	/MATERIALS/US2448 /MATERIALS/US2449	pKW2054
PKW2178		pKW1618
PKW2179		pKW1618
PKW218		pUEXI
PKW2180		pKW1618
PKW2181		pKW788
PKW2182		
PKW2183		pKW503
PKW2184		pKW1834
PKW2185		pKW503
PKW2186		pKW1834
PKW2187		pKW503
PKW2188		pKW2173
PKW2189		PKW656
PKW219		pUEXI
PKW2190		pKW656
PKW2191		pKW1834
PKW2192		pKW2163
PKW2193		pKW2189
PKW2194		pKW2190
PKW2195		
PKW2196		
PKW2197		pKW2112 (1xDendra)
PKW2198		pKW2112 (1xDendra)
PKW2199		pKW2197 (2xDendra)
PKW22		pUEXI
PKW220		pUEXI
PKW2200	/MATERIALS/US2663 /MATERIALS/US2688	pKW1459 - pSV271-Nup159
PKW2201	/MATERIALS/US2663 /MATERIALS/US2689	pKW1459 - pSV271-NUP159NTD
PKW2202		pkw2132
PKW2203		
PKW2204	/MATERIALS/US2609 /MATERIALS/US2611	pkW2197
PKW2205		pKW2198
PKW2206		pKW2199
PKW2207		pKW656
PKW2208		pKW656
PKW2209		pKW1368
PKW221		pUEXI
PKW2210		pKW2192
PKW2211	/MATERIALS/US2748 /MATERIALS/US2770	pKW2190
PKW2212	/MATERIALS/US2748 /MATERIALS/US2770	pKW2193
PKW2213		
PKW2214		
PKW2215		
PKW2216		
PKW2217		
PKW2218		pKW1964
PKW2219		pDONR 221 P1-P5r
PKW222		pUEXI
PKW2220		pDONR 221 P5 - P4
PKW2221		pDONR 221 P4r - P3
PKW2222		pDONR 221 P3 - P2
PKW2223		pDEST17
PKW2224		
PKW2225		
PKW2226		
PKW2227		
PKW2228		
PKW2229		
PKW223		pUEXI
PKW2230		
PKW2231		
PKW2232		
PKW2233		
PKW2234		
PKW2235		
PKW2236		
PKW2237		
PKW2238		
PKW2239		pkw350
PKW224		pUEXI
PKW2240		P
PKW2241		P
PKW2242		P
PKW2243		pKW343
PKW2244		pkw2239
PKW2245		pkw2239
PKW2246		pkw2239
PKW2247		pkw2246
PKW2248		pkw2246
PKW2249		pKW606
PKW225		pUEXI
PKW2250		
PKW2251		
PKW2252		
PKW2253		
PKW2254		
PKW2255		
PKW2256		
PKW2257		
PKW2258		
PKW2259		
PKW226		pUEXI
PKW2260		
PKW2261		
PKW2262		
PKW2263		
PKW2264		
PKW2265		
PKW2266		
PKW2267		
PKW2268		
PKW2269		pKW2137
PKW227		pUEXI
PKW2270		pKW2225
PKW2271		pKW2228
PKW2272		pKW2230
PKW2273		pKW2230
PKW2274		
PKW2275		
PKW2276		pKW657
PKW2277		pKW657
PKW2278		pKW657
PKW2279		pKW657
PKW228		pBluescript KS+
PKW2280		
PKW2281		
PKW2282		
PKW2283		
PKW2284		pKW503
PKW2285		pKW2284
PKW2286		pKW2284
PKW2287		pKW2284
PKW2288		pKW348
PKW2289		pKW349
PKW229		pKW146 - pSGK-21
PKW2290		pKW2162
PKW2291	/MATERIALS/US2930 /MATERIALS/US2931	pKW2162
PKW2292	/MATERIALS/US1647 /MATERIALS/US2871	pKW1677
PKW2293		pKW2138
PKW2294		pKW629
PKW2295		pKW1833
PKW2296		pKW1833
PKW2297		pKW1833
PKW2298		pKW1938
PKW2299		pKW2295
PKW23		pUEXI
PKW230		pRSET B
PKW2300		pKW2296
PKW2301		pKW2297
PKW2302		pKW709
PKW2303		pKW1608
PKW2304		pkw2239
PKW2305		2132
PKW2306		pkw2239
PKW2307		
PKW2308		pkw2132
PKW2309		pkw2132
PKW231		pRSET B
PKW2310		pkw2132
PKW2311		pkw2132
PKW2312		2239
PKW2313		pkw2306
PKW2314		pkw2132
PKW2315		pkw2132
PKW2316		
PKW2317		2306
PKW2318		pkw2306
PKW2319		pkw2306
PKW232		pSG8M
PKW2320		pkw2306
PKW2321		pkw2304
PKW2322		pkw2304
PKW2323		pkw2304
PKW2324		pkw2304
PKW2325		pkw2304
PKW2326		PKW2173
PKW2327		PKW2207
PKW2328		PKW2208
PKW2329		PKW2327
PKW233		
PKW2330		PKW2328
PKW2331		PKW2327
PKW2332		PKW2328
PKW2333		PKW2327
PKW2334		
PKW2335		PKW2328
PKW2336		
PKW2337		
PKW2338		
PKW2339		pKW2218
PKW234		
PKW2340		pKW2218
PKW2341		
PKW2342		pKW980
PKW2343	/MATERIALS/US3066 /MATERIALS/US3068	pKW1954
PKW2344	/MATERIALS/US3066 /MATERIALS/US3067	pKW1954
PKW2345		pKW503
PKW2346		
PKW2347		
PKW2348		
PKW2349		pKW2131
PKW235		pBluescript
PKW2350	/MATERIALS/US3078 /MATERIALS/US3079	pKW2131
PKW2351	/MATERIALS/US3081 /MATERIALS/US3082	pKW2240
PKW2352	/MATERIALS/US3081 /MATERIALS/US3082	pKW2218
PKW2353		pKW1834 - pRS GFP-Nup1
PKW2354		pKW2353 - pRS304 Nup1 scr
PKW2355	/MATERIALS/US3109 /MATERIALS/US3110	pKW2131
PKW2356		pKW2306
PKW2357		pkw2306
PKW2358		pKW2304
PKW2359		pKW2304
PKW236		pBluescript
PKW2360		pKW2304
PKW2361		
PKW2362		
PKW2363		
PKW2364		
PKW2365		
PKW2366		
PKW2367		
PKW2368		pKW1316
PKW2369		pKW1316
PKW237		pBluescript
PKW2370		pKW1316
PKW2371		pKW1316
PKW2372		pKW1316
PKW2373		pKW1316
PKW2374		pKW1316
PKW2375		pKW1316
PKW2376	/MATERIALS/US3116 /MATERIALS/US3118	pKW1677 - pSV272 Gfd1
PKW2377	/MATERIALS/US3117 /MATERIALS/US3119	pKW1677 - pSV272 Gfd1
PKW2378	/MATERIALS/US3116 /MATERIALS/US3119	pKW1677
PKW2379	/MATERIALS/US3091 /MATERIALS/US3093	pKW2162
PKW238		pBluescript
PKW2380	/MATERIALS/US3092 /MATERIALS/US3093	pKW1648
PKW2381	/MATERIALS/US3092 /MATERIALS/US3094	pKW1648
PKW2382	/MATERIALS/US3125 /MATERIALS/US3126	pKW1629
PKW2383		
PKW2384		
PKW2385	/MATERIALS/US3143 /MATERIALS/US3144	pKW2328 - pFA6a-3xDendra-CaURA3
PKW2386	/MATERIALS/US3151 /MATERIALS/US3152	pKW2328 - pFA6a-3xDendra-CaURA3
PKW2387		pKW1585
PKW2388		pKW1587
PKW2389		pKW1659
PKW239		pBluescript
PKW2390		pKW2328
PKW2391	/MATERIALS/US3147 /MATERIALS/US3148	pKW2390
PKW2392	/MATERIALS/US3155 /MATERIALS/US3156	pKW2390
PKW2393		pKW1
PKW2394		
PKW2395		pMW172
PKW2396		pGEX-TEV
PKW2397		pkw657
PKW2398		pKW2326
PKW2399		pKW2209
PKW24		pUEXI
PKW240		pBluescript
PKW2400		pRS424
PKW2401	/MATERIALS/US3157 /MATERIALS/US3158	pKW2355
PKW2402		pKW710
PKW2403		pKW710
PKW2404		pKW953
PKW2405		pKW352
PKW2406		pKW352
PKW2407		pKW1809
PKW2408		pKW2407
PKW2409		pKW2407
PKW241		pBluescript
PKW2410	/MATERIALS/US3188 /MATERIALS/US3189	pKW656
PKW2411	/MATERIALS/US3188 /MATERIALS/US3189	pKW710
PKW2412		pKW2355
PKW2413		pKW1532 - pET YFP-Impb
PKW2414		
PKW2415		
PKW2416	/MATERIALS/US3194 /MATERIALS/US3195	pKW710
PKW2417	/MATERIALS/US3194 /MATERIALS/US3195	pKW656
PKW2418	/MATERIALS/US3194 /MATERIALS/US3195	pKW710
PKW2419	/MATERIALS/US3194 /MATERIALS/US3195	pKW656
PKW242		pBluescript
PKW2420		pKW2304
PKW2421		pkw2312
PKW2422		pkw2313
PKW2423		pKW1964
PKW2424		pKW1964
PKW2425		
PKW2426		
PKW2427		
PKW2428		
PKW2429	/MATERIALS/US3267 /MATERIALS/US3268	pKW622 - pCM189
PKW243		pBluescript
PKW2430	/MATERIALS/US3267 /MATERIALS/US3268	pKW622 - pCM189
PKW2431	/MATERIALS/US3267 /MATERIALS/US3268	pKW346 - pRS316-G
PKW2432		pKW346 - pRS316-G
PKW2433		pET3aTr
PKW2434		pET3aTr
PKW2435		pET3aTr
PKW2436		pET3aTr
PKW2437		pET3aTr
PKW2438		pST39
PKW2439		pKW2438
PKW244		pBluescript
PKW2440		pKW2439
PKW2441		pKW2440
PKW2442		pST39
PKW2443		pKW2442
PKW2444		pKW2443
PKW2445		pKW2444
PKW2446		pKW1329
PKW2447		pKW348
PKW2448		pKW1
PKW2449		pKW1
PKW245		pBluescript
PKW2450		pKW1
PKW2451		pKW1
PKW2452		pKW1
PKW2453		pKW1
PKW2454		pSV271
PKW2455		pSV271
PKW2456		pSV272
PKW2457		pKW2149
PKW2458		pKW2149
PKW2459		pKW1322
PKW246		pBluescript
PKW2460		pKW1322
PKW2461		pKW1322
PKW2462		pKW2149
PKW2463		pKW1446
PKW2464		pKW1446
PKW2465		pSV271
PKW2466		pSV271
PKW2467		pSV271
PKW2468		pSV271
PKW2469		
PKW247		pBluescript
PKW2470		pET30-a(+)
PKW2471		
PKW2472		pKW2463
PKW2473		pKW2463
PKW2474		pKW2464
PKW2475		pKW2464
PKW2476		pKW2131
PKW2477		pKW2131
PKW2478		pKW2131
PKW2479		pSV271
PKW248		pBluescript
PKW2480		pSV271
PKW2481		pSV271
PKW2482		pSV271
PKW2483		pSV271
PKW2484		pSV271
PKW2485		pSV271
PKW2486		pSV271
PKW2487		pKW2478
PKW2488		
PKW2489		
PKW249		pBluescript
PKW2490		
PKW2491		
PKW2492		
PKW2493		
PKW2494		pKW2355
PKW2495		pKW2355
PKW2496		
PKW2497	/MATERIALS/US3508 /MATERIALS/US3509	pKW2487
PKW2498		pSV271
PKW2499		pSV271
PKW25		pUEXI
PKW250		pBluescript
PKW2500		pSV271
PKW2501		pSV271
PKW2502		pKW2327
PKW2503		PKW2328
PKW2504		
PKW2505		pkw345
PKW2506		
PKW2507		
PKW2508		pKW2347
PKW2509		pKW2131
PKW251		pBluescript
PKW2510		pKW2131
PKW2511		
PKW2512		
PKW2513		
PKW2514		pKW2487
PKW2515		pKW2437
PKW2516		pKW794
PKW2517		pKW2515
PKW2518		pKW2337
PKW2519		pKW2495
PKW252		pBluescript
PKW2520		pKW2495
PKW2521		
PKW2522		
PKW2523		pKW1669
PKW2524		
PKW2525		pkw759
PKW2526		
PKW2527		
PKW2528		
PKW2529		
PKW253		pBluescript
PKW2530		
PKW2531		
PKW2532		
PKW2533		pKW 1809
PKW2534		pKW760
PKW2535		pKW2460
PKW2536		pKW2487
PKW2537		pKW2327
PKW2538	/MATERIALS/US3729 /MATERIALS/US3730	pKW785(pRS403)
PKW2539	/MATERIALS/US3725 /MATERIALS/US3726	pKW2538
PKW254		pBluescript
PKW2540		pKW1809
PKW2541		pRS403
PKW2542		PKW347
PKW2543		
PKW2544		
PKW2545		
PKW2546		
PKW2547		
PKW2548		pKW2327
PKW2549		pKW2487
PKW255		pBluescript
PKW2550		
PKW2551		
PKW2552		
PKW2553		
PKW2554		pSV271
PKW2555		pSV271
PKW2556		pKW348
PKW2557		pKW348
PKW2558		
PKW2559	/MATERIALS/US3518 /MATERIALS/US3785	pKW1322
PKW256		pBluescript
PKW2560	/MATERIALS/US3902 /MATERIALS/US3903	pKW760
PKW2561		pKW349
PKW2562		pSV271
PKW2563		pSV271
PKW2564		pSV271
PKW2565		pSV271
PKW2566		pSV271
PKW2567		pSV271
PKW2568		pSV271
PKW2569		pSV271
PKW257		pBluescript
PKW2570		pSV272
PKW2571		pKW1759
PKW2572		
PKW2573		
PKW2574		pKW786
PKW2575	/MATERIALS/US3927 /MATERIALS/US3928	pKW2574
PKW2576	/MATERIALS/US3925 /MATERIALS/US3926	pKW2574
PKW2577	/MATERIALS/US3484 /MATERIALS/US3485	pGEM-T
PKW2578		
PKW2579	/MATERIALS/US3943 /MATERIALS/US3944	pKW2574
PKW258		pBluescript
PKW2580	/MATERIALS/US3518 /MATERIALS/US3916	pKW1322
PKW2581		pKW2548
PKW2582		pKW2548
PKW2583		pKW1322
PKW2584		pKW1322
PKW2585		pKW1322
PKW2586		pKW1322
PKW2587		pKW350(pRS316)
PKW2588		pKW350
PKW2589	/MATERIALS/US22 /MATERIALS/US3481	pKW348 (pRS314)
PKW259		pBluescript
PKW2590	/MATERIALS/US22 /MATERIALS/US3481	pKW348 (pRS314)
PKW2591	/MATERIALS/US22 /MATERIALS/US3481	pKW350 (pRS316)
PKW2592	/MATERIALS/US22 /MATERIALS/US3481	pKW350 (pRS316)
PKW2593		pKW1322
PKW2594		pKW1322
PKW2595		pKW1322
PKW2596		pKW1322
PKW2597		pKW2407
PKW2598	/MATERIALS/US4004 /MATERIALS/US4005	pKW2382
PKW2599		pKW1668
PKW26		pBluescript
PKW260		pBluescript
PKW2600		pKW2496
PKW2601	/MATERIALS/US4040 /MATERIALS/US4041	pKW2579
PKW2602		pkw2579
PKW2603		
PKW2604		
PKW2605		from Glick lab
PKW2606		
PKW2607		
PKW2608		
PKW2609		
PKW261		pBluescript
PKW2610		
PKW2611		
PKW2612		
PKW2613		
PKW2614		pkw2624
PKW2615		pkw2611
PKW2616		
PKW2617		
PKW2618		
PKW2619		
PKW262		pKW259 - p-muscle51
PKW2620		
PKW2621		
PKW2622	/MATERIALS/US2518 /MATERIALS/US3916	pKW1322
PKW2623		pKW2572
PKW2624		pKW2579
PKW2625		
PKW2626		pKW788
PKW2627		pGem-T
PKW2628		pKW2583
PKW2629		pKW2583
PKW263		pKW260 - p-muscle62
PKW2630		pKW2583
PKW2631		pKW2412
PKW2632		
PKW2633		
PKW2634		
PKW2635		pKW1459
PKW2636		pKW1459
PKW2637		
PKW2638		pKW1669
PKW2639		
PKW264		pJN38
PKW2640		pKW1829
PKW2641		pKW1829
PKW2642		pKW2407
PKW2643		pKW2407
PKW2644	/MATERIALS/US4188 /MATERIALS/US4189	pKW2321
PKW2645	/MATERIALS/US4188 /MATERIALS/US4189	pKW2321
PKW2646	/MATERIALS/US4188 /MATERIALS/US4189	pKW2321
PKW2647	/MATERIALS/US4188 /MATERIALS/US4189	pKW2321
PKW2648		
PKW2649		pKW1689
PKW265		pKW16 - pNPI-FL
PKW2650		pKW1689
PKW2651		pKW1689
PKW2652		
PKW2653	/MATERIALS/US4234 /MATERIALS/US4235	pKW1689
PKW2654	/MATERIALS/US4265 /MATERIALS/US4266	pKW1689
PKW2655		
PKW2656		
PKW2657		
PKW2658		pKW760
PKW2659		pKW2658
PKW266		pKW16 - pNPI-FL
PKW2660		
PKW2661		pKW1008
PKW2662		
PKW2663		pKW2662
PKW2664	/MATERIALS/US4372 /MATERIALS/US4373	pKW1689
PKW2665	/MATERIALS/US4376 /MATERIALS/US4377	pKW1689
PKW2666		
PKW2667		pKW2131
PKW2668	/MATERIALS/US4236 /MATERIALS/US4237	pKW2572
PKW2669		pKW786
PKW267		pRSET C
PKW2670		pKW2460
PKW2671		pKW2460
PKW2672		pKW2670
PKW2673		pKW2670
PKW2674		pKW2670
PKW2675		pKW2670
PKW2676		pKW2487
PKW2677		pKW2487
PKW2678		
PKW2679		
PKW268		pRSET C
PKW2680		pKW2676
PKW2681		pKW350
PKW2682		pKW2487
PKW2683		
PKW2684		pKW2682
PKW2685		pFA6a cNLS-yEGFP-HA- pKW2682
PKW2686		pKW2669
PKW2687		
PKW2688		pKW2407
PKW2689	/MATERIALS/US4497 /MATERIALS/US4499	pKW1689
PKW269		pBluescript
PKW2690	/MATERIALS/US4499 /MATERIALS/US497	pKW1689
PKW2691		pKW2684
PKW2692		pKW2685
PKW2693		
PKW2694	/MATERIALS/US4528 /MATERIALS/US4529	pGemT
PKW2695	/MATERIALS/US4505 /MATERIALS/US4506	pKW1689
PKW2696	/MATERIALS/US4509 /MATERIALS/US4510	pKW1689
PKW2697		pRS306
PKW2698		pRS314
PKW2699		pRS314
PKW27		pBluescript SK-
PKW270		pBluescript
PKW2700		pRS314
PKW2701		pUG34 (pRS314-pMET25-GFP)
PKW2702		pNH605-pCYC1
PKW2703	/MATERIALS/US4507 /MATERIALS/US4508	pKW1689
PKW2704	/MATERIALS/US4513 /MATERIALS/US4514	pKW1689
PKW2705	/MATERIALS/US4586 /MATERIALS/US4587	pKW2668
PKW2706		pKW2459
PKW2707		pKW2669
PKW2708		pKW760
PKW2709		pKW2638
PKW271		pKW269 - pYMP90A
PKW2710		
PKW2711		
PKW2712		
PKW2713		
PKW2714		pKW1669
PKW2715		pKW1669
PKW2716		pKW2546
PKW2717		pkw354
PKW2718		pkw354
PKW2719		pkw354
PKW272		pKW270 - pYMP90B
PKW2720		pkw354
PKW2721		760
PKW2722		760
PKW2723		pFA6a-GFP-KanMx6
PKW2724		pFA6a-GFP-TRP1
PKW2725		pFA6a-GFP-HisMx6
PKW2726		pKW2585
PKW2727		pKW2326
PKW2728		
PKW2729		
PKW273		pKW264 - pJN38
PKW2730		
PKW2731		
PKW2732		pKW2487
PKW2733		pKW2487
PKW2734		pKW2705
PKW2735		pRS304
PKW2736		pKW760
PKW2737		pKW760
PKW2738		
PKW2739		
PKW274		pKW264 - pJN38
PKW2740		
PKW2741		yCPlac22
PKW2742		yCPlac22
PKW2743		pFA6a
PKW2744		pFA6a
PKW2745		pFA6a
PKW2746		pFA6a
PKW2747		
PKW2748		
PKW2749		pKW1669
PKW275		pKW202 - HS5543
PKW2750		pKW1669
PKW2751	/MATERIALS/US4674 /MATERIALS/US4675	pKW2626
PKW2752		pkw760
PKW2753		
PKW2754		
PKW2755		
PKW2756		
PKW2757		
PKW2758		pKW785
PKW2759		
PKW276		pKW275 - pIMP90
PKW2760		
PKW2761		
PKW2762		
PKW2763		
PKW2764		
PKW2765		
PKW2766		
PKW2767		pKW 2207
PKW2768	/MATERIALS/US4685 /MATERIALS/US4686	pkw2538
PKW2769	/MATERIALS/US4683 /MATERIALS/US4684	pkw1987
PKW277		pSG5
PKW2770		
PKW2771		
PKW2772		pKW1322
PKW2773		
PKW2774		
PKW2775		
PKW2776		
PKW2777		1689
PKW2778		pkw2541
PKW2779		
PKW278		pKW163 - pEG202+4
PKW2780		1689
PKW2781		
PKW2782		
PKW2783		
PKW2784		
PKW2785		
PKW2786		
PKW2787		
PKW2788		
PKW2789		
PKW279		pKW278 - pEG IMP90 -1
PKW2790		
PKW2791		
PKW2792		pkw2312
PKW2793		pkw2312
PKW2794		
PKW2795		
PKW2796		
PKW2797		
PKW2798		
PKW2799		pkw2792
PKW28		pBluescript SK-
PKW280		pKW278 - pEG IMP90 -1
PKW2800		pkw2799
PKW2801		
PKW2802		
PKW2803		
PKW2804		
PKW2805		
PKW2806		
PKW2807		pKW1330
PKW2808		pKW1330
PKW2809		pKW1330
PKW281		pRSET A
PKW2810		pKW1330
PKW2811		pKW1324
PKW2812		pKW1324
PKW2813		
PKW2814		
PKW2815		pKW2806
PKW2816		pKW2806
PKW2817		pkw786
PKW2818		pkw1689
PKW2819		786
PKW282		pQE60
PKW2820		1689
PKW2821		pKW2809
PKW2822		pKW2810
PKW2823		pKW1330
PKW2824		pkw2244
PKW2825		
PKW2826		
PKW2827		pkw2825
PKW2828		
PKW2829		
PKW283		pKW208 - pDS-ASF1
PKW2830		
PKW2831		
PKW2832	/MATERIALS/US4896 /MATERIALS/US4897	pKW1689
PKW2833		
PKW2834		
PKW2835		
PKW2836	/MATERIALS/US3943 /MATERIALS/US4901	pKW787
PKW2837	/MATERIALS/US4155 /MATERIALS/US4766	pKW2526
PKW2838		
PKW2839		
PKW284		pKW208 - pDS-ASF1
PKW2840		
PKW2841		
PKW2842		
PKW2843		
PKW2844		
PKW2845		
PKW2846	/MATERIALS/US4896 /MATERIALS/US4898	pKW2526
PKW2847		
PKW2848		
PKW2849		
PKW285		pJG4-5
PKW2850		
PKW2851		pKW2207
PKW2852		
PKW2853		
PKW2854		pkw2820
PKW2855		2817
PKW2856		kwy2722
PKW2857		
PKW2858		
PKW2859		
PKW286		pJG4-5
PKW2860		pKW1669
PKW2861		
PKW2862		
PKW2863		
PKW2864		pKW2321
PKW2865		pKW2864
PKW2866		pKW2865
PKW2867		pKW2312
PKW2868		
PKW2869		
PKW287		pJG4-5
PKW2870		
PKW2871		
PKW2872		
PKW2873		
PKW2874		
PKW2875		
PKW2876		
PKW2877		
PKW2878		
PKW2879		
PKW288		pEG202
PKW2880		
PKW2881		
PKW2882		
PKW2883		
PKW2884		pKW001
PKW2885		pKW804
PKW2886		
PKW2887		
PKW2888		
PKW2889		
PKW289		pEG202
PKW2890		
PKW2891		
PKW2892		
PKW2893		
PKW2894		
PKW2895		
PKW2896		
PKW2897		pKW1324
PKW2898		pKW1324
PKW2899		pKW2173
PKW29		pKW30 - pC‰ö BamHI
PKW290		pQE60
PKW2900		
PKW2901		
PKW2902		pKW2900
PKW2903		pKW2901
PKW2904		
PKW2905		2526
PKW2906		2526
PKW2907		
PKW2908		
PKW2909		
PKW291		pQE60
PKW2910		
PKW2911		
PKW2912		
PKW2913		
PKW2914		
PKW2915		
PKW2916		
PKW2917		
PKW2918		pKW1358
PKW2919		pKW2885
PKW292		pQE60
PKW2920		pKW2576
PKW2921		
PKW2922		
PKW2923		pKW803
PKW2924		pKW804
PKW2925		pKW2904
PKW2926		pKW2904
PKW2927		
PKW2928		
PKW2929		
PKW293		pQE60
PKW2930		
PKW2931		
PKW2932		
PKW2933		pKW2926
PKW2934		pKW2888
PKW2935		pKW2888
PKW2936		pKW2860
PKW2937		pKW2859
PKW2938		pKW2902
PKW2939		pKW2903
PKW294		pRSET B
PKW2940		pRS404
PKW2941		pkw348
PKW2942		pkw2941
PKW2943		pkw2420
PKW2944		pkw2321
PKW2945		
PKW2946		
PKW2947		
PKW2948		
PKW2949		
PKW295		pET3d
PKW2950		pkw2949
PKW2951	/MATERIALS/US2205 /MATERIALS/US3436	2312
PKW2952		2312
PKW2953		2312
PKW2954		2421
PKW2955		2421
PKW2956		
PKW2957		
PKW2958		pKW1
PKW2959		pKW1
PKW296		
PKW2960		pKW1
PKW2961		pKW1
PKW2962		
PKW2963		
PKW2964		
PKW2965		
PKW2966		
PKW2967		
PKW2968		
PKW2969		
PKW297		pKW275 - pIMP90
PKW2970		
PKW2971		
PKW2972		
PKW2973		pKW2727
PKW2974		
PKW2975		
PKW2976		
PKW2977		
PKW2978		
PKW2979		pKW2409
PKW298		pGEX-CS
PKW2980		
PKW2981	/MATERIALS/US5470 /MATERIALS/US5471	pKW1008
PKW2982		
PKW2983		
PKW2984		pkw2949
PKW2985		pKW001
PKW2986		pKW001
PKW2987		pKW2459
PKW2988		pKW2459
PKW2989		pKW2979
PKW299		pKW297 - pBS Ran
PKW2990		pKW2979
PKW2991		pKW2979
PKW2992		
PKW2993		
PKW2994		
PKW2995		
PKW2996		
PKW2997		
PKW2998		
PKW2999		
PKW3		pGEX-2T
PKW30		pKW28 - pC
PKW300		pKW291 - pQE IMP90
PKW3000	/MATERIALS/US2372 /MATERIALS/US5283	pSV271
PKW3001	/MATERIALS/US2372 /MATERIALS/US5283	pSV271
PKW3002	/MATERIALS/US2372 /MATERIALS/US5283	pSV271
PKW3003	/MATERIALS/US2372 /MATERIALS/US5283	pSV271
PKW3004		
PKW3005		pRS414
PKW3006		pRS414
PKW3007		2918
PKW3008		pkw1689
PKW3009		1689
PKW301		pRSET B
PKW3010		
PKW3011		
PKW3012		
PKW3013		
PKW3014		pKW001
PKW3015		pKW001
PKW3016		pKW001
PKW3017		pKW001
PKW3018		pKW001
PKW3019		pKW 760
PKW302		pRSET B
PKW3020	/MATERIALS/US5659 /MATERIALS/US5660	pKW2495
PKW3021		
PKW3022		
PKW3023		
PKW3024		
PKW3025		
PKW3026		
PKW3027		
PKW3028	/MATERIALS/US5657 /MATERIALS/US5658	pKW2837
PKW3029	/MATERIALS/US5657 /MATERIALS/US5658	pKW2837
PKW303		pGEX-CS
PKW3030		pKW2727
PKW3031		pKW2727
PKW3032		pKW2707
PKW3033		pKW2707
PKW3034		pKW760
PKW3035		
PKW3036		
PKW3037		pKW3023
PKW3038		pKW001
PKW3039		pKW001
PKW304		pGEX-2T
PKW3040		pkw2867
PKW3041		pNH605 (pLC130)
PKW3042		pNH605 (pLC130)
PKW3043		pNH605 (pLC130)
PKW3044		pKW3020
PKW3045		pKW2738
PKW3046		pKW804
PKW3047		pKW2407
PKW3048		pKW3046
PKW3049		pKW2707
PKW305		pT7T3
PKW3050		
PKW3051		
PKW3052		
PKW3053		pKW3048
PKW3054		pKW2407
PKW3055		pKW2407
PKW3056		
PKW3057		
PKW3058		pKW350 (pRS316)
PKW3059		pEGFP-C1
PKW306		pBluescript SK-
PKW3060		pKW708
PKW3061		
PKW3062		
PKW3063		pKW3021
PKW3064		pKW3022
PKW3065		pKW953
PKW3066		pkw2312
PKW3067		pkw2321
PKW3068		pkw2421
PKW3069		pkw2312
PKW307		pKW295 - pET Ran
PKW3070		pkw2321
PKW3071		
PKW3072		pkw3066
PKW3073		pkw3067
PKW3074		pkw3068
PKW3075		pcDNA3.1
PKW3076		
PKW3077		
PKW3078		
PKW3079		
PKW308		pBluescript KS+
PKW3080	/MATERIALS/US5746 /MATERIALS/US5747	pGEM
PKW3081	/MATERIALS/US5746 /MATERIALS/US5747	pGEM
PKW3082	/MATERIALS/US5659 /MATERIALS/US5842	pKW1008
PKW3083	/MATERIALS/US5575 /MATERIALS/US5576	pKW3013
PKW3084	/MATERIALS/US5775 /MATERIALS/US5776	pKW3013
PKW3085	/MATERIALS/US5775 /MATERIALS/US5776	pKW3013
PKW3086	/MATERIALS/US5775 /MATERIALS/US5776	pKW3013
PKW3087	/MATERIALS/US5775 /MATERIALS/US5776	pKW3013
PKW3088		
PKW3089		
PKW309		pGEM5
PKW3090		
PKW3091		
PKW3092		
PKW3093		pKW3057
PKW3094		pLC10 (pFA6a-KANmx6-pGAL1-3HA)
PKW3095		
PKW3096		pkw3095
PKW3097		pkw3095
PKW3098		
PKW3099		
PKW31		pKW29 - pC24
PKW310		
PKW3100		
PKW3101		
PKW3102		pKW3602
PKW3103		3102
PKW3104		
PKW3105		pKW3012
PKW3106		pKW3013
PKW3107		3102
PKW3108		pKW709
PKW3109		
PKW311		pBluescript
PKW3110		
PKW3111		
PKW3112		
PKW3113		
PKW3114		
PKW3115		
PKW3116		
PKW3117		
PKW3118		pKW3115
PKW3119		pKW3024
PKW312		pRSET A
PKW3120		pKW3116
PKW3121		pKW3117
PKW3122		
PKW3123		
PKW3124		pKW788
PKW3125		pKW3059
PKW3126		pkw2421
PKW3127		pkw2421
PKW3128		pKW2321
PKW3129		pKW2321
PKW313		pRSET C
PKW3130		
PKW3131		
PKW3132		
PKW3133		
PKW3134		
PKW3135		pKW1008
PKW3136		pKW349
PKW3137		pKW349
PKW3138		pKW349
PKW3139		pKW349
PKW314		pKW312 - pRSET SRP-N
PKW3140		
PKW3141		pKW349
PKW3142		
PKW3143	/MATERIALS/US3482 /MATERIALS/US6051	pKW350
PKW3144		
PKW3145		
PKW3146		
PKW3147	/MATERIALS/US6033	pKW3028
PKW3148		pKW350
PKW3149	/MATERIALS/US6056 /MATERIALS/US6057	pKW3173
PKW315		pRSET C
PKW3150	/MATERIALS/US6058 /MATERIALS/US6059	pKW3173
PKW3151		
PKW3152		
PKW3153		pKW3148
PKW3154		pKW3148
PKW3155		
PKW3156		
PKW3157		pKW3023
PKW3158		pKW3158
PKW3159		
PKW316		
PKW3160		
PKW3161		
PKW3162		pKW3021
PKW3163		
PKW3164		pKW3023
PKW3165		pKW3023
PKW3166		pKW3023
PKW3167		pKW3148
PKW3168		pKW3148
PKW3169		pKW3148
PKW317		pSM56
PKW3170		pKW3148
PKW3171		
PKW3172		pKW2837
PKW3173	/MATERIALS/US6052 /MATERIALS/US6053	pKW3143
PKW3174	/MATERIALS/US6054 /MATERIALS/US6055	pKW3143
PKW3175		pFA6a-KanMx6-pMET3-URL-3HA
PKW3176	/MATERIALS/US6056 /MATERIALS/US6057	pKW3174
PKW3177		pkw2724
PKW3178		pkw2724
PKW3179		
PKW318		pKW317 - pSM56 SRPb -1
PKW3180		
PKW3181		
PKW3182		
PKW3183		
PKW3184		
PKW3185		
PKW3186		
PKW3187		
PKW3188		
PKW3189		
PKW319		pKW312 - pRSET SRP-N
PKW3190		
PKW3191		
PKW3192		
PKW3193		
PKW3194		
PKW3195		
PKW3196		
PKW3197		
PKW3198		
PKW3199		
PKW32		
PKW320		pKW312 - pRSET SRP-N
PKW3200		
PKW3201		
PKW3202	/MATERIALS/US6058 /MATERIALS/US6059	pKW3174
PKW3203		
PKW3204		
PKW3205		pKW3023
PKW3206		
PKW3207		
PKW3208		
PKW3209		
PKW321		pRSET C
PKW3210		
PKW3211		
PKW3212		
PKW3213		
PKW3214		
PKW3215		
PKW3216		
PKW3217		pNH605(XbaI)-pCYC1-3V5
PKW3218		pNH605(XbaI)-pCYC1-3V5
PKW3219		pNH605(XbaI)-pCYC1-3V5-IAA7 (pKW3217)
PKW322		pRSET C
PKW3220		pKW3021
PKW3221		pKW3021
PKW3222		pKW3021
PKW3223		pKW3021
PKW3224		pKW3021
PKW3225		pKW3218-pMET3-URL-3V5
PKW3226		pKW3219-pMET3-3V5-IAA7
PKW3227		pKW3218-pMET3-URL-3V5
PKW3228		pKW3219-pMET3-3V5-IAA7
PKW3229		
PKW323		pBluescript KS+
PKW3230		
PKW3231		pKW3229
PKW3232		
PKW3233		pKW3229
PKW3234		pKW3230
PKW3235		pKW3229
PKW3236		pKW3235
PKW3237		pKW3235
PKW3238		pKW3231
PKW3239		pKW3232
PKW324		pRSET C
PKW3240		pKW3231
PKW3241		pKW3232
PKW3242		
PKW3243		
PKW3244		pKW2544
PKW3245		
PKW3246		
PKW3247		pKW3150
PKW3248		pKW3150
PKW3249		pKW3054
PKW325		pKW313 - pRSET SRP-C
PKW3250		pKW3054
PKW3251		Westermann et al.
PKW3252		Westermann et al.
PKW3253		Westermann et al
PKW3254		pKW2937
PKW3255		pKW2938
PKW3256		pKW3048
PKW3257		pKW3179
PKW3258		pKW3048
PKW3259		pKW3179
PKW326		pRSET C
PKW3260		
PKW3261		pKW3240
PKW3262		pVT100U (Westermann et al.)
PKW3263		PL-452
PKW3264	/MATERIALS/CH106 /MATERIALS/CH6	pKW1689
PKW3265	/MATERIALS/CH106 /MATERIALS/CH6	pKW1689
PKW3266		pMA
PKW3267		
PKW3268		pKW2327
PKW3269		pKW2327
PKW327		pRSET C
PKW3270		
PKW3271		
PKW3272		pKW2546
PKW3273		pKW2546
PKW3274		pKW2546
PKW3275		pKW2546
PKW3276		pKW2546
PKW3277		pKW2546
PKW3278		pKW2546
PKW3279		pKW2546
PKW328		pRSET C
PKW3280		
PKW3281		
PKW3282		
PKW3283		
PKW3284		
PKW3285		
PKW3286		
PKW3287		pKW3251
PKW3288		pKW3251
PKW3289		pKW3251
PKW329		
PKW3291		
PKW3293		
PKW3294		
PKW3295		
PKW3296		
PKW3297		pRS306
PKW3298		
PKW3299		pKW3236
PKW33		pBluescript KS-
PKW330		
PKW3300		pKW3293
PKW3301		
PKW3302		
PKW3303		
PKW3304		
PKW3305		
PKW3306		
PKW3307		pKW3304
PKW3308		
PKW3309		
PKW331		p
PKW3310		pKW3279
PKW3311		pYB1372
PKW3312		pKW788
PKW3313		pYB1602
PKW3317		pYB1372
PKW3318		pKW3401
PKW3319		
PKW332		YEp51
PKW3320		pKW3307
PKW3321		pkw2312
PKW3322		pkw2312
PKW3323		pkw2312
PKW3324		pkw2312
PKW3325		pkw3321
PKW3326		pkw3321
PKW3327		pkw3321
PKW3328		pkw3323
PKW3329		pkw3323
PKW333		pEG202
PKW3330		pkw3326
PKW3331		pkw3326
PKW3332		pkw3328
PKW3333		pkw3331
PKW3334		pkw3326
PKW3335		pkw3327
PKW3336		pkw3324
PKW3337		pkw2421
PKW3338		pkw2421
PKW3339		pkw2421
PKW334		pEG202
PKW3340		pkw2421
PKW3341		pkw3337
PKW3342		pkw3337 (?)
PKW3343		pkw3337
PKW3344		pkw3339
PKW3345		pkw3339
PKW3346		pkw3342 (?)
PKW3347		pkw3342 (?)
PKW3348		pkw3344
PKW3349		pkw3347
PKW335		pEG202
PKW3350		pkw3340
PKW3351		pkw2321
PKW3352		pkw2321
PKW3353		pkw2321
PKW3354		pkw2321
PKW3355		
PKW3356		
PKW3357		
PKW3358		
PKW3359		
PKW336		pJG4-5
PKW3360		
PKW3361		
PKW3362		
PKW3363		
PKW3364		
PKW3365		
PKW3366		
PKW3367		
PKW3368		
PKW3369		
PKW337		pJG4-5
PKW3370		
PKW3372		pKW2544
PKW3373		PKW350
PKW3374		pkw3291
PKW3377		pKW3256
PKW3378		pKW3257
PKW3379		pKW3249
PKW338		pJG4-5
PKW3380		pKW3250
PKW3381		pKW3048
PKW3382		pKW3179
PKW3383		pKW2327
PKW3384		pKW2327
PKW3385		pKW2327
PKW3386		pKW3363-pKW3355
PKW3387		pKW3372
PKW3388		pKW3372
PKW3389		pKW3372
PKW339		
PKW3390		pKW3372
PKW3391		pKW3372
PKW3392		pKW3372
PKW3393		pKW3372
PKW3394		pKW3372
PKW3395		pKW3372
PKW3396	/MATERIALS/CH470	pKW3478
PKW3397		pKW2888
PKW3398		pKW3279
PKW34		
PKW340		
PKW3401	/MATERIALS/CH271	pKW3317
PKW3402		pKW2218
PKW3403		pKW3136
PKW3404		pKW1703
PKW3405		pKW2544
PKW3406		pKW2207
PKW3407		pKW2327
PKW3408		pKW3386
PKW3409		pKW3320
PKW341		
PKW3410		pKW1424
PKW3411		pKW1144
PKW3412		
PKW3413		pKW3235
PKW3414	/MATERIALS/CH271 /MATERIALS/CH310	pKW3279
PKW3415		pKW787
PKW3416		pKW787
PKW3417	/MATERIALS/CH275 /MATERIALS/CH278	pYB1372
PKW3418	/MATERIALS/CH309 /MATERIALS/CH310	pKW3398
PKW3419		pKW3377
PKW342		pRSET C
PKW3420		pKW3377
PKW3421		pKW3377
PKW3422		pKW3377
PKW3423		pKW3379
PKW3424		pKW3379
PKW3425		pKW3379
PKW3426		pKW3379
PKW3427		pKW2424
PKW3428		pKW2424
PKW3429		pKW2424
PKW343		
PKW3430		pKW3377
PKW3431		pKW3378
PKW3433		pKW3394
PKW3434		pKW3408
PKW3435		pKW3434
PKW3437		
PKW3438		
PKW3439		
PKW344		
PKW3440		
PKW3441		pKW2306
PKW3443		pKW2306
PKW3444		pKW3372
PKW3445	/MATERIALS/CH485 /MATERIALS/CH487	pKW3282
PKW3446		pKW3293
PKW3447		pKW3293
PKW3448	/MATERIALS/CH514 /MATERIALS/CH515	pKW3281
PKW3449	/MATERIALS/CH414 /MATERIALS/CH415	pKW3282
PKW345		
PKW3450		pKW3447
PKW3451		pKW3427
PKW3452		pKW3428
PKW3453		pKW3429
PKW3454		pKW3446
PKW3456	/MATERIALS/CH546 /MATERIALS/CH547	pKW3448
PKW3457	/MATERIALS/CH546 /MATERIALS/CH547	pKW3449
PKW3458	/MATERIALS/CH546 /MATERIALS/CH547	pKW3281
PKW3459	/MATERIALS/CH546 /MATERIALS/CH547	pKW3282
PKW346		
PKW3460		pKW3435
PKW3461		pKW3293
PKW3462		pKW3293
PKW3463		pKW2626
PKW3464		pKW001
PKW3465		pKW001
PKW3466		pKW001
PKW3467		pKW3435
PKW3468		pKW3435
PKW3469		pKW3293
PKW347		
PKW3470		pKW3461
PKW3471		pKW2686
PKW3473		pKW2326
PKW3474		pKW2686
PKW3475		pkw3333
PKW3476		pkw3333
PKW3477		pkw2866
PKW3478	/MATERIALS/CH469 /MATERIALS/CH470	pKW2550
PKW3479	/MATERIALS/CH278	pYB1372
PKW348		
PKW3480	/MATERIALS/CH109 /MATERIALS/CH213	pKW787
PKW3481	/MATERIALS/CH279 /MATERIALS/CH290	pRS406
PKW3482		
PKW3483		pkw3333
PKW3484		pkw3333
PKW3486		pKW3302
PKW3487		pkw3475
PKW3488		pkw3333
PKW3489		pkw3461
PKW349		
PKW3490		pkw3461
PKW3491		pkw2967
PKW3492		pkw2968
PKW3493		pkw2969
PKW3494		pkw3004
PKW3495		pkw3005
PKW3496		pkw3006
PKW3497		
PKW3498		
PKW3499		
PKW35		
PKW350		
PKW3500		
PKW3501		pKW3433
PKW3502		pKW3467
PKW3503		pKW3467
PKW3504	/MATERIALS/CH482	pKW1803
PKW3505		pkw3488
PKW3506		pkw3488
PKW3507		pkw3505
PKW3508		
PKW3509		
PKW351		
PKW3510		
PKW3511		
PKW3512		
PKW3513		
PKW3514		
PKW3515		
PKW3516		
PKW3517		pkw3461
PKW3518		pkw3461
PKW3519		pKW3388
PKW352		
PKW3520		pKW2579
PKW3521		
PKW3522		
PKW3523		
PKW3524		
PKW3525		
PKW3526		
PKW3527		
PKW3528		pKW2686
PKW3529		pKW3388 (CEN)
PKW353		
PKW3530		pKW3388 (CEN)
PKW3531		
PKW3532	/MATERIALS/CH271 /MATERIALS/CH290	pKW3297
PKW3533		
PKW3534		
PKW3535		
PKW3536		
PKW3537		
PKW3538		
PKW3539		pKW2208
PKW354		
PKW3540		
PKW3541		
PKW3542		pKW2208
PKW3543		pkw3517
PKW3544		pkw3517
PKW3545		pkw3126
PKW3546		pkw3126
PKW3547		
PKW3548		pKW3154
PKW3549		pKW2899
PKW355		pKW313 - pRSET SRP-C
PKW3550		pkw3543
PKW3551		pkw3453
PKW3552	/MATERIALS/CH781 /MATERIALS/CH782	pKW759
PKW3553	/MATERIALS/CH807 /MATERIALS/CH808	pKW759
PKW3554		
PKW3555		
PKW3556		pKW3528
PKW3557		pKW3528
PKW3558		pKW3528
PKW3559		pKW3528
PKW356		pQE32
PKW3560		pKW3528
PKW3561		pKW2899
PKW3562		pKW3407
PKW3563		pKW3435
PKW3564		pKW3435
PKW3565		pKW3435
PKW3566		pKW3435
PKW3567		pKW3406
PKW3568		pKW3407
PKW3569		pKW2124
PKW357		pKW356 - pQE Ran
PKW3570		pKW2207
PKW3571		
PKW3572		pKW589
PKW3573		pKW589
PKW3574		pKW2575
PKW3575		pKW2575
PKW3576		
PKW3577		
PKW3578		
PKW3579		pKW3529
PKW358		
PKW3580		pKW3529
PKW3581		pKW3529
PKW3582		pKW3529
PKW3583		pKW3416
PKW3584		pKW3562
PKW3585		pKW3401
PKW3586		pKW3417
PKW3587		pKW3532
PKW3588		
PKW3589		
PKW359		
PKW3590		
PKW3591		pKW3580
PKW3592		pKW3569
PKW3593		pKW3569
PKW3594		pKW2124
PKW3595		pKW2124
PKW3596		pKW3398
PKW3597		
PKW3598		pKW3529
PKW3599		pKW3447
PKW36		pSG5
PKW360		
PKW3600		pKW3576
PKW3601		pKW3577
PKW3602		pKW3596
PKW3603		pKW2591
PKW3604		pKW3293
PKW3605		pKW3503
PKW3606		pKW3501
PKW3607		pKW3579
PKW3608		
PKW3609		
PKW361		
PKW3610		pKW3398
PKW3611		
PKW3612		pKW3582
PKW3613		pKW3597
PKW3614		pKW3562 + pKW2744
PKW3615		pKW3562 + pKW3525
PKW3616		pKW3572 + pKW3404
PKW3617		pKW2421
PKW3618		pKW2422
PKW3619		pKW3293
PKW362		
PKW3620		pKW3293
PKW3621		pKW3293
PKW3622		
PKW3623		
PKW3624		pkw2321
PKW3625		pkw2321
PKW3626		pKW3611
PKW3627		
PKW3628		
PKW3629		pKW3611
PKW363		
PKW3630		
PKW3631		pKW3461
PKW3632		pKW3470
PKW3633		pKW3461
PKW3634		pKW3461
PKW3635		pKW3470
PKW3636		pHCA/GAL4 (848). ER pRS306
PKW3637		PKW350
PKW3638		pKW350
PKW3639		pKW3470
PKW364		
PKW3640		pKW3470
PKW3641		pKW3630
PKW3642		pKW3630
PKW3643		pKW3381
PKW3644		pKW3471
PKW3645		pKW3474
PKW3646		pKW3461
PKW365		
PKW366		
PKW367		
PKW368		
PKW369		
PKW37		pKW36 - pSG5-C24
PKW370		
PKW371		
PKW372		pQE70
PKW373		pQE70
PKW374		pBluescript SK+
PKW375		pGEX-2T
PKW376		pRSET A
PKW377		pRSET A
PKW378		
PKW379		
PKW38		pRSET B
PKW380		
PKW381		
PKW382		
PKW383	/MATERIALS/US1 /MATERIALS/US2	pKW348 - pRS314
PKW384		pKW230 - pRSET XCons
PKW385		pKW15 - pVT202-U
PKW386	/MATERIALS/US3 /MATERIALS/US4	pKW383 - pRS-LexA
PKW387		pKW386 - pRSLexA-B42-HA
PKW388		pKW386 - pRSLexA-B42-HA
PKW389		pKW344 - pRS314-G
PKW39		pKW29 - pC24
PKW390		pKW345 - pRS315 G
PKW391		pKW343 - pRS313 G
PKW392	/MATERIALS/US1 /MATERIALS/US2	pKW354 - pRS426
PKW393		pKW352 - pRS424
PKW394	/MATERIALS/US15 /MATERIALS/US16	pKW393 - pRS424 (G)
PKW395		pT7T3
PKW396		pBluescript SK
PKW397		pT7T3D
PKW398		pT7T3D
PKW399		pGEM-3Z (modified)
PKW4		pSG5
PKW40		pJG4-5
PKW400		pGEM-3Z modified
PKW401	/MATERIALS/US17	pKW387 - pRS386-NES
PKW402	/MATERIALS/US17	pKW388 - pRS386-P12
PKW403	/MATERIALS/US17	pKW401 - pNES-cGFP
PKW404	/MATERIALS/US17	pKW402 - pP12-cGFP
PKW405		
PKW406	/MATERIALS/US11 /MATERIALS/US13	pKW321 - pRSET bGal
PKW407	/MATERIALS/US11 /MATERIALS/US14	pKW321 - pRSET bGal
PKW408	/MATERIALS/US12 /MATERIALS/US14	pKW321 - pRSET bGal
PKW409	/MATERIALS/US21 /MATERIALS/US22	pKW387 - pRS386-NES
PKW41		pJG4-5
PKW410	/MATERIALS/US21 /MATERIALS/US22	pKW388 - pRS386-P12
PKW411		pKW351 - pRS423
PKW412		pKW354 - pRS426
PKW413		pKW411 - pRS423-Gal
PKW414		pKW411 - pRS423-Gal
PKW415		pKW412 - pRS426-Gal
PKW416		pKW412 - pRS426-Gal
PKW417		pKW415 - p426NLS-GFP-NES
PKW418		pKW416 - p426NLS-GFP-P12
PKW419		pBluescript KS-
PKW42		pJG4-5
PKW420		
PKW421		pKW351 - pRS423
PKW422		pKW394 - pProie
PKW423		pKW394 - pProie
PKW424	/MATERIALS/US23 /MATERIALS/US24	pKW417 - pAdhNLS-GFP-NES
PKW425	/MATERIALS/US23 /MATERIALS/US24	pKW417 - pAdhNLS-GFP-NES
PKW426		pKW343 - pRS313-G
PKW427	/MATERIALS/US27 /MATERIALS/US28	pKW387 - pRS386-NES
PKW428	/MATERIALS/US27 /MATERIALS/US28	pKW387 - pRS386-NES
PKW429		pCMV4
PKW43		pJG4-5
PKW430	/MATERIALS/US21 /MATERIALS/US25	pKW417 - pAdhNLS-GFP-NES
PKW431	/MATERIALS/US21 /MATERIALS/US25	pKW418 - pAdhNLS-GFP-P12
PKW432		pKW352 - pRS424
PKW433		pKW352 - pRS424
PKW434		pBS KS+ GFP
PKW435		pKW434 - pBS CRM1-GFPts
PKW436		YCP50
PKW437		pKW434 - pBS CRM1-GFPts
PKW438	/MATERIALS/US29	pKW343 - pRS313-G
PKW439	/MATERIALS/US29	pKW343 - pRS313-G
PKW44		pJG4-5
PKW440	/MATERIALS/US29	pKW347 - pRS313
PKW441	/MATERIALS/US29	pKW347 - pRS313
PKW442	/MATERIALS/US29	pKW158 - pEG202
PKW443		pKW392 - pAppat
PKW444		pKW392 - pAppat
PKW445		pKW392 - pAppat
PKW446		pKW392 - pAppat
PKW447		pKW392 - pAppat
PKW448		pKW392 - pAppat
PKW449		
PKW45		pJG4-5
PKW450		
PKW451	/MATERIALS/US22 /MATERIALS/US30	pKW352 - pRS424
PKW452	/MATERIALS/US22 /MATERIALS/US31	pKW344 - pRS314-G
PKW453		pKW452 - pIBB-GFP-B42
PKW454		pKW392 - pAppat
PKW455		pBS-GFP
PKW456		pKW347 - pRS313
PKW457		pKW456 - pRS-crm1-1-GFP
PKW458		pBluescript SK-
PKW459		pKW394 - pProie
PKW46		pJG4-5
PKW460		LR1Del1
PKW461		LR1Del1
PKW462	/MATERIALS/US12 /MATERIALS/US14	pKW392 - pAppat
PKW463		pKW415 - p426NLS-GFP-NES
PKW464		pKW415 - p426NLS-GFP-NES
PKW465		pBS KS+ GFP
PKW466		YCP50
PKW467		pKW347 - pRS313
PKW468		pKW347 - pRS313
PKW469		pKW394 - pProie
PKW47		pJG4-5
PKW470		pKW347 - pRS313
PKW471		pKW164 - pJG4-5
PKW472		pKW158 - pEG202
PKW473		pKW158 - pEG202
PKW474	/MATERIALS/US42 /MATERIALS/US43	pKW158 - pEG202
PKW475		pKW164 - pJG4-5
PKW476		
PKW477		YCP50
PKW478	/MATERIALS/US29	pKW346 - pRS316-G
PKW479	/MATERIALS/US44 /MATERIALS/US45	pKW392 - pAppat
PKW48		pJG4-5
PKW480	/MATERIALS/US46 /MATERIALS/US47	pKW392 - pAppat
PKW481	/MATERIALS/US44 /MATERIALS/US45	pKW321 - pRSET bGal
PKW482	/MATERIALS/US46 /MATERIALS/US47	pKW321 - pRSET bGal
PKW483		pKW472 - pEG GFP-NES
PKW484		pKW473 - pEG GFP-P12
PKW485		pET30-a(+)
PKW486		
PKW487		
PKW488		pKW485 - pET p97
PKW489		
PKW49		pJG4-5
PKW490		
PKW491		pBluescript
PKW492		pKW158 - pEG202
PKW493		pKW158 - pEG202
PKW494		pKW158 - pEG202
PKW495		pKW158 - pEG202
PKW496		pKW158 - pEG202
PKW497		pKW164 - pJG4-5 colony
PKW498		pKW164 - pJG4-5 colony
PKW499	/MATERIALS/US50 /MATERIALS/US51	pKW417 - pAdhNLS-GFP-NES
PKW5		pSG5
PKW50		pJG4-5
PKW500	/MATERIALS/US52 /MATERIALS/US53	pKW417 - pAdhNLS-GFP-NES
PKW501	/MATERIALS/US50 /MATERIALS/US51	pKW158 - pEG202
PKW502	/MATERIALS/US52 /MATERIALS/US53	pKW158 - pEG202
PKW503		
PKW504	/MATERIALS/US48 /MATERIALS/US49	pKW467 - pRS CRM1-A1
PKW505	/MATERIALS/US48 /MATERIALS/US49	pKW468 - pRS CRM1-A2
PKW506	/MATERIALS/US34 /MATERIALS/US36	pBluescript KS+
PKW507	/MATERIALS/US34 /MATERIALS/US36	pBluescript KS+
PKW508		pKW472 - pEG NES-GFP
PKW509		pKW472 - pEG NES-GFP
PKW51		pJG4-5
PKW510		pBluescript SK
PKW511		pKW349 - pRS315
PKW512		pKW511 - pSW503
PKW513		
PKW514		YCp50-LEU2
PKW515		pRS316
PKW516		
PKW517		
PKW518		
PKW519		
PKW52		pJG4-5
PKW520		pEGFP-C1
PKW521	/MATERIALS/US58 /MATERIALS/US59	pKW417 - pAdhNLS-GFP-NES
PKW522		pKW351
PKW523		
PKW524		
PKW525		pRSET A
PKW526		pKW158 - pEG202
PKW527		pKW158 - pEG202
PKW528		pKW164 - pJG4-5 colony
PKW529		
PKW53		pJG4-5
PKW530		
PKW531		
PKW532		
PKW533		pcDNA3 (Invitrogen)
PKW534		pcDNA3
PKW535		pKW164 - pJG4-5 colony
PKW536		pKW158 - pEG202
PKW537	/MATERIALS/US60	pKW347 - pRS313
PKW538		pKW164 - pJG4-5 colony
PKW539		pKW164 - pJG4-5 colony
PKW54		pJG4-5
PKW540		pKW164 - pJG4-5 colony
PKW541		pKW164 - pJG4-5 colony
PKW542		pKW348 - pRS314
PKW543		pKW350 - pRS316
PKW544		pRSET C
PKW545		pRSET B
PKW546		pKW394 - pProie
PKW547		pRSET B
PKW548		pRSET B
PKW549		pRSET B
PKW55		pJG4-5
PKW550		pRSET B
PKW551		pKW349 - pRS315
PKW552		pKW348 - pRS314
PKW553		pKW158 - pEG202
PKW554		pEG202
PKW555		pJG4-5
PKW556	/MATERIALS/US69 /MATERIALS/US70	pKW301 - pRSET Ran
PKW557		pZZ70
PKW558		pZZ70
PKW559		
PKW56		pJG4-5
PKW560		
PKW561		
PKW562		
PKW563		
PKW564		pRS303
PKW565		pKW230 - pRSET XCons
PKW566		pRSET C
PKW567		
PKW568	/MATERIALS/US75 /MATERIALS/US76	pKW558 - pZZ70
PKW569		pRSET B
PKW57		pJG4-5
PKW570		pKW394 - pProie
PKW571		pQE9
PKW572	/MATERIALS/US76 /MATERIALS/US83	pKW567 - pQE9
PKW573	/MATERIALS/US77 /MATERIALS/US78	pKW350 - pRS316
PKW574		pKW567 - pQE9
PKW575		pRS303
PKW576		pET28a
PKW577		pKW467 - pRS CRM1-A1
PKW578		pKW456 - pRS-crm1-1-GFP
PKW579		EBO347 PHO4-GFP
PKW58		pJG4-5
PKW580	/MATERIALS/US76 /MATERIALS/US83	pKW581 - pQE GSP1
PKW581	/MATERIALS/US83 /MATERIALS/US84	pKW581- pQE GSP1
PKW582	/MATERIALS/US83 /MATERIALS/US84	pKW581 - pQE GSP1
PKW583		pET28a
PKW584		
PKW585		
PKW586	/MATERIALS/US84 /MATERIALS/US87	pKW581 - pQE GSP1
PKW587		pKW580 - pQE GSP1‰ö C
PKW588		pRS305
PKW589		
PKW59		pJG4-5
PKW590		pKW580 - pQE GSP1‰ö C
PKW591		pKW590
PKW592	/MATERIALS/US76 /MATERIALS/US83	pKW581 - pQE GSP1
PKW593		pKW348 - pRS314
PKW594		
PKW595		
PKW596		
PKW597		
PKW598		EB0151
PKW599	/MATERIALS/US91 /MATERIALS/US92	pBluescript SK+
PKW6		pSG5
PKW60		pJG4-5
PKW600		pKW350 - pRS316
PKW601		pKW599 - pBS R17-2loops
PKW602		pKW601 - pBS2x(R17-2loops)
PKW603		pKW602 - pBS4x(R17-2loops)
PKW604	/MATERIALS/US95 /MATERIALS/US96	pKW581 - pQE GSP1
PKW605	/MATERIALS/US93 /MATERIALS/US94	pKW604 - pQE R17
PKW606		pKW346 - pRS316-G
PKW607		
PKW608		
PKW609		
PKW61		pJG4-5
PKW610		
PKW611		
PKW612		
PKW613		
PKW614		
PKW615		
PKW616		
PKW617		
PKW618		
PKW619		
PKW62		pJG4-5
PKW620		
PKW621		
PKW622		
PKW623		
PKW624		
PKW625		
PKW626		
PKW627		
PKW628		
PKW629	/MATERIALS/US100 /MATERIALS/US99	pKW606 - pRSGAL.GFP.R17
PKW63		pJG4-5
PKW630	/MATERIALS/US101 /MATERIALS/US95	pKW605 (pQE.GFP.R17)
PKW631		
PKW632		
PKW633		
PKW634		pKW457
PKW635		pKW631 - pQE-30
PKW636		pQE60
PKW637		pQE60
PKW638	/MATERIALS/US102 /MATERIALS/US103	pKW630 (pQE GFP.2XR17)
PKW639	/MATERIALS/US102 /MATERIALS/US103	pQE GFP.2XR17
PKW64		pJG4-5
PKW640	/MATERIALS/US102 /MATERIALS/US103	pQE GFP 2XR17
PKW641	/MATERIALS/US104 /MATERIALS/US105	pKW610 (pCM172)
PKW642		pKW606(pRSGAL.GFP.R17)
PKW643		pKW606(pRSGAL.GFP.R17)
PKW644		pKW606(pRSGAL.GFP.R17)
PKW645		pKW606(pRSGAL.GFP.R17)
PKW646		pKW629(pRSHIS.GFP.R17)
PKW647		pKW629(pRSHIS.GFP.R17)
PKW648		pKW629(pRSHIS.GFP.R17)
PKW649		pKW629(pRSHIS.GFP.R17)
PKW65		pJG4-5
PKW650		pKW610 (pCM172)
PKW651		pT7T3D-Pac
PKW652		pGEX-4T-1
PKW653		pGEX-4T-1
PKW654	/MATERIALS/US114 /MATERIALS/US115	pFA6a-GFP(S65T)-HIS3MX6
PKW655		pKW631 - pQE-30
PKW656		
PKW657		
PKW658		
PKW659		
PKW66		pJG4-5
PKW660		pKW470
PKW661		
PKW662		
PKW663		
PKW664		
PKW665		
PKW666		
PKW667		pET-3d
PKW668		pKW652 - GST-NES-GFP
PKW669		pKW653 - GST-P12-2GFP
PKW67		pJG4-5
PKW670		Lafmid BA
PKW671		pKW610 - pCM172
PKW672		pKW610 - pCM172
PKW673	/MATERIALS/US112 /MATERIALS/US113	pKW417
PKW674	/MATERIALS/US112 /MATERIALS/US113	pKW431
PKW675		pKW590 - pQE-RanQ69L
PKW676	/MATERIALS/US120 /MATERIALS/US121	pKW321 - pRSET bGal
PKW677	/MATERIALS/US104 /MATERIALS/US105	pBluescript SK+
PKW678	/MATERIALS/US104 /MATERIALS/US105	pBluescript SK+
PKW679		pKW633 - pQE-32
PKW68		pJG4-5
PKW680		
PKW681		
PKW682		
PKW683		pRS316
PKW684		
PKW685		pKW671 - pCM8
PKW686		pKW615 - pCM182
PKW687	/MATERIALS/US118 /MATERIALS/US119	pKW557 - pZZ-Ran
PKW688		
PKW689		pKW615 - pCM182
PKW69		pJG4-5
PKW690		pKW615 - pCM182
PKW691	/MATERIALS/US118 /MATERIALS/US119	pKW633 - pQE-32
PKW692		pKW686 - pCM182-HIS
PKW693		pKW686 - pCM182-HIS
PKW694	/MATERIALS/US122 /MATERIALS/US123	pKW590 - pQE-RanQ69L
PKW695		pKW694 - pQE-RanQ69L‰ö C
PKW696	/MATERIALS/US142 /MATERIALS/US143	pKW633 - pQE-32
PKW697		pKW696 - pQE-RanT24N
PKW698		pKW1 - pGEX-2T
PKW699		pKW1 - pGEX-2T
PKW7		
PKW70		pJG4-5
PKW700		pKW683
PKW701		pKW440
PKW702		pKW457
PKW703		pKW349 - pRS315
PKW704		pKW573
PKW705		pKW633 - pQE-32
PKW706		pKW691 - pQE-RCC1
PKW707		
PKW708		
PKW709		
PKW71		pJG4-5
PKW710		
PKW711		pKW347 - pRS313
PKW712		pKW577-pRS313
PKW713	/MATERIALS/US142 /MATERIALS/US143	pKW633 - pQE-32
PKW714	/MATERIALS/US142 /MATERIALS/US143	pKW633 - pQE-32
PKW715		
PKW716		pBluescript SK+
PKW717		
PKW718		
PKW719		
PKW72		pJG4-5
PKW720		pKW605 - PQE GFP-R17
PKW721		pKW605 - PQE GFP-R17
PKW722		
PKW723	/MATERIALS/US165 /MATERIALS/US166	pKW632 - pQE-31
PKW724	/MATERIALS/US165 /MATERIALS/US166	pKW633 - pQE-32
PKW725		pKW577 - pRS XPO1-ZZ
PKW726		pKW344 - pRS314-G
PKW727		pKW344 - pRS314-G
PKW728		pKW709 - pRS306
PKW729	/MATERIALS/US179 /MATERIALS/US180	pKW503 - pBluescriptKS+
PKW73		pJG4-5
PKW730		pKW353 - pRS425
PKW731		pKW353-pRS425
PKW732		
PKW733		
PKW734	/MATERIALS/US165 /MATERIALS/US166	pKW633 - pQE-32
PKW735		pKW709 - pRS306
PKW736	/MATERIALS/US171	pKW485
PKW737	/MATERIALS/US189 /MATERIALS/US190	pKW163 - pEG202+4
PKW738		pKW282 - pQE60
PKW739		pKW631 - pQE-30
PKW74		pJG4-5
PKW740		pKW282 - pQE60
PKW741		pKW373 - pQE Npl-core
PKW742	/MATERIALS/US179 /MATERIALS/US180	pKW503 - pBluescriptKS+
PKW743		
PKW744	/MATERIALS/US207 /MATERIALS/US208	
PKW745	/MATERIALS/US209 /MATERIALS/US210	
PKW746	/MATERIALS/US216 /MATERIALS/US217	pKW485 - pET p97
PKW747	/MATERIALS/US216 /MATERIALS/US218	pKW485 - pET p97
PKW748	/MATERIALS/US195 /MATERIALS/US196	pKW725
PKW749		pKW164 - pJG4-5
PKW75		pJG4-5
PKW750		pKW632 - pQE31
PKW751		pKW616
PKW752		Ref.710
PKW753		pKW752 - pKW710 + Xho
PKW754		pKW752 - pKW710 + Xho
PKW755		pKW752 - pKW710 + Xho
PKW756		pKW752 - pKW710 + Xho
PKW757		pET3d
PKW758		YIplc204
PKW759		YIplc128
PKW76		pJG4-5
PKW760		pRS303
PKW761		pRS303
PKW762		pKW488 - pET 71-876
PKW763		pKW282 - pQE60
PKW764		pKW282 - pQE60
PKW765		pKW752 - pKW710 + Xho
PKW766		pKW752 - pKW710 + Xho
PKW767		pKW752 - pKW710 + Xho
PKW768		pKW752 - pKW710 + Xho
PKW769		pQE70 (Qiagen)
PKW77		pJG4-5
PKW770	/MATERIALS/US65 /MATERIALS/US66	pKW655 - pQE-RanBP1
PKW771		
PKW772		
PKW773		pET30b
PKW774		
PKW775		
PKW776		
PKW777		
PKW778		
PKW779		
PKW78		pJG4-5
PKW780		
PKW781		
PKW782		
PKW783		
PKW784		
PKW785		
PKW786		
PKW787		
PKW788		
PKW789		
PKW79		pJG4-5
PKW790		
PKW791		
PKW792		
PKW793		
PKW794		
PKW795		
PKW796		
PKW797		
PKW798		
PKW799		
PKW8		pGEX-2T
PKW80		pJG4-5
PKW800		
PKW801		
PKW802	/MATERIALS/US291 /MATERIALS/US292	pKW393 - pRS424
PKW803	/MATERIALS/US293	
PKW804	/MATERIALS/US293 /MATERIALS/US294	pKW710
PKW805	/MATERIALS/US283 /MATERIALS/US284	pKW346-pGAL
PKW806	/MATERIALS/US283 /MATERIALS/US284	pKW346-pGAL
PKW807		pKW805
PKW808		pKW806
PKW809		pYX242
PKW81		pJG4-5
PKW810		pET30b
PKW811		pET3a
PKW812		pKW571- pQE XPO1
PKW813		pKW712-pRSLMBsXPO1
PKW814		
PKW815		
PKW816		pTYB4
PKW817		
PKW818		
PKW819		
PKW82		pJG4-5
PKW820		
PKW821		
PKW822		pET30a
PKW823		pHAT2-EGFP
PKW824		pET28a
PKW825		
PKW826		
PKW827		
PKW828		
PKW829		
PKW83		pJG4-5
PKW830		
PKW831		
PKW832		
PKW833		
PKW834		
PKW835		pKW825
PKW836	/MATERIALS/US365 /MATERIALS/US448	pKW673
PKW837		
PKW838	/MATERIALS/US331 /MATERIALS/US332	pKW633 - pQE32
PKW839	/MATERIALS/US321 /MATERIALS/US322	pKW640
PKW84		pJG4-5
PKW840		PK9
PKW841		pTrcHisB (Invitrogen)
PKW842		pQE-9
PKW843		pRS316
PKW844		pRS314
PKW845		EBO346(pRS316-pPHO4-GFP)
PKW846		pKW845
PKW847		pKW845
PKW848		pKW847
PKW849		
PKW85		pJG4-5
PKW850		pET23b
PKW851		pET28a
PKW852		
PKW853	/MATERIALS/US207 /MATERIALS/US357	
PKW854	/MATERIALS/US208 /MATERIALS/US328	pRSET A
PKW855	/MATERIALS/US328 /MATERIALS/US357	pRSET A
PKW856		
PKW857		
PKW858		
PKW859		
PKW86		pJG4-5
PKW860		
PKW861		
PKW862	/MATERIALS/US496 /MATERIALS/US497	pKW356 - pQE Ran
PKW863		
PKW864		
PKW865		
PKW866		
PKW867		
PKW868		
PKW869		
PKW87		pJG4-5
PKW870		
PKW871		
PKW872		
PKW873		pKW736 - Imp beta D14N S15
PKW874		
PKW875		
PKW876		
PKW877		pGEX1-1
PKW878		
PKW879		
PKW88		pJG4-5
PKW880		
PKW881		
PKW882		
PKW883	/MATERIALS/US329 /MATERIALS/US330	pKW810
PKW884		pKW625
PKW885	/MATERIALS/US459 /MATERIALS/US460	pKW625
PKW886		pKW625
PKW887		
PKW888		pGEX2T
PKW889		
PKW89		pJG4-5
PKW890		
PKW891		
PKW892		
PKW893		pGEX-2T
PKW894		pGEX-2T
PKW895		pGEX-2T
PKW896		pGEX-2T
PKW897		pGEX-2T
PKW898		pGEX-2T
PKW899		pGEX-2T
PKW9		pUC8
PKW90		pJG4-5
PKW900		pGST-GFP
PKW901		pKW708
PKW902		pKW708 - pRS304
PKW903		
PKW904		
PKW905		
PKW906		pKW350 - pRS315
PKW907		
PKW908		
PKW909		
PKW91		pJG4-5
PKW910		
PKW911		
PKW912		
PKW913		pKW862 - pQE32 RanCore
PKW914		
PKW915		pET30a
PKW916		pET30a
PKW917		pET30a
PKW918		pET30a
PKW919		pKW1 - pGEX-2T
PKW92		pJG4-5
PKW920		pKW1 - pGEX-2T
PKW921		pET30a
PKW922		pET30a
PKW923		pET30a
PKW924	/MATERIALS/US492 /MATERIALS/US493	pKW312
PKW925		pKW631
PKW926	/MATERIALS/US384 /MATERIALS/US385	pKW434 - pBS xpo1-1-GFP
PKW927		pKW350 - pRS316
PKW928	/MATERIALS/US386 /MATERIALS/US387	pKW434
PKW929		pKW350 -pRS316
PKW93		pJG4-5
PKW930	/MATERIALS/US465 /MATERIALS/US466	pKW926
PKW931		pKW349
PKW932	/MATERIALS/US463 /MATERIALS/US464	pKW928
PKW933		pKW348 - pRS314
PKW934		
PKW935		
PKW936		
PKW937		
PKW938		
PKW939	/MATERIALS/US257 /MATERIALS/US473	pKW833
PKW94		pJG4-5
PKW940	/MATERIALS/US257 /MATERIALS/US474	pKW833
PKW941	/MATERIALS/US257 /MATERIALS/US475	pKW833
PKW942		
PKW943		
PKW944		
PKW945		
PKW946		
PKW947		
PKW948		
PKW949		
PKW95		pJG4-5
PKW950		pFA6aKanMX4
PKW951		pKW913 - pQE-RanQ69Lcore
PKW952		pKW710
PKW953		pKW803
PKW954		pKW836
PKW955		pKW625
PKW956		pKW884
PKW957		pET30
PKW958	/MATERIALS/US492 /MATERIALS/US493	pKW312
PKW959	/MATERIALS/US486 /MATERIALS/US487	pKW884-pPHO5
PKW96		pJG4-5
PKW960	/MATERIALS/US492 /MATERIALS/US493	pKW312
PKW961	/MATERIALS/US102 /MATERIALS/US524	pKW958
PKW962	/MATERIALS/US102 /MATERIALS/US524	pKW960
PKW963		pKW639 - pCFP-2xR17
PKW964		pCDNA3
PKW965	/MATERIALS/US529 /MATERIALS/US530	Ref. # 961
PKW966	/MATERIALS/US529 /MATERIALS/US530	Ref. #962
PKW967		pET 30a
PKW968		Ref. #962
PKW969	/MATERIALS/US537	
PKW97		pJG4-5
PKW970		
PKW971		
PKW972	/MATERIALS/US540 /MATERIALS/US541	pKW970
PKW973	/MATERIALS/US540 /MATERIALS/US541	
PKW974		
PKW975		
PKW976		
PKW977		
PKW978		pKW195
PKW979		pET 30a
PKW98		pJG4-5
PKW980		pET 30a
PKW981		
PKW982		
PKW983		
PKW984		
PKW985		
PKW986		pKW 13
PKW987		pKW 13
PKW988		EBO640 (PHO4GFP2)
PKW989		pRS315
PKW99		pJG4-5
PKW990		pPS2040 (pKW993)
PKW991		pPS2040 (pKW993)
PKW992		pPS2040 (pKW993)
PKW993		pRS246
PKW994		pRS314
PKW995		pPS2038 (pKW992)
PKW996		pPS3036 (pKW990)
PKW997		pRS313
PKW998		pKW195
PKW999		pRS306
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/plugin.properties b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/plugin.properties
deleted file mode 100644
index 372cb45d276bdecc947c0ee5529a70f92efc14c1..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_plasmid_parents/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path =add_plasmid_parents.py
-dropbox-name = add_plasmid_parents
-incoming-dir = ${root-dir}/add_plasmid_parents
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_strain_parents/add_strain_parents.py b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_strain_parents/add_strain_parents.py
deleted file mode 100644
index 5f69d16bb9d096274d378ecef4d5526006b1b79d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_strain_parents/add_strain_parents.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#Dropbox for updating STRAIN samples with strain parents. The input is a txt file downlaoded from openBIS, containing the codes of teh strains already registered, the parents and a property called "derived from".
-#we read the property called "derived from" and add these to the list of already existing parents. This has to be done in thi way, and cannot be done when creating the strains, becuase to set strains parenst these have to be already registered in openBIS.
-#
-
-import os, re, glob, shutil,csv
-
-
-print "###################################################"
-
-
-   
-#read txt file
-def parse_incoming(tr):
-  data_rows = []
-  f = open(tr.getIncoming().getAbsolutePath(), 'rU')
-  dialect = csv.Sniffer().sniff(f.read(1024))
-  f.seek(0)
-  reader = csv.DictReader(f, dialect=dialect)
-  for row in reader:
-    data_rows.append(row)
-  f.close()
-  return data_rows  
-
-def update_sample_with_parents(tr, sample_dict):
-  """ Get the specified sample or register it if necessary """
-
-  space_code = "MATERIALS"
-  project_code = "YEASTS"
-  # The dictionary keys come from the CSV file
-  sample_id = "/MATERIALS/" + sample_dict['Code']
-
-  yeast_parent_code = sample_dict['derived from']
-  yeast_parent_code_split = re.split("and|,|\&|\+|x|/|-|\?|\(|\)|\*| X |\.|", yeast_parent_code)
-  print sample_id, yeast_parent_code_split
-  parents_code_list=[]
-  #e.split("/|-|\?|\(|\)" 
-  # insert=sample_dict['Insert']
-  # insert_split=re.split("/|-|\?|\(|\|+)", insert)
-  # comment=sample_dict['Comment']
-  # comment_split = re.split("/|-|\?|\(|\)", comment)
-
-  for name in yeast_parent_code_split:
-    if not sample_id=="/MATERIALS/KWY5055" and not sample_id=="/MATERIALS/KWY5542" and not sample_id=="/MATERIALS/KWY4260" and not sample_id =="/MATERIALS/KWY5593" and not sample_id == "/MATERIALS/KWY5594":
-#KWY5055 has very long text in derived from; KYW5542 has itself set as derived from; KWY4260 has only kwy set as parent, no number
-#KWY5593 and KWY5594 have pkw5529 has parent, which is not in the database
-        sample = tr.getSample(sample_id)
-        sample_for_update = tr.makeSampleMutable(sample)
-        if not re.search("Roy Parker", name) and not re.search("ku",name):   
-            if re.search ("2kwy5571", name): 
-                yeast_parent_id = "/MATERIALS/"+name.replace("2kwy5571","KWY5571").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)   
-            elif re.search ("kwy ", name):
-                yeast_parent_id = "/MATERIALS/"+name.replace("kwy ","KWY").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)
-            elif re.search ("Kwy ", name):
-                yeast_parent_id = "/MATERIALS/"+name.replace("Kwy ","KWY").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)
-            elif re.search ("KWY ", name): 
-                yeast_parent_id = "/MATERIALS/"+name.replace("KWY ","KWY").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)        
-            elif re.search ("pKW", name):
-                yeast_parent_id = "/MATERIALS/"+name.replace("pKW","PKW").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)               
-            elif re.search ("PKW", name):
-                yeast_parent_id = "/MATERIALS/"+name
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)   
-            elif re.search ("kwy", name):
-                yeast_parent_id = "/MATERIALS/"+name.replace("kwy","KWY").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)           
-            elif re.match ("KW\d+", name): 
-                yeast_parent_id = "/MATERIALS/"+name.replace("KW","KWY").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)             
-            elif re.search ("KWYY", name): 
-                yeast_parent_id = "/MATERIALS/"+name.replace("KWYY","KWY").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)   
-            elif re.search ("KWY2823 KWY2757", name): 
-                #name = "/MATERIALSKWY2823,KWY2757"
-                sample_for_update.setParentSampleIdentifiers(["/MATERIALS/KWY2823"]) 
-                sample_for_update.setParentSampleIdentifiers(["/MATERIALS/KWY2757"]) 
-            elif re.search ("KWy", name): 
-                yeast_parent_id = "/MATERIALS/"+name.replace("KWy","KWY").strip()
-                parents_code_list.append(yeast_parent_id)
-                print "PARENTS: ", parents_code_list
-                sample_for_update.setParentSampleIdentifiers(parents_code_list)   
-            elif re.search ("KWY", name): 
-                yeast_parent_id = "/MATERIALS/"+name.strip()
-                if not yeast_parent_id =="/MATERIALS/KWY":
-                    parents_code_list.append(yeast_parent_id)
-                    print "PARENTS: ", parents_code_list
-                    sample_for_update.setParentSampleIdentifiers(parents_code_list)  
-            else:
-                print "NO PARENTS FOUND!"                      
-
-        
-
-def register_samples_in_openbis(tr, data_rows):
-  for sample_dict in data_rows:
-    update_sample_with_parents(tr, sample_dict)
-
-
-def process(tr):
-  data_rows = parse_incoming(tr)
-  register_samples_in_openbis(tr, data_rows)
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_strain_parents/plugin.properties b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_strain_parents/plugin.properties
deleted file mode 100644
index fd7266b797f674b14a1d52a023a9f1da6e8113e1..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/add_strain_parents/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path =add_strain_parents.py
-dropbox-name = add_strain_parents
-incoming-dir = ${root-dir}/add_strain_parents
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/definitions.py b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/definitions.py
deleted file mode 120000
index d16e42850d35ea24a66064d8b534deebedc04f56..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/definitions.py
+++ /dev/null
@@ -1 +0,0 @@
-../../../as/definitions.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/definitionsVoc.py b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/definitionsVoc.py
deleted file mode 120000
index 1883a7061938c66144390382f1839653b6ca37fa..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/definitionsVoc.py
+++ /dev/null
@@ -1 +0,0 @@
-../../../as/definitionsVoc.py
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/defs/definitions.py b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/defs/definitions.py
deleted file mode 100644
index 67f4986e22a26dc0aed0b7262676b19cb2e559b2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/defs/definitions.py
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-#
-# Helper Methods
-#
-def getPropertyDefinitionByCode(definition, code):
-    for property in definition:
-        if property[0] == code:
-            return property
-    return None
-
-#
-# Scripts
-#
-commentsScriptName = "COMMENTS";
-adenosineScriptName = "ADENOSINE_COUNT"
-cytosineScriptName= "CYTOSINE_COUNT"
-gcScriptName= "GC"
-guanosineScriptName= "GUANOSINE_COUNT"
-lengthScriptName= "SEQUENCE_LENGTH"
-nucelotideScriptName= "ONUCLEOTIDE_COUNT"
-thymidineScriptName= "THYMIDINE_COUNT"
-tmScriptName= "TM"
-
-#
-# Storage 
-#
-numberOfStorageGroups = 65
-
-def getStorageGroupPropertyCodes():
-    propertyCodes = [];
-    for property in getStorageGroupDefinition():
-        propertyCodes.append(property[0]);
-    return propertyCodes;
-
-def getStorageGroupDefinition():
-    return [
-    ["STORAGE_NAME",         "Physical Storage",        "location",         DataType.CONTROLLEDVOCABULARY,      "FREEZER",            "Storage Name",       None, None, False],
-    ["STORAGE_ROW",          "Physical Storage",        "Storage Row",      DataType.INTEGER,                    None,                "Storage Row",        None, None, False],
-    ["STORAGE_COLUMN",       "Physical Storage",        "Storage Column",   DataType.INTEGER,                    None,                "Storage Column",     None, None, False],
-    ["STORAGE_BOX_NAME",     "Physical Storage",        "box label",        DataType.VARCHAR,                    None,                "Storage Box Name",   None, None, False],
-    ["STORAGE_USER",         "Physical Storage",        "frozen by",        DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",    "Storage User Id",    None, None, False],
-    ["STORAGE_BOX_POSITION", "Physical Storage",        "position",         DataType.VARCHAR,                    None,                "Storage Box Position",    None, None, False]
-];
-
-#
-# Experiment Types
-#
-experimentDefinition = [
-    ["NAME",                   "General", "Name",                     DataType.VARCHAR,             None,    "Name", None, None, False],
-    ["EXPERIMENTAL_GOALS",     "General", "Experimental goals",       DataType.MULTILINE_VARCHAR,   None,    "Goal of the experiment", None, None, False],
-    ["GRANT",                  "General", "Grant",                    DataType.VARCHAR,             None,    "grant name", None, None, False],
-    ["START_DATE",             "General", "Start Date",               DataType.TIMESTAMP,           None,    "Start Date", None, None, False],
-    ["END_DATE",               "General", "End Date",                 DataType.TIMESTAMP,           None,    "End Date", None, None, False],
-    ["EXPERIMENTAL_RESULTS",   "General", "Experimental results",     DataType.MULTILINE_VARCHAR,   None,    "Brief summary of the results obtained", None, None, False],
-    ["XMLCOMMENTS",            "Comments","Comments List",            DataType.XML,                 None,    "Several comments can be added by different users", commentsScriptName, None, False]
-];
-
-#
-# Sample Types
-#
-antibodyDefinition = [
-    ["NAME",                           "General",                "antibody ID",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_ID_NR",                 "General",                "antibody_id_nr",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIGEN",                        "General",                "antigen",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE",                        "General",                "barcode",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                  "General",                "barcode label",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_FACS_BLOCK",            "General",                "block facs",                         DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["ANTIBODY_IF_BLOCK",              "General",                "block IFF",                          DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["ANTIBODY_WB_BLOCK",              "General",                "block western",                      DataType.CONTROLLEDVOCABULARY,       "BLOCK",  "", None, None, False],
-    ["CATALOGUE_NUMBER",               "General",                "catalog id #",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CLASS",                          "General",                "class",                              DataType.CONTROLLEDVOCABULARY,       "CLASS",  "", None, None, False],
-    ["CLONE",                          "General",                "clone",                              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMPANY",                        "General",                "company",                            DataType.CONTROLLEDVOCABULARY,       "COMPANY",  "", None, None, False],
-    ["ANTIBODY_FACS_CONC",             "General",                "conc facs",                          DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_FACS",  "", None, None, False],
-    ["ANTIBODY_IF_CONC",               "General",                "conc IFF",                           DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_FACS",  "", None, None, False],
-    ["ANTIBODY_IP_CONC",               "General",                "conc ip",                            DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_IP",  "", None, None, False],
-    ["ANTIBODY_WB_CONC",               "General",                "conc western",                       DataType.CONTROLLEDVOCABULARY,       "CONCENTRATION_WESTERN",  "", None, None, False],
-    ["ANTIBODY_CONCENTRATION",         "General",                "concentration",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_CROSSREACTIVITY",       "General",                "crossreactivity",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_FACS_FIX",              "General",                "fix facs",                           DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["ANTIBODY_IF_FIX",                "General",                "fix IFF",                            DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["ANTIBODY_WB_FIX",                "General",                "fix western",                        DataType.CONTROLLEDVOCABULARY,       "FIX",  "", None, None, False],
-    ["INVESTIGATOR",                   "General",                "investigator",                       DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LABEL",                          "General",                "label",                              DataType.CONTROLLEDVOCABULARY,       "LABEL",  "", None, None, False],
-    ["LOTNUMBER",                      "General",                "lotnumber",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFIED_BY",                    "General",                "modified by",                        DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MONO_POLYCLONAL",                "General",                "mono/polyclonal",                    DataType.CONTROLLEDVOCABULARY,       "MONO-POLYCLONAL",  "", None, None, False],
-    ["ANTIBODY_FACS_NOTES",            "General",                "notes FACS",                         DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_IF_NOTES",              "General",                "notes IFF",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_IP_NOTES",              "General",                "notes IP",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ANTIBODY_WB_NOTES",              "General",                "notes western",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SERIAL_NUMBER",                  "General",                "serial number",                      DataType.INTEGER,                    None,  "", None, None, False],
-    ["ANTIGEN_SIZE",                   "General",                "size",                               DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SOURCE",                         "General",                "source",                             DataType.CONTROLLEDVOCABULARY,       "SOURCE",  "", None, None, False],
-    ["CREATION_DATE",                  "General",                "creation date",                      DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFICATION_DATE",              "General",                "modification date",                  DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["FROZEN",                         "General",                "frozen",                             DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["BOX",                            "Storage",                "box",                                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["RACK",                           "Storage",                "rack",                               DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                   "Reference",              "reference",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                       "Comments",               "info",                               DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-cellDefinition = [
-    ["CO2",                             "General",                "%CO2",                                DataType.CONTROLLEDVOCABULARY,       "CO2",  "", None, None, False],
-    ["ATCC_NUM",                        "General",                "ATCC No.",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE",                         "General",                "barcode",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                "barcode label",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_NR",                      "General",                "cell_id_nr",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_NR_COPY",                 "General",                "cell_id_nr Copy",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["NAME",                            "General",                "cell ID",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CELL_ID_COPY",                    "General",                "cell ID Copy",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CLONE",                           "General",                "clone #",                             DataType.INTEGER,                    None,  "", None, None, False],
-    ["COMPARE_FIELD",                   "General",                "compare field",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC1",                           "General",                "conc.1",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT1",                      "General",                "concentration unit 1",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC2",                           "General",                "conc.2",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT2",                      "General",                "concentration unit 2",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC3",                           "General",                "conc.3",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT3",                      "General",                "concentration unit 3",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC4",                           "General",                "conc.4",                              DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT4",                      "General",                "concentration unit 4",                DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CREATION_DATE",                   "General",                "creation date",                       DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["DATE",                            "General",                "date",                                DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["FROZEN",                          "General",                "frozen",                              DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["GROWTH_TEMPERATURE",              "General",                "growth temperature",                  DataType.CONTROLLEDVOCABULARY,       "GROWTH_TEMPERATURE",  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                "investigator",                        DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LINE_NAME",                       "General",                "line name",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MEDIUM",                          "General",                "medium",                              DataType.CONTROLLEDVOCABULARY,       "MEDIUM",  "", None, None, False],
-    ["MEDIUM_SPECIALS",                 "General",                "medium specials",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                "modification date",                   DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                "modified by",                         DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MYCOPLASM_TESTED",                "General",                "mycoplasm_tested",                    DataType.BOOLEAN,                    None,  "", None, None, False],
-    ["OBTAINED_FROM",                   "General",                "obtained from",                       DataType.CONTROLLEDVOCABULARY,       "CELL_OBTAINED_FROM",  "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                "page number",                         DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PARENTAL_CELL",                   "General",                "parental cell",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PASSAGE",                         "General",                "passage",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PERS_CELL_NUMBER",                "General",                "PersCellNumber",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID1",                     "General",                "plasmid ID 1",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID2",                     "General",                "plasmid ID 2",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION_PLASMID1",              "General",                "sel.1",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SELECTION_PLASMID2",              "General",                "sel.2",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SELECTION_PLASMID3",              "General",                "sel.3",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],    
-    ["SELECTION_PLASMID4",              "General",                "sel.4",                               DataType.CONTROLLEDVOCABULARY,       "SELECTION",  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                "serial number",                       DataType.INTEGER,                    None,  "", None, None, False],
-    ["SPECIES",                         "General",                "species",                             DataType.CONTROLLEDVOCABULARY,       "CELL_SPECIES",  "", None, None, False],
-    ["VIRUS_ID1",                       "General",                "virus ID 1",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["VIRUS_ID2",                       "General",                "virus ID 2",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "Reference",              "reference",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                        "Comments",               "info",                                DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-strainDefinition = [
-    ["CO2",                             "General",                  "%CO2",                             DataType.CONTROLLEDVOCABULARY,       "CO2",  "", None, None, False],
-    ["BACKGROUND",                      "General",                  "background",                       DataType.CONTROLLEDVOCABULARY,       "STRAIN_BACKGROUND",  "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CIR",                             "General",                  "cir",                              DataType.CONTROLLEDVOCABULARY,       "CIR",  "", None, None, False],
-    ["CONC_INDUCER1",                   "General",                  "conc. inducer 1",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC_INDUCER2",                   "General",                  "conc. inducer 2",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC_INDUCER3",                   "General",                  "conc. inducer 3",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC1",                           "General",                  "conc.1",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT1",                      "General",                  "concentration unit 1",             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["CONC2",                           "General",                  "conc.2",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT2",                      "General",                  "concentration unit 2",             DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CONC3",                           "General",                  "conc.3",                           DataType.REAL,                       None,  "", None, None, False],
-    ["CONC_UNIT3",                      "General",                  "concentration unit 3",             DataType.CONTROLLEDVOCABULARY,       "CONC_UNITS",  "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["DERIVATION",                      "General",                  "derivation",                       DataType.CONTROLLEDVOCABULARY,       "DERIVATION",  "", None, None, False],
-    ["EXPRESSED_PROTEIN1",              "General",                  "expressed protein 1",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["EXPRESSED_PROTEIN2",              "General",                  "expressed protein 2",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["EXPRESSED_PROTEIN3",              "General",                  "expressed protein 3",              DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FREE_PLASMID",                    "General",                  "freeplasmid",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FREEZEDATE",                      "General",                  "freezedate",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["GAL",                             "General",                  "gal",                              DataType.CONTROLLEDVOCABULARY,       "GAL",  "", None, None, False],
-    ["GENE_EXPRESSION1",                "General",                  "gene expression 1",                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["GENE_EXPRESSION2",                "General",                  "gene expression 2",                DataType.VARCHAR,                    None,  "", None, None, False],
-    ["GROWTH_TEMPERATURE",              "General",                  "growth temperature",               DataType.CONTROLLEDVOCABULARY,       "GROWTH_TEMPERATURE",  "", None, None, False],
-    ["INDUCER1",                        "General",                  "inducer 1",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INDUCER2",                        "General",                  "inducer 2",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INDUCER3",                        "General",                  "inducer 3",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["COMMENTS",                        "General",                  "info",                             DataType.VARCHAR,                    None,  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["MARKERS",                         "General",                  "markers",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MAT",                             "General",                  "mat",                              DataType.CONTROLLEDVOCABULARY,       "MAT",  "", None, None, False],
-    ["MEDIUM",                          "General",                  "medium",                           DataType.CONTROLLEDVOCABULARY,       "MEDIUM",  "", None, None, False],
-    ["MEDIUM_SPECIALS",                 "General",                  "medium specials",                  DataType.VARCHAR,                    None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.TIMESTAMP,                  None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,       "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["NUMBER",                          "General",                  "number",                           DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_OBTAINED_FROM",            "General",                  "obtained from",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["ORF",                             "General",                  "orf",                              DataType.VARCHAR,                    None,  "", None, None, False],    
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PARENTAL_CELL",                   "General",                  "parental cell",                    DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PASSAGE",                         "General",                  "passage",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PERSYEASTNUMBER",                 "General",                  "persyeastnumber",                  DataType.INTEGER,                    None,  "", None, None, False],
-    ["PETERYEASTNUMBER",                "General",                  "peteryeastnumber",                 DataType.INTEGER,                    None,  "", None, None, False],
-    ["PLASMID_ID1",                     "General",                  "plasmid ID 1",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID2",                     "General",                  "plasmid ID 2",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PLASMID_ID3",                     "General",                  "plasmid ID 3",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER1",                       "General",                  "promoter 1",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER2",                       "General",                  "promoter 2",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PROMOTER3",                       "General",                  "promoter 3",                       DataType.VARCHAR,                    None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "General",                  "reference",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION1",                      "General",                  "sel.1",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION2",                      "General",                  "sel.2",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION3",                      "General",                  "sel.3",                            DataType.VARCHAR,                    None,  "", None, None, False],
-    ["SELECTION",                       "General",                  "selection",                        DataType.CONTROLLEDVOCABULARY,       "SELECTION_YEAST",  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.INTEGER,                    None,  "", None, None, False],
-    ["STRAIN_SOURCE",                   "General",                  "source",                           DataType.CONTROLLEDVOCABULARY,       "STRAIN_SOURCE",  "", None, None, False],
-    ["SPECIES",                         "General",                  "species",                          DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_ID_NR",                    "General",                  "strain_id_nr",                     DataType.VARCHAR,                    None,  "", None, None, False],
-    ["NAME",                            "General",                  "strain ID",                        DataType.VARCHAR,                    None,  "", None, None, False],
-    ["STRAIN_NAME",                     "General",                  "strain name",                      DataType.VARCHAR,                    None,  "", None, None, False]
-];
-
-oligoDefinition = [
-    ["AMOUNT",                          "General",                  "amount",                           DataType.REAL,                      None, "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                   None, "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                   None, "", None, None, False],
-    ["OLIGO_COMPANY",                   "General",                  "company",                          DataType.CONTROLLEDVOCABULARY,      "OLIGO_COMPANY", "", None, None, False],
-    ["CONCENTRATION",                   "General",                  "concentration",                    DataType.REAL,                      None, "", None, None, False],
-    ["CONCENTRATION_UNIT",              "General",                  "concentration unit",               DataType.CONTROLLEDVOCABULARY,      "CONC_UNITS", "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                   None, "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["GENE_LOCUS",                      "General",                  "gene locus",                       DataType.VARCHAR,                   None, "", None, None, False],
-    ["GRADE",                           "General",                  "grade",                            DataType.CONTROLLEDVOCABULARY,      "OLIGO_GRADE", "", None, None, False],
-    ["COMMENTS",                        "General",                  "Info",                             DataType.VARCHAR,                   None, "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS", "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.TIMESTAMP,                 None, "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS", "", None, None, False],
-    ["OD",                              "General",                  "od",                               DataType.INTEGER,                   None, "", None, None, False],
-    ["NAME",                            "General",                  "oligo ID",                         DataType.INTEGER,                   None, "", None, None, False],
-    ["OLIGO_ID_NR",                     "General",                  "oligo_id_nr",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["ORDER_DATE",                      "General",                  "order date",                       DataType.VARCHAR,                   None, "", None, None, False],
-    ["OLIGO_ORGANISM",                  "General",                  "organism",                         DataType.CONTROLLEDVOCABULARY,      "OLIGO_ORGANISM", "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["PRIMER_PARTNER",                  "General",                  "primer partner",                   DataType.VARCHAR,                   None, "", None, None, False],
-    ["PRIMER_POSITION",                 "General",                  "primer position",                  DataType.CONTROLLEDVOCABULARY,      "PRIMER_POSITION", "", None, None, False],
-    ["PUBLISHED_IN",                    "General",                  "PublishedIn",                      DataType.VARCHAR,                   None, "", None, None, False],
-    ["RESTRICTION_SITE",                "General",                  "restriction site",                 DataType.CONTROLLEDVOCABULARY,      "RESTRICTION", "", None, None, False],
-    ["SEQUENCE",                        "General",                  "sequence",                         DataType.VARCHAR,                   None, "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.VARCHAR,                   None, "", None, None, False],
-    ["USAGE",                           "General",                  "usage",                            DataType.CONTROLLEDVOCABULARY,      "OLIGO_USAGE", "", None, None, False],
-    ["ADENOSINE",                       "Calculated fields",        "adenosine",                        DataType.INTEGER,                   None, "", adenosineScriptName, None, False],
-    ["CYTOSINE",                        "Calculated fields",        "cytosine",                         DataType.INTEGER,                   None, "", cytosineScriptName, None, False],
-    ["GUANOSINE",                       "Calculated fields",        "guanosine",                        DataType.INTEGER,                   None, "", guanosineScriptName, None, False],
-    ["THYMIDINE",                       "Calculated fields",        "thymidine",                        DataType.INTEGER,                   None, "", thymidineScriptName, None, False],
-    ["LENGTH",                          "Calculated fields",        "length",                           DataType.INTEGER,                   None, "", lengthScriptName, None, False],
-    ["GC",                              "Calculated fields",        "gc",                               DataType.REAL,                      None, "", gcScriptName, None, False],
-    ["TM",                              "Calculated fields",        "tm",                               DataType.REAL,                      None, "", tmScriptName, None, False],
-    ["O_NUCLEOTIDE",                    "Calculated fields",        "O nucleotide",                     DataType.INTEGER,                   None, "", nucelotideScriptName, None, False]
-];
-
-plasmidDefinition = [
-    ["BACKBONE",                        "General",                  "backbone",                         DataType.CONTROLLEDVOCABULARY,      "BACKBONE",  "", None, None, False],
-    ["BACKUP_STORAGE",                  "General",                  "backup storage",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BACTERIAL_HOST",                  "General",                  "bacterial host",                   DataType.CONTROLLEDVOCABULARY,      "BACTERIAL_HOST",  "", None, None, False],
-    ["BARCODE",                         "General",                  "barcode",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BARCODE_LABEL",                   "General",                  "barcode label",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["BIOSAFETY_LEVEL",                 "General",                  "biosafety level",                  DataType.CONTROLLEDVOCABULARY,      "BIOSAFETY_LEVEL",  "", None, None, False],
-    ["BOXNR",                           "General",                  "boxNr",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CONCENTRATION_UNIT",              "General",                  "concentration unit",               DataType.CONTROLLEDVOCABULARY,      "CONC_UNITS",  "", None, None, False],
-    ["CONSTRUCTION_METHOD",             "General",                  "construction method",              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CREATION_DATE",                   "General",                  "creation date",                    DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["CTERMTAG",                        "General",                  "Ctermtag",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["DATE",                            "General",                  "date",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["DATE_OF_CONSTRUCTION",            "General",                  "date of construction",             DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["DERIVATIVE_OF",                   "General",                  "Derivative of",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ECOLI_STRAIN",                    "General",                  "E.coli strain",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXCISE_INSERT",                   "General",                  "excise insert",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXCISE_INSERT2",                  "General",                  "excise insert 2",                  DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FREEZEDATE",                      "General",                  "freezedate",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FROZEN",                          "General",                  "frozen",                           DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["FUNCTIONAL_ELEMENTS_INSERT",      "General",                  "functional elements insert",       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["HYPERCARD_FILE",                  "General",                  "hypercard file",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INFO",                            "General",                  "info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INSERT",                          "General",                  "insert",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INSERTION_SITE",                  "General",                  "insertion site",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["LINEARIZE",                       "General",                  "linearize",                        DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MARKER",                          "General",                  "Marker",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "modification date",                DataType.VARCHAR,                   None,  "", None, None, False],
-    ["MODIFIED_BY",                     "General",                  "modified by",                      DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["NAME_OF_PARENTAL_CLONE",          "General",                  "name of parental clone",           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NAME_OF_VECTOR",                  "General",                  "name of vector",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NTERMTAG",                        "General",                  "Ntermtag",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NUCLEOTIDE_SEQUENCE",             "General",                  "nucleotide sequence",              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OLIGOS_USED",                     "General",                  "oligos used",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ORGANISM",                        "General",                  "organism",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ORIGIN_OF_REPLICATION",           "General",                  "origin of replication",            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OTHER_MARKER",                    "General",                  "other marker",                     DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PAGE_NUMBER",                     "General",                  "page number",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PERSPLASMIDNUM",                  "General",                  "persPlasmidnum",                   DataType.REAL,                      None,  "", None, None, False],
-    ["PETERPLASMIDNUM",                 "General",                  "PeterPlasmidNum",                  DataType.INTEGER,                   None,  "", None, None, False],
-    ["NAME",                            "General",                  "plasmid ID",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMID_ID_NR",                   "General",                  "plasmid_id_nr",                    DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMIDNAME",                     "General",                  "plasmidname",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PRIMERS",                         "General",                  "primers",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PROMOTER",                        "General",                  "promoter",                         DataType.CONTROLLEDVOCABULARY,      "PROMOTER",  "", None, None, False],
-    ["SELECTION_IN_BACTERIA",           "General",                  "selection in bacteria",            DataType.CONTROLLEDVOCABULARY,      "SELECTION_IN_BACTERIA",  "", None, None, False],
-    ["SELECTION_IN_EUKARYOTES",         "General",                  "selection in eukaryotes",          DataType.CONTROLLEDVOCABULARY,      "SELECTION_IN_EUKARYOTES",  "", None, None, False],
-    ["SEQUENCE_FILE_NAME",              "General",                  "sequence file name",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SEQUENCING_DATE",                 "General",                  "sequencing date",                  DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["SERIAL_NUMBER",                   "General",                  "serial number",                    DataType.INTEGER,                   None,  "", None, None, False],
-    ["SHELF",                           "General",                  "shelf",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIZE_INSERT",                     "General",                  "size insert",                      DataType.REAL,                      None,  "", None, None, False],
-    ["SIZE_OF_INSERT",                  "General",                  "size of insert",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIZE_VECTOR",                     "General",                  "size vector",                      DataType.REAL,                      None,  "", None, None, False],
-    ["PLASMID_SOURCE",                  "General",                  "source",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PLASMID_SPECIES",                 "General",                  "species",                          DataType.CONTROLLEDVOCABULARY,      "PLASMID_ORGANISM",  "", None, None, False],
-    #["TUBES",                           "General",                 "TUBES",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["URL",                             "Reference",                "url",                              DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PUBLISHED_IN",                    "Reference",                "published in",                     DataType.VARCHAR,                   None,  "", None, None, False]
-];
-
-chemicalDefinition = [
-    ["ARTICLE",                         "General",                  "Article",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["COMPANY",                         "General",                  "Company",                          DataType.CONTROLLEDVOCABULARY,      "COMPANY",  "", None, None, False],
-    ["ARTICLE_NUM",                     "General",                  "Article Number",                   DataType.VARCHAR,                   None,  "", None, None, False],
-    ["RECORD_NUMBER",                   "General",                  "RecordNumber",                     DataType.VARCHAR,                   None,  "", None, None, False],
-    ["LOCATION",                        "Location",                  "Location",                         DataType.VARCHAR,                   None,  "", None, None, False]   
-];
-
-siRNADefinition = [
-    ["INVESTIGATOR",                    "General",                  "investigator",                     DataType.CONTROLLEDVOCABULARY,      "ALL_LAB_MEMBERS",  "", None, None, False],
-    ["GENE_LOCUS",                      "General",                  "gene locus",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EXON_OR_THREE_PRIME",             "General",                  "exon or three prime",              DataType.CONTROLLEDVOCABULARY,      "EXON_OR_THREE_PRIME",  "", None, None, False],
-    ["EXON",                            "General",                  "exon #",                           DataType.INTEGER,                   None,  "", None, None, False],
-    ["3_PRIME_POSITION",                "General",                  "3' position",                      DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_SPECIES",                   "General",                  "species",                          DataType.CONTROLLEDVOCABULARY,      "SIRNA_SPECIES",  "", None, None, False],
-    ["SEQUENCE",                        "General",                  "SEQUENCE",                         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_COMPANY",                   "General",                  "Company",                          DataType.CONTROLLEDVOCABULARY,      "SIRNA_COMPANY",  "", None, None, False],
-    ["STOCK_CONCENTRATION",             "General",                  "Stock concentration",              DataType.REAL,                      None,  "", None, None, False],
-    ["WORKING_CONCENTRATION",           "General",                  "Working concentration",            DataType.REAL,                      None,  "", None, None, False],
-    ["EFFICIENCY",                      "General",                  "Efficiency",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_QPCR",                 "General",                  "Efficiency_qPCR",                  DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_WESTERN",              "General",                  "Efficiency_Western",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["EFFICIENCY_OTHER",                "General",                  "Efficiency_other",                 DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OFF_TARGET_EFFECTS",              "General",                  "Off target effects",               DataType.VARCHAR,                   None,  "", None, None, False],
-    ["INFO",                            "General",                  "Info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SPECIFIC_SPLICE_VARIANT",         "General",                  "Specific splice variant",          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["TRANSFECTION_AGENT",              "General",                  "Transfection agent",               DataType.CONTROLLEDVOCABULARY,      "TRANSFECTION_AGENT",  "", None, None, False],
-    ["LIBRARY",                         "General",                  "Library",                          DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CHARACTERIZED_BY_COMPANY",        "General",                  "Characterized by company",         DataType.VARCHAR,                   None,  "", None, None, False],
-    ["NUMBERINPOOL",                    "General",                  "NumberINpool",                     DataType.INTEGER,                   None,  "", None, None, False],
-    ["TEST",                            "General",                  "Test",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["CHEMICAL_MODIFICATION",           "General",                  "Chemical modification",            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["OLIGO_NAME",                      "General",                  "Oligo name",                       DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_OLIGONUMBER",               "General",                  "siRNA_OligoNumber",                DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SIRNA_FREEZER_LOCATION",          "General",                  "Freezer Location",                 DataType.CONTROLLEDVOCABULARY,      "SIRNA_FREEZER_LOCATION",  "", None, None, False],
-    ["DRAWER",                          "General",                  "Drawer",                           DataType.VARCHAR,                   None,  "", None, None, False],
-    ["PUBLISHED",                       "Reference",                "Published",                        DataType.VARCHAR,                   None,  "", None, None, False]
-];
-
-#
-# Data Set Types
-#
-documentDefinition = [
-    ["CREATION_DATE",                   "General",                  "date created",                     DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["MODIFICATION_DATE",               "General",                  "date modified",                    DataType.TIMESTAMP,                 None,  "", None, None, False],
-    ["INFO",                            "General",                  "info",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["ID_NR",                           "General",                  "id_nr",                            DataType.VARCHAR,                   None,  "", None, None, False],
-    ["FILE",                            "General",                  "file",                             DataType.VARCHAR,                   None,  "", None, None, False],
-    ["SERIAL",                          "General",                  "serial",                           DataType.INTEGER,                   None,  "", None, None, False]
- 
-];
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/defs/definitionsVoc.py b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/defs/definitionsVoc.py
deleted file mode 100644
index 83fc17f19b34ba3d65064d86fb5089432afbf91c..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/defs/definitionsVoc.py
+++ /dev/null
@@ -1,846 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#
-# Helper Methods
-#
-def getVocabularyTermCodeForVocabularyAndTermLabel(vocabularyCode, termLabel):
-    vocabulary = vocabularyDefinitions[vocabularyCode]
-    for term in vocabulary:
-        if term[1] == termLabel:
-            #print repr("TERM NOT FOUND IN VOCABULARY LIST: " + unicode(vocabularyCode) + " : '" + unicode(termLabel) + "'")
-            return term[0]
-    return None
-
-# "VOCABULARY_CODE" : { "TERM_CODE" : "OBJECT" }
-createdVocabularyTerms = { }
-
-def printCreatedTerms():
-    print "--- Created Vocabulary Terms Report"
-    for vocabularyCode in createdVocabularyTerms:
-        print "Vocabulary [" + vocabularyCode + "]"
-        for vocabularyTermCode in createdVocabularyTerms[vocabularyCode]:
-            print "Term [" + vocabularyTermCode + "] Label: [" + repr(createdVocabularyTerms[vocabularyCode][vocabularyTermCode].getLabel()) + "]"
-    print "---"
-
-def getCreatedTerm(vocabularyCode, termCode):
-    if vocabularyCode in createdVocabularyTerms:
-        if termCode in createdVocabularyTerms[vocabularyCode]:
-            return createdVocabularyTerms[vocabularyCode][termCode]
-    return None
-
-def addCreatedTerm(vocabularyCode, termCode, object):
-    if vocabularyCode not in createdVocabularyTerms:
-        createdVocabularyTerms[vocabularyCode] = {}
-    createdVocabularyTerms[vocabularyCode][termCode] = object
-    
-def createVocabularyTerm(tr, vocabularyCode, termCode, termLabel):
-    createdTerm = getCreatedTerm(vocabularyCode, termCode)
-    if createdTerm is None:
-        vocabulary = tr.getVocabularyForUpdate(vocabularyCode)
-        
-        for term in vocabulary.getTerms():
-            if term.getCode() == termCode:
-                createdTerm = term
-        
-        if createdTerm is None:
-            createdTerm = tr.createNewVocabularyTerm()
-            createdTerm.setCode(termCode)
-            createdTerm.setLabel(termLabel)
-            createdTerm.setOrdinal(vocabulary.getTerms().size())
-            vocabulary.addTerm(createdTerm)
-            addCreatedTerm(vocabularyCode, termCode, createdTerm)
-    return createdTerm
-
-#
-# Vocabularies
-#
-
-vocabularyDefinitions = {
-                          "ALL_LAB_MEMBERS" : [
-                                        ["ANNA_DEPLAZES",   "Anna Deplazes"],
-                                        ["ANNE-CHRISTINE_BUTTY",   "Anne-Christine Butty"],
-                                        ["BRIAN_LUKE",   "Brian Luke"],
-                                        ["CAROLINE_ZBINDEN",   "Caroline Zbinden"],
-                                        ["CELINE_LAFOURCADE",   "Celine Lafourcade"],
-                                        ["CHRISTINE_RUPP",   "Christine Rupp"],
-                                        ["CLAUDINE_KRAFT",   "Claudine Kraft"],
-                                        ["EDYTA_SIERGIEJUK",   "Edyta Siergiejuk"],
-                                        ["FABIAN_HERZOG",   "Fabian Herzog"],
-                                        ["FABIAN_RUDOLF",   "Fabian Rudolf"],
-                                        ["FRANK_VAN_DROGEN",   "Frank Van Drogen"],
-                                        ["GERDA_JORRITSMA",   "Gerda Jorritsma"],
-                                        ["GWEN_RABUT",   "Gw\xe9nael Rabut"],
-                                        ["INGRID_STOFFEL-STUDER",   "Ingrid Stoffel-Studer"],
-                                        ["IRAM_ZAIDI",   "Iram Zaidi"],
-                                        ["IZABELA_SUMARA",   "Izabela Sumara"],
-                                        ["LIONEL_PINTARD",   "Lionel Pintard"],
-                                        ["MALIKAJAQUENOUD",   "MalikaJaquenoud"],
-                                        ["MARC_SOHRMANN",   "Marc Sohrmann"],
-                                        ["MARIE-LYN_HECHT",   "Marie-Lyn Hecht"],
-                                        ["MARIE-PIERRE_GULLI",   "Marie-Pierre Gulli"],
-                                        ["MATTHIAS_PETER",   "Matthias Peter"],
-                                        ["MICHAEL_OLMA",   "Michael Olma"],
-                                        ["MICHAEL_SCHNEIDER",   "Michael Schneider"],
-                                        ["MICHELE_KNAUS",   "Michele Knaus"],
-                                        ["MONIKA_GERSBACH",   "Monika Gersbach"],
-                                        ["NATHALIE_MEYER-SCHALLER",   "Nathalie Meyer-Schaller"],
-                                        ["NATHALIE_PERRINJAQUET",   "Nathalie Perrinjaquet"],
-                                        ["NICOLAS_DARD",   "Nicolas Dard"],
-                                        ["NICOLAS_PAGE",   "Nicolas Page"],
-                                        ["PATRICK_PEDRIOLI",   "Patrick Pedrioli"],
-                                        ["PHILIPPE_WIGET",   "Philippe Wiget"],
-                                        ["PIERRE_MAILLARD",   "Pierre Maillard"],
-                                        ["REINHARD_DECHANT",   "Reinhard Dechant"],
-                                        ["SANDER_SPRINGER",   "Sander Springer"],
-                                        ["SARAH_GLASER",   "Sarah Glaser"],
-                                        ["SARAH_MAERKI",   "Sarah  M\xe4rki"],
-                                        ["SEBASTIAN_LEIDEL",   "Sebastian Leidel"],
-                                        ["SERGE_PELET",   "Serge Pelet"],
-                                        ["STEFAN_MUELLER",   "Stefan M�ller"],
-                                        ["TANIA_ROBERTS",   "Tania Roberts"],
-                                        ["THIMO_KURZ",   "Thimo Kurz"],
-                                        ["TOBIAS_BRAUN",   "Tobias Braun"],
-                                        ["VANESSA_REZGUI",   "Vanessa Rezgui"],
-                                        ["WOJCIECH_PIWKO",   "Wojciech Piwko"],
-                                        ["YUKIKO_SHIMADA",   "Yukiko Shimada"],
-                                        ["YVONNE_GLOOR",   "Yvonne Gloor"],
-                                        ["JOCHEN_BECK",   "Jochen Beck"],
-                                        ["MONIKA_KIJANSKA",   "Monika Kijanska"],
-                                        ["ANGIE_RAGHEB",   "Angie Ragheb"],
-                                        ["ANNE_PACQUELET",   "Anne Pacquelet"],
-                                        ["BJORN_HEGEMANN",   "Bj\xf6rn Hegemann"],
-                                        ["JANNY_TILMA",   "Janny Tilma"],
-                                        ["THIBAULT_COURTHEOUX",   "Thibault Courtheoux"],
-                                        ["SAMUEL_GILBERTO",   "Samuel Gilberto"],
-                                        ["REMY_BUSER",   "Remy Buser"],
-                                        ["RADOSLAV_ENCHEV",   "Radoslav Enchev"],
-                                        ["MICHAELA_HUBNER",   "Michaela Hubner"],
-                                        ["MIA_LI",   "Mia Li"],
-                                        ["JULIEN_MOUYSSET",   "Julien Mouysset"]
-                                    ],
-                           "LAB_MEMBERS_INITIALS" : [
-                                        ["AD", "AD"],
-                                        ["ACB", "ACB"],
-                                        ["BL", "BL"],
-                                        ["CZ", "CZ"],
-                                        ["CL", "CL"],
-                                        ["CR", "CR"],
-                                        ["CK", "CK"],
-                                        ["ES", "ES"],
-                                        ["FH", "FH"],
-                                        ["FR", "FR"],
-                                        ["FD", "FD"],
-                                        ["GJ", "GJ"],
-                                        ["GR", "GR"],
-                                        ["ISS", "ISS"],
-                                        ["IZ", "IZ"],
-                                        ["IS", "IS"],
-                                        ["LP", "LP"],
-                                        ["MJ", "MJ"],
-                                        ["MSO", "MSo"],
-                                        ["MH", "MH"],
-                                        ["MG", "MG"],
-                                        ["MP", "MP"],
-                                        ["MO", "MO"],
-                                        ["MSC", "MSc"],
-                                        ["MK", "MK"],
-                                        ["MG", "MG"],
-                                        ["NS", "NS"],
-                                        ["NPE", "NPe"],
-                                        ["ND", "ND"],
-                                        ["NPA", "NPa"],
-                                        ["PP", "PP"],
-                                        ["PW", "PW"],
-                                        ["PM", "PM"],
-                                        ["RD", "RD"],
-                                        ["SS", "SS"],
-                                        ["SG", "SG"],
-                                        ["SMA", "SMa"],
-                                        ["SL", "SL"],
-                                        ["SP", "SP"],
-                                        ["SM", "SM"],
-                                        ["TR", "TR"],
-                                        ["TK", "TK"],
-                                        ["TB", "TB"],
-                                        ["VR", "VR"],
-                                        ["WP", "WP"],
-                                        ["YS", "YS"],
-                                        ["YG", "YG"],
-                                        ["JB", "JB"],
-                                        ["MKI", "MKi"]
-                                    ],
-                            "BLOCK" : [
-                                       ["1BSA_01TRITON-X100",  "1% BSA; 0.1% Triton-X100"],
-                                    ],
-                            "CLASS" : [
-                                ["IGM", "IgM"],
-                                ["IGG1",    "IgG1"],
-                                ["IGG2",    "IgG2"]
-                                    ],
-                            "COMPANY" : [
-                                    ["ABCAM", "abcam"],
-                                    ["CELL_SIGNALING", "cell signaling"],
-                                    ["STRATAGEN", "stratagene"],
-                                    ["CLONTECH", "clontech"],
-                                    ["UBI", "ubi"],
-                                    ["SOUTHERN_BIOTECH", "southern biotech"],
-                                    ["PIERCE", "pierce"],
-                                    ["PHARMIGEN", "pharmingen"],
-                                    ["MOLECULAR_PROBES", "molecular probes"],
-                                    ["PHARMACIA", "pharmacia"],
-                                    ["BIORAD", "biorad"],
-                                    ["EUROGENETIC", "eurogentec"],
-                                    ["HOMEMADE", "homemade"],
-                                    ["BD_BIOSCIENCE", "BD bioscience"],
-                                    ["OBTAINED_FROM", "obtained from "],
-                                    ["ZYMED", "Zymed"],
-                                    ["UNKNOWN", "Unknown"],
-                                    ["SANTA_CRUZ", "Santa Cruz"],
-                                    ["BIOLEGEND", "Biolegend"],
-                                    ["BETHYL", "Bethyl"],
-                                    ["UPSTATE", "Upstate"],
-                                    ["ROCKLAND", "Rockland"],
-                                    ["NOVUS_BIOLOGICALS", "Novus Biologicals"],
-                                    ["CHEMICON_INTERNATIONAL", "Chemicon International"],
-                                    ["SIGMA", "Sigma"],
-                                    ["ALPHA_DIAGNOSTIC_INTERNATIONAL", "Alpha Diagnostic International"],
-                                    ["MILLIPORE", "Millipore"],
-                                    ["ACTIVE_MOTIF", "Active motif"],
-                                    ["NEB", "NEB"],
-                                    ["NEOMARKERS", "Neomarkers"],
-                                    ["LUBIOSCIENCE", "LubioScience"],
-                                    ["EBIOSCIENCE", "eBioscience"],
-                                    ["INVITROGEN", "Invitrogen"],
-                                    ["STRESSGEN", "Stressgen"],
-                                    ["COVANCE", "Covance"],
-                                    ["ENZO_LIFE_SCIENCES", "Enzo Life Sciences"],
-                                    ["CALBIOCHEM", "Calbiochem"],
-                                    ["ROCHE", "Roche"],
-                                    ["CYTOSKELETON", "Cytoskeleton"],
-                                    ["OPEN_BIOSYSTEMS", "Open Biosystems"],
-                                    ["BD_TRANSDUCTION", "BD Transduction"],
-                                    ["ATLAS_ANTIBODIES_AB", "Atlas Antibodies AB"],
-                                    ["GENENTECH", "Genentech"],
-                                    ["TRANSDUCTION_LABS", "Transduction Labs"],
-                                    ["ANTIBODIES_INCORPORATED", "Antibodies Incorporated"],
-                                    ["BABCO", "BAbCO"],
-                                    ["ERICH_NIGG_LAB_BASEL", "Erich Nigg lab (Basel)"],
-                                    ["FRANCIS_BARR", "Francis Barr"],
-                                    ["AVIVA_SYSTEMS_BIOLOGY", "Aviva Systems Biology"],
-                                    ["LUCERNACHEM", "LucernaChem"],
-                                    ["LI-COR", "LI-COR"],
-                                    ["ABGENT", "Abgent"],
-                                    ["CHROMOTEK", "Chromotek"],
-                                    ["ABNOVA", "Abnova"],
-                                    ["UNKNOWN", "Unknown"],
-                                    ["ABSEA", "Absea"],
-                                    ["GE_HEALTHCARE", "GE Healthcare"],
-                                    ["GRAMSCH_LABORATORIES", "Gramsch Laboratories"],
-                                    ["ADIPOGEN", "Adipogen"],
-                                    ["COSMO_BIO_CO", "Cosmo bio co."],
-                                    ["BECKTON_DICKINSON", "Beckton Dickinson"],
-                                    ["BIOTIUM", "Biotium"]
-                                    ],
-                            "CONCENTRATION_FACS" : [
-                                            ["1_TO_10", "1 : 10"],
-                                            ["1_TO_20", "1 : 20"],
-                                            ["1_TO_30", "1 : 30"],
-                                            ["1_TO_40", "1 : 40"],
-                                            ["1_TO_50", "1 : 50"],
-                                            ["1_TO_100", "1 : 100"],
-                                            ["1_TO_200", "1 : 200"],
-                                            ["1_TO_500", "1 : 500"],
-                                            ["1_TO_1000", "1 : 1000"],
-                                            ["1_TO_2000", "1 : 2000"],
-                                            ["1_TO_3000", "1 : 3000"],
-                                            ["NOT_TESTED", "not tested"],
-                                            ["NOT_WORKING", "not working"]
-                                    ],
-                            "CONCENTRATION_IP" : [
-                                            ["1UL", "1 �l"],
-                                            ["5UL", "5 �l"],
-                                            ["10UL", "10 �l"],
-                                            ["15UL", "15 �l"],
-                                            ["20UL", "20 �l"],
-                                            ["NOT_TESTED", "not tested"],
-                                            ["NOT_WORKING", "not working"]
-                                    ],
-                            "CONCENTRATION_WESTERN" : [
-                                                ["1_TO_100", "1 : 100"],
-                                                ["1_TO_500", "1 : 500"],
-                                                ["1_TO_1000", "1 : 1000"],
-                                                ["1_TO_2000", "1 : 2000"],
-                                                ["1_TO_3000", "1 : 3000"],
-                                                ["1_TO_5000", "1 : 5000"],
-                                                ["1_TO_10000", "1 : 10000"],
-                                                ["1_TO_20000", "1 : 20000"],
-                                                ["1_TO_25000", "1 : 25000"],
-                                                ["NOT_TESTED", "not tested"],
-                                                ["NOT_WORKING", "not working"]
-                                    ],
-                          "CURRENT_LAB_MEMBERS" : [
-                                            ["CAROLINE_ZBINDEN", "Caroline Zbinden"],
-                                            ["FRANK_VAN_DROGEN", "Frank Van Drogen"],
-                                            ["INGRID_STOFFEL-STUDER", "Ingrid Stoffel-Studer"],
-                                            ["MATTHIAS_PETER", "Matthias Peter"],
-                                            ["REINHARD_DECHANT", "Reinhard Dechant"],
-                                            ["WOJCIECH_PIWKO", "Wojciech Piwko"],
-                                            ["JOCHEN_BECK", "Jochen Beck"]
-                                    ],
-                          "FIX" : [
-                                ["1H-RT", "1h, RT"],
-                                ["PTEMF", "PTEMF"],
-                                ["PFA", "PFA"],
-                                ["MEOH", "MeOH"]
-                                    ],
-                          "LABEL" : [
-                                ["HRP", "hrp"],
-                                ["AP", "ap"],
-                                ["FITC", "fitc"],
-                                ["CY3", "Cy3"],
-                                ["ALEXA647", "Alexa 647"]
-                                    ],
-                          "ANTIBODY_LOCATION" : [
-                                    ["SMALL_PETER_LAB", "Small Peter Lab"],
-                                    ["BIG_PETER_LAB", "Big Peter Lab"],
-                                    ["NEW_PETER_LAB", "New Peter Lab"],
-                                    ["MINUS20_C-FLOOR", "-20C C-Floor"]
-                                    ],
-                          "MONO-POLYCLONAL" : [
-                                            ["MONOCLONAL",  "Monoclonal"],
-                                            ["POLYCLONAL",  "Polyclonal"],
-                                            ["UNKNOWN", "Unknown"]
-                                    ],
-                          "SOURCE" : [
-                                ["MOUSE",  "Mouse"],
-                                ["RABBIT",  "Rabbit"],
-                                ["HAMSTER",  "Hamster"],
-                                ["GOAT",  "Goat"],
-                                ["RAT",  "Rat"],
-                                ["CHICKEN",  "Chicken"],
-                                ["SHEEP",  "Sheep"],
-                                ["HUMAN",  "Human"],
-                                ["GUINEA_PIG",  "Guinea pig"],
-                                ["DONEKY",  "Donkey"],
-                                ["UNKNOWN",  "Unknown"]
-                                    ],
-                          "CELL_LOCATION" : [
-                                ["FRIDGE",  "fridge"],
-                                ["FREEZER",  "freezer"],
-                                ["REFCO",  "refco"],
-                                ["TANK",  "tank"]
-                                    ],
-                          "SELECTION" : [
-                                ["NEOMYCIN_G418",  "Neomycin/G418"],
-                                ["HYGROMYCIN",  "Hygromycin"],
-                                ["MPA",  "MPA"],
-                                ["G418",  "G418"],
-                                ["PUROMYCIN",  "puromycin"],
-                                ["BLASTICIDIN",  "Blasticidin"],
-                                ["ZEOCIN",  "Zeocin"] 
-                                    ],
-                          "CO2" : [
-                                ["5",  "5"],
-                                ["7.5",  "7.5"]
-                                    ],
-                          "GROWTH_TEMPERATURE" : [
-                                ["37",  "37"],
-                                ["28",  "28"],
-                                ["34",  "34"]
-                                    ],
-                          "MEDIUM" : [
-                                ["RPMI1640",  "RPMI 1640"],
-                                ["ISCOVES",  "Iscoves"],
-                                ["DMEM",  "DMEM"],
-                                ["LB",  "LB"],
-                                ["DMEM_NUTRIENT",  "DMEM nutrient mixture F-12 HAM [D8437]"]
-                                    ], 
-                          "CELL_OBTAINED_FROM" : [
-                                ["FREIBURG",  "Freiburg"],
-                                ["ATCC",  "ATCC"],
-                                ["DANIEL_GERLICH",  "Daniel Gerlich"],
-                                ["ERICH_NIGG",  "Erich Nigg"],
-                                ["KREK",  "Krek"],
-                                ["TONY_HEYMAN",  "Tony Heyman"],
-                                ["THOMAS-WILD_ULRIKE-KUTAY",  "Thomas Wild/Ulrike Kutay"],
-                                ["JAN_MICHAEL_PETERS",  "Jan-Michael Peters"],
-                                ["M_BRANDEIS",  "M Brandeis"],
-                                ["ARI_HELENIUS",  "Ari Helenius"],
-                                ["ROMEO_RICCI",  "Romeo Ricci"]
-                                    ],  
-                          "CELL_SPECIES" : [
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],
-                                ["CHINESE_HAMSTER",  "chines hamster"],
-                                ["HYBRIDOMA",  "hybridoma (human & mouse)"]                                
-                                    ],  
-                          "CONC_UNITS" : [
-                                ["MICROG_MICROL",  "�g/�l"],
-                                ["MG_ML",  "mgl/ml"],
-                                ["UG_ML",  "ug/ml"]                               
-                                    ],  
-                          "STRAIN_SOURCE" : [
-                                ["F_CHANG", "F. Chang"],
-                                ["J_CHANT", "J. Chant"],
-                                ["R_DESHAIES", "R. Deshaies"],
-                                ["E_ELION", "E. Elion"],
-                                ["P_HIETER", "P. Hieter"],
-                                ["I_HERSKOWITZ", "I. Herskowitz"],
-                                ["A_NEIMAN", "A. Neiman"],
-                                ["P_SORGER", "P. Sorger"],
-                                ["T_STEARNS", "T. Stearns"],
-                                ["MARC_BONDEL", "Marc Bondel"],
-                                ["G_SUMARA", "G. Sumara"],
-                                ["MICHAEL_ALTMANN", "Michael Altmann"],
-                                ["HETEROZYGOUS_DIPLOID_COLLECTION", "Heterozygous diploid collection"],
-                                ["ANNE-CHRISTINE_BUTTY", "Anne-Christine Butty"],
-                                ["ANNE_PAQUELET", "Anne Paquelet"],
-                                ["YAGMUR-TURGAY_KUTAY-GROUP", "Yagmur Turgay - Kutay group"],
-                                ["BARBAR_CATARIN", "Barbar Catarin"],
-                                ["FRANK_VAN-DROGEN", "Frank van Drogen"],
-                                ["HEMMO_MEYER", "Hemmo Meyer"],
-                                ["JEAN-MARC_GALLAND", "Jean-Marc Galland"],
-                                ["JEFF_PARVIN", "Jeff Parvin"],
-                                ["MARIE-PIERRE_GULLI", "Marie-Pierre Gulli"],
-                                ["MIKIKO_TAKAHASHI", "Mikiko Takahashi"],
-                                ["SANDRA_HENCHOZ", "Sandra Henchoz"],
-                                ["MALIKA_JAQUENOUD", "Malika Jaquenoud"],
-                                ["GERDA_JORRITSMA", "Gerda Jorritsma"],
-                                ["CELINE_LAFOURCADE", "Céline Lafourcade"],
-                                ["CELINE_LONGARETTI", "Céline Longaretti"],
-                                ["BRIAN_LUKE", "Brian Luke"],
-                                ["GUY_NIEDERHAUSER", "Guy Niederhäuser"],
-                                ["NICOLAS_PAGE", "Nicolas Pag�"],
-                                ["NATHALIE_PERRINJAQUET", "Nathalie Perrinjaquet"],
-                                ["MATTHIAS_PETER", "Matthias Peter"],
-                                ["AUDREY_PETIT", "Audrey Petit"],
-                                ["LIONEL_PINTARD", "Lionel Pintard"],
-                                ["YUKIKO_SHIMADA", "Yukiko Shimada"],
-                                ["PHILIPPE_WIGET", "Philippe Wiget"],
-                                ["VOLKER_STUCKE", "Volker Stucke"],
-                                ["KATRIN_PETER", "Katrin Peter"],
-                                ["MARC_BLONDEL", "marc blondel"],
-                                ["M_FUNK", "M. Funk"],
-                                ["ATTILA_BECSKEI", "Attila Becskei"],
-                                ["GWENAEL_RABUT", "Gwenael Rabut"],
-                                ["PHILIP_JERMANN", "Philip Jermann"],
-                                ["P_PRYCIAK", "P.Pryciak"],
-                                ["LINDA_HICKE", "Linda Hicke"],
-                                ["RZPD", "RZPD"],
-                                ["OPENBIO", "OpenBio"],
-                                ["F_POSAS", "F. Posas"],
-                                ["HAPLOID_COLLECTION", "Haploid collection"],
-                                ["MIRIAM_BORTFELD", "Miriam Bortfeld"],
-                                ["EUROSCARF", "Euroscarf"],
-                                ["TS_COLLECTION", "ts collection"],
-                                ["CONZELMANN_LAB", "Conzelmann lab"],
-                                ["SEBASTIAN_LEIDEL", "Sebastian Leidel"],
-                                ["ANNA_DEPLAZES", "Anna Deplazes"],
-                                ["BIBOU", "Bibou"],
-                                ["MARC_SOHRMANN", "Marc sohrmann"]
-                                    ],
-                          "SELECTION_YEAST" : [
-                                ["NONE",  "None"],
-                                ["URA",  "Ura"],
-                                ["LEU",  "Leu"], 
-                                ["TRP",  "Trp"], 
-                                ["HIS",  "His"], 
-                                ["VIABILITY",  "Viability"], 
-                                ["NAT",  "nat"], 
-                                ["KAN",  "kan"], 
-                                ["KAN_NAT",  "kan + nat"], 
-                                ["HIS_KAN",  "HIS + kan"], 
-                                ["HIS_KAN_NAT",  "HIS + kan + nat"], 
-                                ["HIS",  "HIS"], 
-                                ["LEU_NAT",  "leu + nat"], 
-                                ["ADE2",  "ade2"]
-                                    ],  
-                         "DERIVATION" : [
-                                ["GAMMA_INTEG",  "gamma integ"],
-                                ["DELTA_INTEG",  "� integ"],
-                                ["5FAO_LOOPOUT",  "5-FAO loopout"],
-                                ["PLASMID_SHUFFLE",  "plasmid shuffle"],
-                                ["TETRAD",  "tetrad"],
-                                ["LOOP-IN_LOOP-OUT",  "loop-in/loop-out"],
-                                ["GALPHO",  "GalpHO mating type switch"],
-                                ["DELETION",  "Deletion"],
-                                ["INTEGRATION",  "Integration"]
-                                    ],
-                         "STRAIN_BACKGROUND" : [
-                                ["W303",  "W303"],
-                                ["K699",  "K699"],
-                                ["K700",  "K700"],
-                                ["S288C",  "S288C"],
-                                ["1278",  "*1278*"],
-                                ["EG123",  "EG123"],
-                                ["DF5",  "DF5"],
-                                ["SIGMA",  "Sigma"],
-                                ["UNKNOWN",  "Don't know"],
-                                ["BY7092",  "BY7092"],
-                                ["BY5565",  "BY5565"],
-                                ["BY4741",  "BY4741"]
-                                    ],
-                        "CIR" : [
-                                ["CIR_PLUS",  "cir+"],
-                                ["CIR_DEG",  "cir�"],
-                                    ],
-                        "GAL" : [
-                                ["PLUS",  "Plus"],
-                                ["PLUS_PLUS",  "Plus/Plus"],
-                                ["GAL1",  "gal1"],
-                                ["GAL1_GAL1",  "gal1/gal1"],      
-                                ["GAL2",  "gal2"],                                 
-                                ["GAL2_GAL2",  "gal2/gal2"],                                                         
-                                    ],
-                        "MAT" : [
-                                ["AT",  "@"],
-                                ["A",  "a"],
-                                ["ALPHA",  "alpha"],
-                                ["DIPLOID",  "diploid"],      
-                                ["UNKNOWN",  "unknown"]                                                      
-                                    ],
-                        "OLIGO_ORGANISM" : [
-                                ["BMV",  "BMV"],
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],      
-                                ["XENOPUS",  "xenopus"],
-                                ["DROSOPHILA",  "drosophila"],
-                                ["YEAST",  "yeast"],
-                                ["ECOLI",  "E.coli"],
-                                ["SYNTHETIC",  "synthetic"],
-                                ["HIV1",  "HIV-1"],
-                                ["CELEGANS",  "C.elegans"],
-                                ["MYCOPLASMA",  "mycoplasma"]
-                                    ],
-                        "OLIGO_GRADE" : [
-                                ["DESALTED",  "desalted"],
-                                ["HPLC",  "hplc"],
-                                ["PURITY",  "purity"],
-                                ["UNKNOWN",  "?"]      
-                                    ],     
-                        "PRIMER_POSITION" : [
-                                ["FORWARD",  "forward"],
-                                ["REVERSE",  "reverse"]
-                                    ],  
-                        "OLIGO_COMPANY" : [
-                                ["MWG",  "MWG"],
-                                ["BIG",  "BIG"],
-                                ["PHARMACIA",  "Pharmacia"],
-                                ["IGLOI",  "Igloi"],      
-                                ["INVITROGEN",  "invitrogen"],
-                                ["MICROSYNTH",  "microsynth"]                                                     
-                                    ],                                       
-                        "OLIGO_USAGE" : [
-                                ["PCR",  "pcr"],
-                                ["SEQUENCING",  "sequencing"],
-                                ["HYBRIDIZE",  "hybridize"],
-                                ["MUTAGENESIS",  "mutagenesis"],      
-                                ["RT-PCR",  "Real-Time PCR"]
-                                    ],
-                        "RESTRICTION" : [
-                                ["AATII",  "AatII"],
-                                ["ACCI",  "AccI"],
-                                ["ACII",  "AciI"],
-                                ["AFLII",  "AflII"],
-                                ["AFLIII",  "AflIII"],
-                                ["AGEI",  "AgeI"],
-                                ["ALUI",  "AluI"],
-                                ["ALWI",  "AlwI"],
-                                ["ALWNI",  "AlwNI"],
-                                ["APAI",  "ApaI"],
-                                ["APALI",  "ApaLI"],
-                                ["APOI",  "ApoI"],
-                                ["ASCI",  "AscI"],
-                                ["ASEI",  "AseI"],
-                                ["AVAI",  "AvaI"],
-                                ["AVAII",  "AvaII"],
-                                ["AVRII",  "AvrII"],
-                                ["BAMHI",  "BamHI"],
-                                ["BANI",  "BanI"],
-                                ["BANII",  "BanII"],
-                                ["BBSI",  "BbsI"],
-                                ["BBVI",  "BbvI"],
-                                ["BCGI-1",  "BcgI-1"],
-                                ["BCGI-2",  "BcgI-2"],
-                                ["BCLI",  "BclI"],
-                                ["BFAI",  "BfaI"],
-                                ["BGLI",  "BglI"],
-                                ["BGLII",  "BglII"],
-                                ["BLPI",  "BlpI"],
-                                ["BPMI",  "BpmI"],
-                                ["BSAAI",  "BsaAI"],
-                                ["BSABI",  "BsaBI"],
-                                ["BSAHI",  "BsaHI"],
-                                ["BSAI",  "BsaI"],
-                                ["BSAJI",  "BsaJI"],
-                                ["BSAWI",  "BsaWI"],
-                                ["BSERI",  "BseRI"],
-                                ["BSGI",  "BsgI"],
-                                ["BSIEI",  "BsiEI"],
-                                ["BSIHKAI",  "BsiHKAI"],
-                                ["BSIWI",  "BsiWI"],
-                                ["BSLI",  "BslI"],
-                                ["BSMAI",  "BsmAI"],
-                                ["BSMBI",  "BsmBI"],
-                                ["BSMFI",  "BsmFI"],
-                                ["BSMI",  "BsmI"],
-                                ["BSOFI",  "BsoFI"],
-                                ["BSP1286I",  "Bsp1286I"],
-                                ["BSPEI",  "BspEI"],
-                                ["BSPHI",  "BspHI"],
-                                ["BSPMI",  "BspMI"],
-                                ["BSRBI",  "BsrBI"],
-                                ["BSRDI",  "BsrDI"],
-                                ["BSRFI",  "BsrFI"],
-                                ["BSRGI",  "BsrGI"],
-                                ["BSRI",  "BsrI"],
-                                ["BSSHII",  "BssHII"],
-                                ["BST1107I",  "Bst1107I"],
-                                ["BSTBI",  "BstBI"],
-                                ["BSTEII",  "BstEII"],
-                                ["BSTNI",  "BstNI"],
-                                ["BSTUI",  "BstUI"],
-                                ["BSTXI",  "BstXI"],
-                                ["BSTYI",  "BstYI"],
-                                ["BSU36I",  "Bsu36I"],
-                                ["CAC8I",  "Cac8I"],
-                                ["CLAI",  "ClaI"],
-                                ["CVIJI",  "CviJI"],
-                                ["DDEI",  "DdeI"],
-                                ["DPNI",  "DpnI"],
-                                ["DRAI",  "DraI"],
-                                ["DRAIII",  "DraIII"],
-                                ["DRDI",  "DrdI"],
-                                ["DSAI",  "DsaI"],
-                                ["EAEI",  "EaeI"],
-                                ["EAGI",  "EagI"],
-                                ["EAM1105I",  "Eam1105I"],
-                                ["EARI",  "EarI"],
-                                ["ECO47III",  "Eco47III"],
-                                ["ECO57I",  "Eco57I"],
-                                ["ECONI",  "EcoNI"],
-                                ["ECOO109I",  "EcoO109I"],
-                                ["ECORI",  "EcoRI"],
-                                ["ECORV",  "EcoRV"],
-                                ["FOKI",  "FokI"],
-                                ["FSEI",  "FseI"],
-                                ["FSPI",  "FspI"],
-                                ["HAEII",  "HaeII"],
-                                ["HAEIII",  "HaeIII"],
-                                ["HGAI",  "HgaI"],
-                                ["HHAI",  "HhaI"],
-                                ["HINCII",  "HincII"],
-                                ["HINDIII",  "HindIII"],
-                                ["HINFI",  "HinfI"],
-                                ["HPAI",  "HpaI"],
-                                ["HPAII",  "HpaII"],
-                                ["HPHI",  "HphI"],
-                                ["KPNI",  "KpnI"],
-                                ["MAEII",  "MaeII"],
-                                ["MAEIII",  "MaeIII"],
-                                ["MBOI",  "MboI"],
-                                ["MBOII",  "MboII"],
-                                ["MLUI",  "MluI"],
-                                ["MNLI",  "MnlI"],
-                                ["MSCI",  "MscI"],
-                                ["MSEI",  "MseI"],
-                                ["MSLI",  "MslI"],
-                                ["MSPA1I",  "MspA1I"],
-                                ["MUNI",  "MunI"],
-                                ["MWOI",  "MwoI"],
-                                ["NAEI",  "NaeI"],
-                                ["NARI",  "NarI"],
-                                ["NCII",  "NciI"],
-                                ["NCOI",  "NcoI"],
-                                ["NDEI",  "NdeI"],
-                                ["NHEI",  "NheI"],
-                                ["NLAIII",  "NlaIII"],
-                                ["NLAIV",  "NlaIV"],
-                                ["NOTI",  "NotI"],
-                                ["NRUI",  "NruI"],
-                                ["NSII",  "NsiI"],
-                                ["NSPI",  "NspI"],
-                                ["PACI",  "PacI"],
-                                ["PFLMI",  "PflMI"],
-                                ["PLEI",  "PleI"],
-                                ["PMEI",  "PmeI"],
-                                ["PMLI",  "PmlI"],
-                                ["PPUMI",  "PpuMI"],
-                                ["PSHAI",  "PshAI"],
-                                ["PSP1406I",  "Psp1406I"],
-                                ["PSTI",  "PstI"],
-                                ["PVUI",  "PvuI"],
-                                ["PVUII",  "PvuII"],
-                                ["RSAI",  "RsaI"],
-                                ["RSRII",  "RsrII"],
-                                ["SACI",  "SacI"],
-                                ["SACII",  "SacII"],
-                                ["SALI",  "SalI"],
-                                ["SAPI",  "SapI"],
-                                ["SAU96I",  "Sau96I"],
-                                ["SCAI",  "ScaI"],
-                                ["SCRFI",  "ScrFI"],
-                                ["SEXAI",  "SexAI"],
-                                ["SFANI",  "SfaNI"],
-                                ["SFCI",  "SfcI"],
-                                ["SFII",  "SfiI"],
-                                ["SGFI",  "SgfI"],
-                                ["SGRAI",  "SgrAI"],
-                                ["SMAI",  "SmaI"],
-                                ["SNABI",  "SnaBI"],
-                                ["SPEI",  "SpeI"],
-                                ["SPHI",  "SphI"],
-                                ["SRFI",  "SrfI"],
-                                ["SSE8387I",  "Sse8387I"],
-                                ["SSPI",  "SspI"],
-                                ["STUI",  "StuI"],
-                                ["STYI",  "StyI"],
-                                ["SWAI",  "SwaI"],
-                                ["TAQI",  "TaqI"],
-                                ["TFII",  "TfiI"],
-                                ["TSP45I",  "Tsp45I"],
-                                ["TSP509I",  "Tsp509I"],
-                                ["TTH111I",  "Tth111I"],
-                                ["XBAI",  "XbaI"],
-                                ["XCMI",  "XcmI"],
-                                ["XHOI",  "XhoI"],
-                                ["XMNI",  "XmnI"],
-                                ["SACI_NHEI",  "sacI NheI"],
-                                ["XMAI",  "XmaI"],
-                                ["BAMHI",  "BamHI"],
-                                ["CLAI",  "ClaI"],
-                                ["PACI",  "PacI"],
-                                ["NOTI",  "NotI"],
-                                ["SALI",  "SalI"],
-                                ["XHOI",  "XhoI"],
-                                ["NONE",  "none"]
-                            ],
-                        "BACKBONE" : [
-                                ["PCDNA3",  "pCDNA3"],
-                                ["PABES-NEO2000",  "pABES-neo 2000"],    
-                                ["PUC19",  "pUC 19"],                                
-                                ["PMX-1",  "pMX-1"],
-                                ["PRMHA-3",  "pRmHa-3"]
-                            ],
-                        "BACTERIAL_HOST" : [
-                                ["DH10B",  "DH10B"],
-                                ["JM110",  "JM110"],    
-                                ["BL21",  "BL21"],                                
-                                ["DH5A",  "DH5a"],
-                                ["PB3",  "PB3"],
-                                ["DB31",  "DB3.1"],
-                                ["CCDB_SURVIVAL",  "ccdB survival"]
-                            ],  
-                        "BIOSAFETY_LEVEL" : [
-                                ["S1",  "S1"],
-                                ["S2",  "S2"],    
-                                ["S3",  "S3"]        
-                            ],
-                        "SELECTION_IN_BACTERIA" : [
-                                ["AMPICILLIN",  "Ampicillin"],
-                                ["KANAMYCIN",  "Kanamycin"],    
-                                ["SPECTINOMCIN",  "Spectinomcin"],
-                                ["UNKNOWN",  "Unknown"]                                        
-                            ],
-                        "SELECTION_IN_EUKARYOTES" : [
-                                ["G418_NEO",  "G418/neo"],
-                                ["MPA",  "MPA"],    
-                                ["HYGROMYCIN",  "Hygromycin"]                                 
-                            ],                            
-                        "SOURCE_OF_REPLICON" : [
-                                ["CMV",  "CMV"]                                   
-                            ],
-                        "PLASMID_ORGANISM" : [
-                                ["HUMAN",  "human"],
-                                ["MOUSE",  "mouse"],
-                                ["RAT",  "rat"],
-                                ["XENOPUS",  "xenopus"],
-                                ["DROSOPHILA",  "drosophila"],
-                                ["YEAST",  "yeast"],
-                                ["ECOLI",  "E.coli"],
-                                ["SYNTHETIC",  "synthetic"]
-                            ],
-                        "PROMOTER" : [
-                                ["ENDOGENOUS",  "endogenous"],
-                                ["GAL1",  "gal1"],
-                                ["GALL",  "galL"],
-                                ["GALS",  "galS"],
-                                ["TET",  "tet"],
-                                ["ADH",  "adh"],
-                                ["CYC",  "cyc"],
-                                ["GPD",  "gpd"],
-                                ["DASH",  "\"-\""],
-                                ["CMV",  "cmv"],
-                                ["SV40",  "SV40"],
-                                ["TET_ON",  "tet on"],
-                                ["TET_OFF",  "tet off"],
-                                ["RIM1",  "rim1"]
-                            ],
-                        "EXON_OR_THREE_PRIME" : [
-                                ["EXON",  "exon"],
-                                ["3P",  "3'"],
-                                ["5P",  "5'"]
-                            ], 
-                        "SIRNA_SPECIES" : [
-                                ["HUMAN",  "Human"],
-                                ["MOUSE",  "Mouse'"],
-                            ], 
-                        "SIRNA_COMPANY" : [
-                                ["AMBION",  "Ambion"],
-                                ["DHARMACON",  "Dharmacon'"],
-                                ["INVITORGEN",  "Invitrogen'"],
-                                ["MICROSYNTH",  "Microsynth'"],
-                                ["QIAGEN",  "Qiagen'"],
-                                ["GIFT",  "Gift'"]
-                            ], 
-                       "SIRNA_FREEZER_LOCATION" : [
-                                ["BIGLABFREEZER",  "BigLab freezer"],
-                                ["SMALLLAB_BIGFREEZER",  "SmallLab Big freezer'"],
-                                ["FREEZER_G17",  "Freezer G17'"],
-                                ["G93-FRANK",  "G9.3--Frank'"],
-                                ["FREEZER-G17_BOX_NATHALIE",  "Freezer G17 Box Nathalie'"],
-                                ["BOX-THIBAULT-BIGFREEZER-SMALLLAB",  "Box thibault Big freezer small lab'"],
-                                ["BOX-NATHALIE",  "Box Nathalie'"]
-                            ], 
-                       "TRANSFECTION_AGENT" : [
-                                ["FUGENE",  "Fugene"],
-                                ["LIPOFECTAMINE",  "Lipofectamine'"],
-                                ["OLIGOFECTAMINE",  "Oligofectamine'"],
-                                ["RNAIMAX",  "RNAimax'"]
-                            ],                             
-                        "FREEZER" : [
-                                ["G9_FRIDGE-1",  "G9 Fridge 1"],
-                                ["G9_FRIDGE-2",  "G9 Fridge 2"],
-                                ["G9_FREEZER-A",  "-20C Small Peter Lab"],
-                                ["G9_FREEZER-B",  "G9 Freezer B"],
-                                ["G9_FREEZER-C",  "G9 Freezer C"],
-                                ["G10_FREEZER-D",  "G10 Freezer D"],
-                                ["G10_FREEZER-E",  "G10 Freezer E"],
-                                ["G10_FREEZER-F",  "G10 Freezer F"],
-                                ["G10_FREEZER-G",  "G10 Freezer G"],
-                                ["G10_FREEZER-H",  "G10 Freezer H"],
-                                ["G10_FREEZER-I",  "G10 Freezer I"],
-                                ["G10_FRIDGE-3",  "+4C Big Peter Lab"],
-                                ["G10_FRIDGE-4",  "G10 Fridge 4"],
-                                ["G10_FRIDGE-5",  "G10 Fridge 5"],
-                                ["G10_FRIDGE-6",  "G10 Fridge 6"],
-                                ["G10_FRIDGE-7",  "G10 Fridge 7"],
-                                ["G11_FRIDGE-8",  "G10 Fridge 8"],
-                                ["G14_FREEZER-J",  "G14 Freezer J"],
-                                ["G14_FREEZER-K",  "G14 Freezer K"],
-                                ["G14_FREEZER-L",  "G14 Freezer L"],
-                                ["G14_FREEZER-M",  "G14 Freezer M"],
-                                ["G14_FRIDGE-9",  "G14 Fridge 9"],
-                                ["G14_FRIDGE-10",  "G14 Fridge 10"],
-                                ["G17_FRIDGE-11",  "G17 Fridge 11"],
-                                ["G17_FRIDGE-12",  "G17 Fridge 12"],
-                                ["G17_FREEZER-N",  "G17 Freezer N"],
-                                ["USER_BENCH-20",  "Bench -20�C"],
-                                ["USER_BENCH-80",  "Bench -80�C"],
-                                ["USER_BENCH-RT",  "Bench RT"],
-                                ["USER_BENCH",  "Bench"]
-                                    ]
-                          }
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/doc/README.txt b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/doc/README.txt
deleted file mode 100644
index 362ec1523649c2e1a69d9d39d12c0c6ca1751ed9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/doc/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Steps for migration:
-
-1) run migration script
-2) in standard UI, use sample browser and browse for:
-	a. Plasmids. Export code, parents, Plasmid Parents
-	b. Strains. Export code, parents and Derived From
- 
-	
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/doc/fm11_odbc_jdbc_guide_en.pdf b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/doc/fm11_odbc_jdbc_guide_en.pdf
deleted file mode 100644
index 36aaa0f12220dbde26b7ece4e3b78914087893b0..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/doc/fm11_odbc_jdbc_guide_en.pdf and /dev/null differ
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/lib/FileMakerMain.java b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/lib/FileMakerMain.java
deleted file mode 100644
index a2206338c1ccb79267396fbe2751fbb529304ab8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/lib/FileMakerMain.java
+++ /dev/null
@@ -1,77 +0,0 @@
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-//  STEP By Step:
-//  1. Open the file maker file with file maker pro
-//  2. Go to "File -> Sharing -> ODBC/JDBC" and turn sharing on
-//  3. You can go to see the names of the tables and field to "File -> Manage -> Database"
-//  Without closing file maker pro you can run this script, modify it as needed
-//  More info at http://www.filemaker.com/support/product/docs/fmp/fm11_odbc_jdbc_guide_en.pdf
-
-public class FileMakerMain
-{
-    // NOTE: FileMaker is so dump that you can't get the fileName and the fileData on the same query, the file data will return null, so we make a second call for this
-    public static final String GET_DOCUMENTS = "SELECT CAST(file AS VARCHAR(1000)) AS fileName, info, serial FROM documents";
-    public static final String GET_DOCUMENT_DATA = "SELECT GetAs(file, 'FILE') AS fileData FROM documents WHERE serial = ?";
-    
-    static class Document {
-        String fileName;
-        String info;
-        String serial;
-        
-        public String toString()
-        {
-            return fileName + " " + info;
-        }
-    }
-    
-    public static List<Document> getDocuments(Connection connection) throws SQLException {
-        List<Document> documents = new ArrayList<Document>();
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENTS);
-        ResultSet result = preparedStatement.executeQuery();
-        
-        while(result.next()) {
-            Document document = new Document();
-            document.fileName = result.getString("fileName");
-            document.info = result.getString("info");
-            document.serial = result.getString("serial");
-            documents.add(document);
-        }
-        result.close();
-        preparedStatement.close();
-        return documents;
-    }
-    
-    public static byte[] getFile(Connection connection, Document document) throws SQLException {
-        byte[] bytes = {};
-        PreparedStatement preparedStatement = connection.prepareStatement(GET_DOCUMENT_DATA);
-        preparedStatement.setString(1, document.serial);
-        ResultSet result = preparedStatement.executeQuery();
-        if(result.next()) {
-            byte[] value = result.getBytes("fileData");
-            if(value != null) {
-                bytes = value;
-            }
-        }
-        result.close();
-        preparedStatement.close();
-        return bytes;
-    }
-    
-    public static void main(String[] args) throws Exception {
-        Class.forName("com.filemaker.jdbc.Driver").newInstance();
-        Connection connection = DriverManager.getConnection("jdbc:filemaker://127.0.0.1/BOXIT_documents_Peter.fmp12","designer", "seattle");
-        
-        for(Document document: getDocuments(connection)) {
-            byte[] bytes = getFile(connection, document);
-            System.out.println(document + " " + bytes.length);
-        }
-        connection.close();
-    }
-}
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/lib/fmjdbc.jar b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/lib/fmjdbc.jar
deleted file mode 100644
index 34cae1d60b916205b9039fe765c971229cef1a32..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/lib/fmjdbc.jar and /dev/null differ
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/migration.py b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/migration.py
deleted file mode 100644
index 78da244ff12b79ba14152d658b83c3d9edf51028..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/migration.py
+++ /dev/null
@@ -1,709 +0,0 @@
-# some_file.py
-import sys
-import traceback
-import definitions
-import definitionsVoc
-import re
-import random
-from datetime import datetime
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria, SearchSubCriteria
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-
-import java.lang.Class as Class
-import java.sql.DriverManager as DriverManager
-
-##
-## Generic Process Method
-##
-notMigratedEntities = {
-                       "ENTITY_TYPE" : {"ENTITY ID" : {"ERROR" : "TIMES" }}
-                      }
-
-def getStringValueOrNone(map, key):
-    if (key in map) and (map[key] is not None) and (map[key] is not ""):
-        return map[key];
-    else:
-        return None;
-
-def addNotMigratedEntity(type, entityID, error):
-    if type not in notMigratedEntities:
-        notMigratedEntities[type] = {}
-    if entityID not in notMigratedEntities[type]:
-        notMigratedEntities[type][entityID] = {}
-    if error not in notMigratedEntities[type][entityID]:
-        notMigratedEntities[type][entityID][error] = 1
-    else:
-        notMigratedEntities[type][entityID][error] += 1
-
-def printNotMigratedEntities():
-    print "--- Not Migrated Entities Report"
-    for type in notMigratedEntities:
-        print "Type: [" + str(type) + "]"
-        for id in notMigratedEntities[type]:
-            for error in notMigratedEntities[type][id]:
-                print "Id: [" + str(id) + "] Error: " + str(error) + " Times: " + str(notMigratedEntities[type][id][error])
-    print "---"
-
-def process(tr):
-    print "START!"
-    createDataHierarchy(tr)
-    for adaptor in adaptors:
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] START"
-        while adaptor.next():
-            entity = adaptor.getEntity()
-            print "* ENTITY [" + str(entity.getIdentifier(tr)) + "]"
-            try:
-                if not entity.isInOpenBIS(tr):
-                    entity.write(tr)
-                    #print entity.getIdentifier(tr) + " - Updated"
-                else:
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), "Already in openBIS")
-            except Exception, error:
-                    print traceback.format_exc()
-                    addNotMigratedEntity(adaptor.__class__.__name__, entity.getIdentifier(tr), str(error.args))
-                    #print entity.getIdentifier(tr) + " - Already up to date"
-        print "- ADAPTOR [" + adaptor.__class__.__name__ + "] FINISH"
-    print "REPORT START"
-    printNotMigratedEntities()
-    definitionsVoc.printCreatedTerms()
-    print "REPORT FINISH"
-    print "FINISH!"
-
-##
-## Help Methods
-##
-def setEntityProperties(tr, definition, entity, properties):
-    for origPropertyCode, propertyValue in properties.iteritems():
-            #print repr("setEntityProperties " + origPropertyCode + " : " + unicode(propertyValue))
-            propertyCode = origPropertyCode;
-            if propertyCode.startswith("+"):
-                propertyCode = propertyCode[1:];
-            elif propertyCode.startswith("-"):
-                continue
-            
-            propertyDefinition = definitions.getPropertyDefinitionByCode(definition, origPropertyCode)
-#            print "Prop definition ", propertyDefinition
-#            print "PROP VALUE ", propertyValue
-            if propertyDefinition is not None and propertyValue is not None:
-                propertyValue =  unicode(propertyValue) 
-                
-
-
-
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.REAL and propertyValue is not None:
-                if propertyValue =="?":
-                    propertyValue=""
-
-            if propertyDefinition is not None and propertyDefinition[3] == DataType.CONTROLLEDVOCABULARY and propertyValue is not None:
-                possiblePropertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel(propertyDefinition[4], propertyValue)
-                if possiblePropertyValue is not None:
-                    propertyValue = possiblePropertyValue
-                else:  #We rely on the Add Hock Terms if is None, since there is no API we create a new one
-                    #Create new vocabulary term
-                    codeToUse = re.sub(r'\W+','_',propertyValue)
-                    labelToUse = propertyValue
-                    if len(codeToUse) is 0:
-                        codeToUse = "None" + str(random.random())
-                    if len(codeToUse) > 50:
-                        codeToUse = codeToUse[:50]
-                    #Uses new vocabulary term
-                    newTerm = definitionsVoc.createVocabularyTerm(tr, propertyDefinition[4], codeToUse, labelToUse)
-                    propertyValue = newTerm.getCode()
-                    print "* WARNING ENTITY [" + entity.getCode() + "]: for Vocabulary [" + propertyDefinition[4] + "], found value not in list: [" + repr(labelToUse) + "]. Created new term with code [" + codeToUse + "]"
-
-            if (propertyDefinition is not None) and (len(propertyDefinition) >= 2) and (propertyDefinition[2] == "pKW Number") and (propertyValue is not None):
-                propertyValue = "pKW" + propertyValue
-
-            if (propertyDefinition is not None) and (len(propertyDefinition) >= 2) and propertyDefinition[2] == "emtpy?":
-                if propertyValue == "empty":
-                    propertyValue = "true"
-                
-
-            if (propertyDefinition is not None) and (len(propertyDefinition) >= 2) and propertyDefinition[2] == "UC Number" and (propertyValue is not None):
-                if re.search("US", propertyValue):
-                    propertyValue =propertyValue.replace("US", "UC").strip(" ")                             
-            
-            if propertyDefinition is not None: #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-
-
-
-            if (propertyDefinition is not None) and (len(propertyDefinition) >= 3) and propertyDefinition[3] == DataType.CONTROLLEDVOCABULARY and propertyValue is not None:
-                possiblePropertyValue = definitionsVoc.getVocabularyTermCodeForVocabularyAndTermLabel(propertyDefinition[4], propertyValue)
-                if possiblePropertyValue is not None:
-                    propertyValue = possiblePropertyValue.strip(" ")
-                else:
-                    #print "MISSING VALUE for: ", propertyDefinition[0], ": VALUE ", propertyValue, "POSS VALUE:",  possiblePropertyValue
-
-                    if propertyDefinition[0] =="BACTERIAL_STRAIN" and propertyValue is not None:   
-                        if propertyValue == "XL10 Gold":
-                             entity.setPropertyValue("BACTERIAL_STRAIN", "XL10-GOLD")
-                        elif propertyValue =="STABL2":
-                             entity.setPropertyValue("BACTERIAL_STRAIN", "STBL2")
-                        elif propertyValue =="E. coli":
-                             entity.setPropertyValue("BACTERIAL_STRAIN", "E_COLI")                                 
-                        elif propertyValue == "?":
-                             entity.setPropertyValue("BACTERIAL_STRAIN", "UNKNOWN")
-                        else:
-                  #We rely on the Add Hock Terms if is None, since there is no API we create a new one
-                    #Create new vocabulary term
-                            codeToUse = re.sub(r'\W+','_',propertyValue)
-                            labelToUse = propertyValue
-                            if len(codeToUse) is 0:
-                                codeToUse = "None" + str(random.random())
-                            if len(codeToUse) > 50:
-                                codeToUse = codeToUse[:50]
-                            #Uses new vocabulary term
-                            newTerm = definitionsVoc.createVocabularyTerm(tr, propertyDefinition[4], codeToUse, labelToUse)
-                            propertyValue = newTerm.getCode()
-                            print "* WARNING ENTITY [" + entity.getCode() + "]: for Vocabulary [" + propertyDefinition[4] + "], found value not in list: [" + repr(labelToUse) + "]. Created new term with code [" + codeToUse + "]"  
-                            
-                    elif propertyDefinition[0] =="DRUG_RES" and propertyValue is not None:
-                        if propertyValue == "CAM ":
-                            print "CAM IS:", propertyValue
-                            entity.setPropertyValue("DRUG_RES", "CAM")
-                        else:
-                             entity.setPropertyValue("DRUG_RES", propertyValue)  
-                             
-                             
- 
-
-            if propertyDefinition is not None: #Sometimes special fields are added for other purposes, these should not be set
-                entity.setPropertyValue(propertyCode, propertyValue)
-
-
-                                
-                 
-def setPlasmidParents(tr, definition, entity, properties):
-    for propertyCode, propertyValue in properties.iteritems():
-       
-            propertyDefinition = definitions.getPropertyDefinitionByCode(definition, propertyCode)
-            if (propertyDefinition is not None) and ((propertyDefinition[0] == "PCR_3_OLIGO" and propertyValue is not None) or (propertyDefinition[0] == "PCR_5_OLIGO" and propertyValue is not None)):
-                
-
-    #           if propertyValue is not None and propertyDefinition[0] == "PCR_3_OLIGO" or propertyDefinition[0] == "PCR_5_OLIGO":
-                    propertyValue =  unicode(propertyValue)
-                    if re.match ("UC# ", propertyValue) and not re.search("/", propertyValue):
-                        parentCode = "/MATERIALS/"+ propertyValue.replace("UC# ", "UC").strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)
-                    elif re.match ("UC#", propertyValue) and not re.search("/", propertyValue):
-                        parentCode= "/MATERIALS/"+ propertyValue.replace("UC#", "UC").strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)
-                    elif re.match ("UC #", propertyValue) and not re.search("/", propertyValue):
-                        parentCode= "/MATERIALS/"+ propertyValue.replace("UC #", "UC").strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)
-                    elif re.match ("UC ", propertyValue) and not re.search("/", propertyValue):
-                        parentCode="/MATERIALS/"+  propertyValue.replace("UC ", "UC").strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)
-                    elif re.match ("UC1388cc", propertyValue):
-                        parentCode="/MATERIALS/"+  propertyValue.replace("UC1388cc", "UC1388").strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList) 
-                    elif re.match ("UC2396c", propertyValue):
-                        parentCode="/MATERIALS/"+  propertyValue.replace("UC2396c", "UC2396").strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)                                               
-                    elif re.match ("UC", propertyValue) and not re.search("/", propertyValue):
-                        parentCode= "/MATERIALS/"+ propertyValue.strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)
-                    elif re.match ("CH", propertyValue):
-                        parentCode="/MATERIALS/"+ propertyValue.strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)
-                    elif re.match ("Ch", propertyValue):
-                        parentCode="/MATERIALS/"+ propertyValue.replace("Ch", "CH").strip(" ")
-                        currentParentsList = entity.getParentSampleIdentifiers()
-                        currentParentsList.add(parentCode)
-                        entity.setParentSampleIdentifiers(currentParentsList)
-                    else:
-                        print  "PARENT NOT SET: ", propertyDefinition[0] , propertyValue
-                 
-     
-
-
-##
-## Generic Pattern
-##
-class EntityAdaptor:
-    entities = None
-    entitiesIdx = None
-    definition = None
-    definitionRepeats = None
-    
-    def init(self):
-        self.entities = []
-        self.entitiesIdx = -1
-        pass
-    
-    def next(self):
-        if self.entities is None and self.entitiesIdx is None:
-            self.init()
-        self.entitiesIdx += 1
-        if len(self.entities) > self.entitiesIdx:
-            return True
-        else:
-            return False
-    
-    def addEntity(self, values):
-        self.entities.append(OpenBISDTO(values, self.definition))
-    
-    def getEntity(self):
-        return self.entities[self.entitiesIdx]
-    
-class OpenBISDTO:
-    values = {}
-    definition = None
-    
-    def __init__(self, values, definition):
-        self.values = values
-        self.definition = definition
-    
-    def getIdentifier(self, tr):
-        pass
-    
-    def isInOpenBIS(self, tr):
-        pass
-    
-    def write(self, tr):
-        pass
-
-##
-## Costumer specific logic: generic part
-##
-experimentCache = {}
-sampleCache = {}
-sampleID2Sample = {}
-globalSequences = {};
-
-def getNextGlobalSequence(id):
-    currentSequence = None;
-    
-    if id in globalSequences:
-        currentSequence = globalSequences[id]; #Get existing sequence
-    else:
-        currentSequence = 0; # Create a new one
-    
-    #Advance and store new step on the sequence
-    currentSequence = currentSequence+1;
-    globalSequences[id] = currentSequence;
-    
-    #Return the new sequence number
-    return str(currentSequence);
-
-def getExperimentForUpdate(experimentIdentifier, experimentType, tr):
-    experimentType ="MATERIAL"
-    if experimentIdentifier not in experimentCache:
-        print "Cache failed " + experimentIdentifier + ":" + str(experimentType)
-        experiment = tr.getExperimentForUpdate(experimentIdentifier)
-        if experiment is None and experimentType is not None:
-            print "Cache Create " + experimentIdentifier + ":" + str(experimentType)
-            experiment = tr.createNewExperiment(experimentIdentifier,         experimentType)
-        if experiment is not None:
-             experimentCache[experimentIdentifier] = experiment
-    else:
-        pass
-        #print "Cache hit " + experimentIdentifier + ":" + str(experimentType)
-    if experimentIdentifier not in experimentCache:
-         return None
-    else:
-         return experimentCache[experimentIdentifier]
-     
-def getSampleForUpdate(sampleIdentifier, sampleType, tr):
-    if sampleIdentifier not in sampleCache:
-         #print "Cache failed " + sampleIdentifier + ":" + str(sampleType)
-         sample = tr.getSampleForUpdate(sampleIdentifier)
-         if sample is None and sampleType is not None:
-             #print "Cache Create " + sampleIdentifier + ":" + str(sampleType)
-             if sampleType == "ANTIBODY":
-                 experiment = getExperimentForUpdate("/MATERIALS/REAGENTS/ANTIBODY_COLLECTION", sampleType, tr)
-             elif sampleType == "STRAIN":
-                  experiment = getExperimentForUpdate("/MATERIALS/STRAINS/YEAST_STRAINS", sampleType, tr)              
-             elif sampleType == "PLASMID":
-                  experiment = getExperimentForUpdate("/MATERIALS/PLASMIDS/PLASMID_COLLECTION_1", sampleType, tr)              
-             elif sampleType == "CHEMICAL":
-                  experiment = getExperimentForUpdate("/MATERIALS/REAGENTS/CHEMICAL_COLLECTION", sampleType, tr) 
-             elif sampleType == "RESTRICTION_ENZYME":
-                experiment = getExperimentForUpdate("/MATERIALS/REAGENTS/RESTRICTION_ENZYME_COLLECTION", sampleType, tr)                  
-             elif sampleType == "OLIGO":
-                  experiment = getExperimentForUpdate("/MATERIALS/POLYNUCLEOTIDES/OLIGO_COLLECTION_1", sampleType, tr)                  
-             sample = tr.createNewSample(sampleIdentifier, sampleType)
-             sample.setExperiment(experiment)
-         if sample is not None:
-             sampleCache[sampleIdentifier] = sample
-    else:
-        pass
-        #print "Cache hit " + sampleIdentifier + ":" + str(sampleType)
-        
-    if sampleIdentifier not in sampleCache:
-         return None
-    else:
-         return sampleCache[sampleIdentifier]
-
-class FileMakerEntityAdaptor(EntityAdaptor):
-    connection = None
-    selectQuery = None
-    selectQueryRepetitions = None;
-    selectQueryRepetitionsId = None;
-        
-    def __init__(self, fileMakerConnString, fileMakerUser, fileMakerPass, db):
-        Class.forName("com.filemaker.jdbc.Driver").newInstance()
-        self.connection = DriverManager.getConnection(fileMakerConnString+db,fileMakerUser, fileMakerPass)
-    
-    def init(self):
-        EntityAdaptor.init(self)
-        
-        # Default Query (All adaptors should have it)
-        preparedStatement = self.connection.prepareStatement(self.selectQuery)
-        #print "EXECUTED QUERY: " + self.selectQuery
-        result = preparedStatement.executeQuery()
-        
-        while result.next():
-            values = {}
-            for property in self.definition:
-                if property[0].startswith("+"):
-                    pass #Do Nothing
-                elif property[0]=="ANNOTATIONS_STATE":
-                    values[property[0]] = "";
-                else:
-                    propertyCode = property[0];
-                    propertyValue = result.getString(property[2]);
-                    if property[0].startswith("+"):
-                        propertyCode = property[0][1:];
-                    if property[0].startswith("-"):
-                        propertyCode = property[0][1:];
-                    values[propertyCode] = result.getString(property[2])
-            self.addEntity(values)
-        result.close()
-        preparedStatement.close()
-        # Repetitions Query (Optional)
-        
-        #Extra Repeats Logic
-        if self.definitionRepeats is not None:
-            fields = "";
-            fieldsNames = [];
-            isFirst = True;
-            for field in self.definitionRepeats:
-                propertyCode = field[0];
-                if propertyCode.startswith("+"):
-                    continue
-                
-                if not isFirst:
-                    fields = fields + ", ";
-                
-                fields = fields + field[2];
-                fieldsNames.append(propertyCode);
-                isFirst = False;
-            
-            for entity in self.entities:
-                entityId = entity.values[self.selectQueryRepetitionsId];
-                if entityId is not None:
-                    perEntityQuery = "SELECT " + fields + " FROM " + self.selectQueryRepetitions + "= '" + entityId + "'";
-                    #print "EXECUTED QUERY: " + perEntityQuery
-                    preparedStatement = self.connection.prepareStatement(perEntityQuery)
-                    result = preparedStatement.executeQuery()
-                    
-                    columnCount = result.getMetaData().getColumnCount();
-                    while result.next():    
-                        for cIdx in range(columnCount):
-                            if cIdx is not 0:
-                                columName = result.getMetaData().getColumnName(cIdx);
-                                fieldName = fieldsNames[cIdx];
-                                entity.values[fieldName] = result.getString(cIdx);
-                    result.close()
-                    preparedStatement.close()
-        #
-
-##
-## Customer specific logic: different sample types
-##
-class FMOpenBISDTO(OpenBISDTO):
-        def isSampleCacheable(self):
-            return True
-        
-        def isInOpenBIS(self, tr):
-            code = self.getIdentifier(tr)
-            if (code is not None) and (' ' not in code):
-                if self.isSampleCacheable():
-                    sampleID2Sample[self.values["NAME"]] = self.values
-                sample = getSampleForUpdate("/MATERIALS/"+code, None, tr)
-                return False
-            else:
-                print "* ERROR [" + str(code) + "] - Invalid Code found for '" + self.__class__.__name__ + "'"
-                raise Exception('Invalid Code found ' + str(code))
-
-##
-## Antibodies
-##
-
-class AntibodyAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Weis Lab  Antibodies\""
-        self.definition = definitions.antibodyDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(AntibodyOpenBISDTO(values, self.definition))
-       
-        
-class AntibodyOpenBISDTO(FMOpenBISDTO):
-    def isSampleCacheable(self):
-        return False
-        
-    def write(self, tr):
-        if self.values["REF_NUM"] is not None:
-            code = "AB" + self.values["REF_NUM"]
-            if code is not None:
-                sample = getSampleForUpdate("/MATERIALS/"+code,"ANTIBODY", tr)
-                setEntityProperties(tr, self.definition, sample, self.values);
-        else:
-            print  "Sample ", self.values["REF_NUM"], " does not have a REF_NUM"
-    
-    def getIdentifier(self, tr):
-        if self.values["REF_NUM"]:
-            code = "AB"+ self.values["REF_NUM"]
-            return code
-    
-
-
-##
-## Strains
-##
-class StrainAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.definition = definitions.strainDefinition
-        self.selectQuery = "SELECT * FROM \"Weis Lab Yeast Strains\"";
-        
-        #Extra Repeats Logic
-        self.definitionRepeats = definitions.strainDefinitionRepetitions
-        self.selectQueryRepetitions = " \"Weis Lab Yeast Strains\" WHERE \"KWY number\" ";
-        self.selectQueryRepetitionsId = "NAME"
-        #
-        
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(StrainOpenBISDTO(values, self.definition))
-        
-class StrainOpenBISDTO(FMOpenBISDTO):
-    def write(self, tr):
-        #print str(self.values)
-        #Build special properties programmatically
-        # TO-DO Tomorrow
-        
-        genotype = "";
-        #1. Set the mat if present
-        if getStringValueOrNone(self.values, "MAT") is not None:
-#            genotype = "MAT " + self.values["MAT"] + " ";
-
-            if self.values["MAT"] == "a":
-                self.values["MAT"] ="alpha"
-                genotype = "MAT " + self.values["MAT"] + " ";
-            elif self.values["MAT"] == "a/A":
-                self.values["MAT"] ="alpha/A"
-                genotype = "MAT " + self.values["MAT"] + " ";
-            elif self.values["MAT"] == "a/a":
-                self.values["MAT"] = "alpha/alpha"
-                genotype = "MAT " + self.values["MAT"] + " "; 
-            else:
-                genotype = "MAT " + self.values["MAT"] + " ";          
-
-        
-        #2. Add unmarked mutations
-        for cIdx in range(1, 6):
-            if getStringValueOrNone(self.values, "-UNMARKED_MUTATIONS_" + str(cIdx)) is not None:
-                genotype = genotype + self.values["-UNMARKED_MUTATIONS_" + str(cIdx)] + " ";
-        
-        #3. Add pairs of disruptions and markers
-        for cIdx in range(1, 6):
-            disruption = getStringValueOrNone(self.values, "-DISRUPTIONS_" + str(cIdx));
-            marker = getStringValueOrNone(self.values, "-MARKERS_" + str(cIdx));
-            
-            if (disruption is not None) or (marker is not None):
-                if (disruption is not None):
-                    genotype = genotype + disruption +"::";
-                #genotype = genotype + " ";
-                
-                if (marker is not None):
-                    genotype = genotype + marker;
-                genotype = genotype + " ";
-
-        self.values["+GENOTYPE"] = genotype
-        #
-#         print "GENOTYPE : ", str(self.values["+GENOTYPE"])
-        #Write properties
-        code = self.values["NAME"]
-        sample = getSampleForUpdate("/MATERIALS/"+code,"STRAIN", tr)
-        setEntityProperties(tr, self.definition, sample, self.values)
-            
-    def getIdentifier(self, tr):
-        return self.values["NAME"]
-
-##
-## Plasmids
-##
-class PlasmidAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Weis Lab Plasmids\""
-        self.definition = definitions.plasmidDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(PlasmidOpenBISDTO(values, self.definition))
-        
-class PlasmidOpenBISDTO(FMOpenBISDTO):
-    def write(self, tr):
-        code = "PKW" + self.values["NAME"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"PLASMID", tr)
-            setEntityProperties(tr, self.definition, sample, self.values)
-            setPlasmidParents(tr, self.definition, sample, self.values)
-            #print "SETPARENTS", setPlasmidParents(tr, self.definition, sample, self.values)
-        else:
-            print "PLASMID CODE NOT FOUND! "
-    
-    def getIdentifier(self, tr):
-        code = "PKW" +self.values["NAME"]
-        return code
-
-
-
-##
-## Oligos
-##
-class OligoAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"WLO\""
-        self.definition = definitions.oligoDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(OligoOpenBISDTO(values, self.definition))
-        
-class OligoOpenBISDTO(FMOpenBISDTO):
-    def write(self, tr):
-        code = self.values["NAME"]
-        if code is not None:
-            if re.search("CHCH", code): 
-                code = code.replace("CHCH", "CH")                
-                sample = getSampleForUpdate("/MATERIALS/"+code,"OLIGO", tr)
-            elif re.search("CH", code):
-                sample = getSampleForUpdate("/MATERIALS/"+code,"OLIGO", tr)                
-            elif re.search("US", code):
-                code = code.replace("US", "UC")
-                sample = getSampleForUpdate("/MATERIALS/"+code,"OLIGO", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-        else:
-            print "OLIGO CODE NOT FOUND! "
-    
-    def getIdentifier(self, tr):
-        code = self.values["NAME"]
-        return code
-
-
-
-##
-## Chemical
-##
-class ChemicalAdaptor(FileMakerEntityAdaptor):
-    
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Table\""
-        self.definition = definitions.chemicalDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(ChemicalOpenBISDTO(values, self.definition))
-       
-        
-class ChemicalOpenBISDTO(FMOpenBISDTO):
-    def isSampleCacheable(self):
-        return False
-        
-    def write(self, tr):
-        code = "CHEM" + self.values["ID"]
-        if code is not None:
-            sample = getSampleForUpdate("/MATERIALS/"+code,"CHEMICAL", tr)
-            setEntityProperties(tr, self.definition, sample, self.values);
-        else:   
-            print "CHEMICAL CODE NOT FOUND!"
-    
-    def getIdentifier(self, tr):
-        code = "CHEM" + self.values["ID"]
-        return code
-
-##
-## Restriction enzymes
-##
-class EnzymeAdaptor(FileMakerEntityAdaptor):
-    def init(self):
-        self.selectQuery = "SELECT * FROM \"Restriction_Enzymes\""
-        
-        self.definition = definitions.RestrictionEnzymeDefinition
-        FileMakerEntityAdaptor.init(self)
-    
-    def addEntity(self, values):
-        self.entities.append(EnzymeOpenBISDTO(values, self.definition))
-        
-class EnzymeOpenBISDTO(FMOpenBISDTO):
-    
-    def isSampleCacheable(self):
-            return False
-    
-    def write(self, tr):
-        code = self.getIdentifier(tr);
-        print "New Code To Be Written: " + code
-        sample = getSampleForUpdate("/MATERIALS/"+code,"RESTRICTION_ENZYME", tr)
-        setEntityProperties(tr, self.definition, sample, self.values);
-    
-    def getIdentifier(self, tr):
-        if "CODE" not in self.values:
-            self.values["CODE"] = "RE" + getNextGlobalSequence("RE");
-            print "New Code Generated: " + self.values["CODE"]
-        return self.values["CODE"];
-
-
-        
-fmConnString = "jdbc:filemaker://127.0.0.1/"
-#fmConnString = "jdbc:filemaker://fmsrv.ethz.ch/"
-fmUser= "admin"
-fmPass = "nucleus"
-
-
-
-adaptors = [ 
-             #EnzymeAdaptor(fmConnString, fmUser, fmPass, "Weis_Restriction_enzymes"),
-             #ChemicalAdaptor(fmConnString, fmUser, fmPass, "Weis_Chemicals"),
-             #AntibodyAdaptor(fmConnString, fmUser, fmPass, "Weis _Antibodies"),
-             #OligoAdaptor(fmConnString, fmUser, fmPass, "Weis_Oligos"),
-             #PlasmidAdaptor(fmConnString, fmUser, fmPass, "Weis_Plasmids"),
-             StrainAdaptor(fmConnString, fmUser, fmPass, "Weis_Yeast_Strains")
-             ]
-                       
-            
-def createDataHierarchy(tr):
-    inventorySpace = tr.getSpace("MATERIALS")
-    if inventorySpace == None:
-        tr.createNewSpace("MATERIALS", None)
-        tr.createNewProject("/MATERIALS/REAGENTS")
-        tr.createNewProject("/MATERIALS/POLYNUCLEOTIDES")
-        tr.createNewProject("/MATERIALS/PLASMIDS")
-        tr.createNewProject("/MATERIALS/STRAINS")        
-        
-        
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/plugin.properties b/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/plugin.properties
deleted file mode 100644
index 238e3eb903c49960826af70ba5a6983b7836c480..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/weismigration/1/dss/drop-boxes/weismigration/plugin.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-##
-## Defaults
-##
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-script-path = migration.py
-dropbox-name = weismigration
-incoming-dir = ${root-dir}/weismigration
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/antibody-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/antibody-body-style.css
deleted file mode 100644
index 1688cc851aa61c09580ff17f03615e3c92c09d01..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/antibody-body-style.css
+++ /dev/null
@@ -1,130 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E0E0E0;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.antibody-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#antibody-table tr:nth-child(odd) td{
- background-color:#E0E0E0;
-}
-
-
-#antibody-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#antibody-table tr.antibody-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#antibody-table td{
-
-padding:5px;
-}
-
-#antibody-table tr.antibody-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#A8A8A8;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/antibody-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/antibody-browser.html
deleted file mode 100644
index df1ffab4501d5bd84e03167e7e0e3454555eccdc..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/antibody-browser.html
+++ /dev/null
@@ -1,835 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Antibody Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="antibody-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	<div id = "title" style="padding-top:20px"> ANTIBODIES </div>
-	<div id ="sectionsContainer"><div>					
-
-
-	
-<!-- 		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Antibody Name</td><td> <input style="width: 200px" id="antibodyName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
--->		
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table id="antibody-table" style="float: left">
-			  <tr class="antibody-table-header"><th>Code</th><th>Name</th><th>Storage</th><th>Host</th><th>For What</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All antibodys
-var antibodys = null;
-
-/// The antibodys that are currently being inspected
-var inspectedAntibodys = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT", "MATERIALS" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["PROCEDURE",  "PROTOCOL_EVALUATION","DETAILS", "EPITOPE",  "CLONALITY", "ISOTYPE", "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order4 = ["MEMBRANE","ANTIBODY_DILUTION","ANTIBODY_SOLUTION", "COMMENTS" ]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order5 = [ "XMLCOMMENTS","SUGGESTIONS", "PROTOCOL_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list5;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    antibody = objectOrId;
-  } else {
-  	antibody = antibodysById[objectOrId];
-  }
-  
-  return antibody;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the antibodys variable */
-function initializeAntibodys(result)
-{
-      // Construct a map of all antibodys by id
-  antibodysById = {};
-
-	// Split the antibodys into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpAntibodys = [], otherAntibodys = [];
-	var frpRegex = /^FRAB[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        antibodysById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the antibodysById map
-	    theSample = antibodysById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpAntibodys.push(theSample);
-		} else {
-			otherAntibodys.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherAntibodys.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpAntibodys.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(4));
-		var frpNumberB = parseInt(b.code.substring(4));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of antibodys
-	antibodys = frpAntibodys.concat(otherAntibodys);
-}
-
-
-
-/** Set the size of the antibody-table based on whether or not inspectors are visible */
-function resizeAntibodyTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var antibodyTableTransition = d3.selectAll('div.antibody-table-data-cell');
-	antibodyTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectAntibody(antibody)
-{
-	if (inspectedAntibodys.indexOf(antibody) < 0) {
-		inspectedAntibodys.push(antibody);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var antibodyToSend = $.extend({}, antibody);
-		delete antibodyToSend.parents;
-		delete antibodyToSend.children;
-		openbisServer.listDataSetsForSample(antibodyToSend, true, dataset.curry(antibody));
-	}
-	resizeAntibodyTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(antibody)
-{
-	var index = inspectedAntibodys.indexOf(antibody);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedAntibodys.splice(index, 1);
-	resizeAntibodyTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedAntibodys, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectAntibody(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectAntibody(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-			
-			var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-							
-			
-			var propsTable5 = box.append("table").attr("class", "properties");
-	propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeAntibodys(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (antibodys.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#antibody-table").selectAll("tr.antibody-table-data").data(antibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "antibody-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectAntibody)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.STORAGE, sample.properties.HOST, sample.properties.FOR_WHAT]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "antibody-table-data-cell")
-			.text(String)
-
-}
-
-function antibodyFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#antibody-table").selectAll("tr.antibody-table-data").data(antibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedAntibodys) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "ANTIBODY" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/bacteria-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/bacteria-body-style.css
deleted file mode 100644
index f776a2e8e7edd15c3287b0b419a4d1c101340754..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/bacteria-body-style.css
+++ /dev/null
@@ -1,130 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E0E0E0;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.bacteria-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#bacteria-table tr:nth-child(odd) td{
- background-color:#E0E0E0;
-}
-
-
-#bacteria-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#bacteria-table tr.bacteria-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#bacteria-table td{
-
-padding:5px;
-}
-
-#bacteria-table tr.bacteria-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#A8A8A8;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/bacteria-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/bacteria-browser.html
deleted file mode 100644
index da6164d0650febd7c8dc718d305a862bc4f8356b..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/bacteria-browser.html
+++ /dev/null
@@ -1,831 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>bacteria Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="bacteria-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> BACTERIA </div>
-	  <div id ="sectionsContainer"><div>
-
-<!-- 		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">bacteria Name</td><td> <input style="width: 200px" id="bacteriaName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
--->		
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table id="bacteria-table" style="float: left">
-			  <tr class="bacteria-table-header"><th>Code</th><th>Bacteria Strain Name</th><th>Bacteria Genotype</th><th>For What</th><th>Supplier</th><th>Art. Number</th><th>Comments</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All bacterias
-var bacterias = null;
-
-/// The bacterias that are currently being inspected
-var inspectedbacterias = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["BOX_NUMBER", "ROW", "COLUMN"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order4 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_lis4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order5 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list5;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    bacteria = objectOrId;
-  } else {
-  	bacteria = bacteriasById[objectOrId];
-  }
-  
-  return bacteria;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the bacterias variable */
-function initializebacterias(result)
-{
-      // Construct a map of all bacterias by id
-  bacteriasById = {};
-
-	// Split the bacterias into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpbacterias = [], otherbacterias = [];
-	var frpRegex = /^FRE[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        bacteriasById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the bacteriasById map
-	    theSample = bacteriasById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpbacterias.push(theSample);
-		} else {
-			otherbacterias.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherbacterias.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpbacterias.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(4));
-		var frpNumberB = parseInt(b.code.substring(4));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of bacterias
-	bacterias = frpbacterias.concat(otherbacterias);
-}
-
-
-
-/** Set the size of the bacteria-table based on whether or not inspectors are visible */
-function resizebacteriaTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var bacteriaTableTransition = d3.selectAll('div.bacteria-table-data-cell');
-	bacteriaTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectbacteria(bacteria)
-{
-	if (inspectedbacterias.indexOf(bacteria) < 0) {
-		inspectedbacterias.push(bacteria);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var bacteriaToSend = $.extend({}, bacteria);
-		delete bacteriaToSend.parents;
-		delete bacteriaToSend.children;
-		openbisServer.listDataSetsForSample(bacteriaToSend, true, dataset.curry(bacteria));
-	}
-	resizebacteriaTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(bacteria)
-{
-	var index = inspectedbacterias.indexOf(bacteria);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedbacterias.splice(index, 1);
-	resizebacteriaTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedbacterias, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbacteria(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbacteria(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-			var propsTable5 = box.append("table").attr("class", "properties");
-	propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");					
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializebacterias(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (bacterias.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#bacteria-table").selectAll("tr.bacteria-table-data").data(bacterias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "bacteria-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectbacteria)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.BACTERIA_STRAIN_NAME, sample.properties.BACTERIA_GENOTYPE, sample.properties.WHAT_FOR, sample.properties.SUPPLIER, sample.properties.ARTICLE_NUMBER, sample.properties.COMMENTS]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "bacteria-table-data-cell")
-			.text(String)
-
-}
-
-function bacteriaFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, bacteriaNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (bacteriaNameFilterText == undefined) 
-	{
-		bacteriaNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedbacterias = bacterias.filter(bacteriaFilter.curry(ownerFilterText, "OWNER"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(bacteriaNameFilterText, "bacteria_NAME"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#bacteria-table").selectAll("tr.bacteria-table-data").data(bacterias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedbacterias) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "BACTERIA" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#bacteriaName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/base.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/base.css
deleted file mode 100644
index 516b532af882fd7f6721bdda74ba2d5083fe9a72..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/base.css
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Colour dictionary:
- *
- * Table control elements:   #719ba7
- * Header cells:             #66A9BD
- * Body header cells:        #91c5d4
- * Body content cells:       #d5eaf0
- * Body content cells (alt): #bcd9e1
- * Footer header:            #b0cc7f
- * Footer content:           #d7e1c5
- */
-
-
-/*
- * Page setup styles
- */
-body {
-	font: 80%/1.45em Arial, Verdana, Helvetica, sans-serif;
-	margin: 0;
-	padding: 0;
-	color: #111;
-	background-color: #fff;
-}
-
-#container {
-	margin: 0 auto;
-	width: 960px
-}
-
-h1 {
-	text-align: center;
-	font-size: 1.2em;
-	font-weight: bold;
-	margin: 1em 0;
-}
-
-
-/*
- * DataTables framework
- */
-div.dataTables_wrapper {
-	background-color: #5C5C1F;
-}
-
-div.dataTables_length {
-	float: left;
-}
-
-div.dataTables_filter {
-	float: right;
-}
-
-div.dataTables_info {
-	padding: 9px 6px 6px 6px;
-	float: left;
-}
-
-div.dataTables_paginate {
-	float: right;
-}
-
-div.dataTables_length,
-div.dataTables_filter,
-div.dataTables_paginate {
-	padding: 6px;
-}
-
-/* Self clearing - http://www.webtoolkit.info/css-clearfix.html */
-.dataTables_wrapper:after {
-	content: ".";
-	display: block;
-	clear: both;
-	visibility: hidden;
-	line-height: 0;
-	height: 0;
-}
- 
-html.dataTables_wrapper {
-	display: block;
-}
- 
-* html .dataTables_wrapper {
-	height: 1%;
-}
-
-
-/*
- * Table styles
- */
-table.pretty {
-	width: 100%;
-	clear: both;
-}
-
-table.pretty td,
-table.pretty th {
-	padding: 5px;
-	border: 1px solid #fff;
-}
-
-/* Header cells */
-table.pretty thead th {
-	text-align: center;
-	background: #5C5C1F;
-}
-
-/* Body cells */
-
-	
-table.pretty tbody td {
-	text-align: center;
-	background: #ECEFEF;
-}
-		
-table.pretty tbody tr.odd td { 
-	background: #A6A64D;
-}
-
-/*
- * Pagination
- */
-a.paginate_button,
-a.paginate_active {
-	display: inline-block;
-	background-color: #ECEFEF;
-	padding: 2px 6px;
-	margin-left: 2px;
-	cursor: pointer;
-	*cursor: hand;
-}
-
-a.paginate_active {
-	background-color: transparent;
-	border: 1px solid black;
-}
-
-a.paginate_button_disabled {
-	color: #3d6672;
-}
-.paging_full_numbers a:active {
-	outline: none
-}
-.paging_full_numbers a:hover {
-	text-decoration: none;
-}
-
-div.dataTables_paginate span>a {
-	width: 15px;
-	text-align: center;
-}
-
-
-/*
- * Sorting
- */
-table.pretty thead th.sorting_asc {
-	background: #5C5C1F url('images/sort_asc.png') no-repeat right center;
-}
-
-table.pretty thead th.sorting_desc {
-	background: #5C5C1F url('images/sort_desc.png') no-repeat right center;
-}
-
-table.pretty thead th.sorting {
-	background: #5C5C1F url('images/sort_both.png') no-repeat right center;
-}
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/body-style.css
deleted file mode 100644
index 9047f06025252e7670a81c2a3747cb776a08c466..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/body-style.css
+++ /dev/null
@@ -1,232 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#DC7E9E;
-}
-
-.properties td:nth-child(even) {
-  background-color:#ECEFEF;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Legend */
-
-.legend .sequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkGreen;
-}
-
-.legend .notsequenced circle {
-   font: 14px "Verdana", sans-serif;
-   stroke-width: 1.5px;
-   fill: white;
-   stroke: DarkRed;
-}
-.oligo-table-data-cell {
-	overflow: hidden;
-}
-
-#oligo-table tr:nth-child(odd) {
-  background-color:#94B8B8;
-}
-
-#oligo-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-  
-}
-
-#oligo-table tr.oligo-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-
-#oligo-table td{
-
-padding:5px;
-}
-
-#oligo-table tr.oligo-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#426262;	
-}
-
-
-.chemical-table-data-cell {
-	overflow: hidden;
-}
-
-#chemical-table tr:nth-child(odd) {
-  background-color:#B2B2B2;
-}
-
-#chemical-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-  
-}
-
-#chemical-table tr.chemical-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-
-#chemical-table td{
-
-padding:5px;
-}
-
-#chemical-table tr.chemical-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#767676;	
-}
-
-
-.plasmid-table-data-cell {
-	overflow: hidden;
-}
-
-#plasmid-table tr:nth-child(odd) {
-  background-color:#DC7E9E;
-}
-
-#plasmid-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-}
-
-#plasmid-table tr.plasmid-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-#plasmid-table td{
-
-padding:5px;
-}
-
-#plasmid-table tr.plasmid-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#6E3F4F;	
-}
-
-
-
-
-.yeast-table-data-cell {
-	overflow: hidden;
-}
-
-#yeast-table tr:nth-child(odd) {
-  background-color:#A6A64D;
-}
-
-#yeast-table tr:nth-child(even) {
-  background-color:#ECEFEF;
-  
-}
-
-#yeast-table tr.yeast-table-data:hover {
-  font-size : 105%;
-  font-weight: bold;
-  
-}
-
-#yeast-table td{
-
-padding:5px;
-}
-
-#yeast-table tr.yeast-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#fff;
-  background-color:#5C5C1F;	
-}
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/buffer-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/buffer-body-style.css
deleted file mode 100644
index 6040328e1d0a50dbdffd01fc2e55d02155513170..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/buffer-body-style.css
+++ /dev/null
@@ -1,130 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E0E0E0;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.buffer-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#buffer-table tr:nth-child(odd) td{
- background-color:#E0E0E0;
-}
-
-
-#buffer-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#buffer-table tr.buffer-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#buffer-table td{
-
-padding:5px;
-}
-
-#buffer-table tr.buffer-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#A8A8A8;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/button.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/button.css
deleted file mode 100644
index 6b437a3b6acb6f81fb7b79d3208c19af17c06656..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/button.css
+++ /dev/null
@@ -1,427 +0,0 @@
-button {
-  font: 14px "Trebuchet MS";
-  background-color: 	#0000FF ;
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
-  color: #fff;
-  text-rendering: optimizeLegibility;
-  text-shadow: 0 -1px 1px #222;
-  padding: 3px 5px 3px 5px;
-  border: 40;
-  border-radius: 5px;
-  border-bottom: 1px solid #222;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
-button.first {
-  border-top-left-radius: 5px;
-  border-bottom-left-radius: 5px;
-}
-
-button.last {
-  border-top-right-radius: 5px;
-  border-bottom-right-radius: 5px;
-}
-
-button.active {
-  background-color: rgb(65,102,133);
-}
-
-button:hover {
-  background-color: steelblue;
-}
-
-input {
-  font: 14px "Trebuchet MS";
-  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
-  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
-  background-image: -webkit-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,.1));
-  color: #000;
-  text-rendering: optimizeLegibility;
-  padding: 3px 5px 3px 5px;
-  border: 0;
-  border-radius: 0;
-  margin: 0;
-  -moz-box-shadow: 0 1px 3px #999;
-  -webkit-box-shadow: 0 1px 3px #999;
-  box-shadow: 0 1px 3px #999;
-}
-
-
-#chemical_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#A8A8A8;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#chemical_browser a:visited
-{
-color:#000000;
-background-color:#A8A8A8;
-}
-#chemical_browser a:hover
-{
-background-color:#E0E0E0;
-color:#FFFFFF;
-}
-
-#oligo_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#0099CC;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#oligo_browser a:visited
-{
-color:#000000;
-background-color:#0099CC;
-}
-#oligo_browser a:hover
-{
-background-color:#CCFFFF;
-color:#FFFFFF;
-}
-
-
-#yeast_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:	#CCCC99;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#yeast_browser a:visited
-{
-color:#000000;
-background-color:	#CCCC99;
-}
-#yeast_browser a:hover
-{
-background-color:	#FFFFCC;
-color:#FFFFFF;
-}
-
-#plasmid_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#ffcb99;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#plasmid_browser a:visited
-{
-color:#000000;
-background-color:#ffcb99;
-}
-#plasmid_browser a:hover
-{
-background-color:#ffe5cc;
-color:#FFFFFF;
-}
-
-
-#antibody_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#A8A8A8;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#antibody_browser a:visited
-{
-color:#000000;
-background-color:#A8A8A8;
-}
-#antibody_browser a:hover
-{
-background-color:#E0E0E0;
-color:#FFFFFF;
-}
-
-#protocol_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#ABBF99;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#protocol_browser a:visited
-{
-color:#000000;
-background-color:#ABBF99;
-}
-#protocol_browser a:hover
-{
-background-color:#E5FFCC;
-color:#FFFFFF;
-}
-
-#media_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#A8A8A8;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#media_browser a:visited
-{
-color:#000000;
-background-color:#A8A8A8;
-}
-#media_browser a:hover
-{
-background-color:#E0E0E0;
-color:#FFFFFF;
-}
-
-
-#enzyme_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#A8A8A8;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#enzyme_browser a:visited
-{
-color:#000000;
-background-color:#A8A8A8;
-}
-#enzyme_browser a:hover
-{
-background-color:#E0E0E0;
-color:#FFFFFF;
-}
-
-
-#bacteria_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#A8A8A8;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#bacteria_browser a:visited
-{
-color:#000000;
-background-color:#A8A8A8;
-}
-#bacteria_browser a:hover
-{
-background-color:#E0E0E0;
-color:#FFFFFF;
-}
-
-#pcr_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#ABBF99;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#pcr_browser a:visited
-{
-color:#000000;
-background-color:#ABBF99;
-}
-#pcr_browser a:hover
-{
-background-color:#E5FFCC;
-color:#FFFFFF;
-}
-
-
-#western_blotting_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#ABBF99;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#western_blotting_browser a:visited
-{
-color:#000000;
-background-color:#ABBF99;
-}
-#western_blotting_browser a:hover
-{
-background-color:#E5FFCC;
-color:#FFFFFF;
-}
-
-
-#buffer_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#000000;
-background-color:#A8A8A8;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#buffer_browser a:visited
-{
-color:#000000;
-background-color:#A8A8A8;
-}
-#buffer_browser a:hover
-{
-background-color:#E0E0E0;
-color:#FFFFFF;
-}
-
-
-#search_browser a:link
-{
-display:block;
-font-weight:bold;
-color:#FFFFFF;
-background-color:#0000FF;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#search_browser a:visited
-{
-color:#FFFFFF;
-background-color:#0000FF;
-}
-#search_browser a:hover
-{
-background-color:steelblue;
-color:#FFFFFF;
-}
-
-
-#title{
-  font: 35px "Trebuchet MS";
-  color: #0000cc;
-  font-weight:bold;
-  text-align:center;
-}
-
-#filter-button a:link
-{
-display:block;
-font-weight:bold;
-color:#FFFFFF;
-background-color:#0000FF;
-width:120px;
-text-align:center;
-padding:4px;
-text-decoration:none;
-border: 40;
-border-radius: 5px;
-border-bottom: 1px solid #222;
-margin: 0;
-}
-#filter-button a:hover
-{
-background-color:steelblue;
-color:#FFFFFF;
-}
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/chemical-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/chemical-body-style.css
deleted file mode 100644
index 42591124c777dd6f6a0d79c6aee468a347fc2cb8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/chemical-body-style.css
+++ /dev/null
@@ -1,37 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-
-
-.chemical-table-data-cell {
-	overflow: hidden;
-}
-
-#chemical-table tr:nth-child(odd) td{
-  background-color:#E0E0E0;
-}
-
-
-#chemical-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-
-#chemical-table td{
-padding:5px;
-}
-
-#chemical-table tr.chemical-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#A8A8A8;	
-}
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/chemical-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/chemical-browser.html
deleted file mode 100644
index 70ead0aa5d1ec888cfd46ef78c96a169fe197373..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/chemical-browser.html
+++ /dev/null
@@ -1,540 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Chemical Browser</title>
-	<link type="text/css" rel="stylesheet" href="chemical-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All chemicals
-var chemicals = null;
-
-/// The chemicals that are currently being inspected
-var inspectedChemicals = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs(d)
-{
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	pairs.sort(function(a, b) { 
-		if (a[0] == b[0]) return 0;
-		// Sort in reverse lexicographical
-		return (a[0] < b[0]) ? -1 : 1;
-	});
-	return pairs;
-}
-
-/** Initialize the chemicals variable */
-function initializeChemicals(result)
-{
-	// Split the chemicals into two groups, the ones that start with FRC in their sample name and the other ones.
-	var frcChemicals = [], otherChemicals = [];
-	var frcRegex = /^FRC[0-9]+/;
-	frcRegex.compile(frcRegex);
-	result.forEach(function(sample) { 
-		if (frcRegex.test(sample.code)) {
-			frcChemicals.push(sample);
-		} else {
-			otherChemicals.push(sample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherChemicals.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frcChemicals.sort(function(a, b) {
-		// Sort based on the FRC number
-		var frcNumberA = parseInt(a.code.substring(3));
-		var frcNumberB = parseInt(b.code.substring(3));
-		return (frcNumberA < frcNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of chemicals
-	chemicals = frcChemicals.concat(otherChemicals);
-}
-
-/** Set the size of the chemical-table based on whether or not inspectors are visible */
-function resizeChemicalTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	if (inspectedChemicals.length > 0) {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var chemicalTableTransition = d3.selectAll('div.chemical-table-data-cell');
-	chemicalTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectChemical(chemical)
-{
-	if (inspectedChemicals.indexOf(chemical) < 0) {
-		inspectedChemicals.push(chemical);
-		openbisServer.listDataSetsForSample(chemical, true, dataset.curry(chemical));
-	}
-	resizeChemicalTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(chemical)
-{
-	var index = inspectedChemicals.indexOf(chemical);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedChemicals.splice(index, 1);
-	resizeChemicalTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedChemicals, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs(d.properties) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-			
-/*
-	// Add a caption, but make sure there is just one (this does not work with select())
-	downloadTable.selectAll("caption")
-			.data(downloadTableCaption)
-		.enter()
-			.append("caption").text(function(d) { return d; });
-			
-	// We just want to see non-directories here
-	var downloadTableRow = downloadTable.selectAll("tr").data(filesForSequencingSample, function(d) { return d.pathInDataSet });
-	downloadTableRow
-		.enter()
-			.append("tr")
-				.append("td")
-				.style("text-align", "left")
-				.on("click", downloadTableFile)
-				.text(function(d) { return d.label; });
-	downloadTableRow
-		.exit()
-			.transition()
-				.duration(duration)
-				.style("opacity", "0")
-				.remove();
-	
-*/
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeChemicals(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (chemicals.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-		var selection = d3.select("#vis").select("#chemical-table").selectAll("tr.chemical-table-data").data(chemicals);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "chemical-table-data")
-		.on("click", inspectChemical)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.SUPPLIER, sample.properties.ARTICLE_NUMBER, sample.properties.LOCAL_ID, sample.properties.STORAGE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "chemical-table-data-cell")
-			.text(String)
-}
-
-function chemicalFilter(filter, property, element, index, array) {
-
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(nameFilterText, supplierFilterText, artnumFilterText, locidFilterText, storageFilterText)
-{
-	if (nameFilterText == undefined) 
-	{
-		nameFilterText = "";
-	}
-	
-	if (supplierFilterText == undefined) 
-	{
-		supplierFilterText = "";
-	}
-	
-	if (artnumFilterText == undefined) 
-	{
-		artnumFilterText = "";
-	}
-	
-	if (locidFilterText == undefined) 
-	{
-		locidFilterText = "";
-	}
-	
-	if (storageFilterText == undefined) 
-	{
-		storageFilterText = "";
-	}
-	
-	
-	
-	var displayedChemicals = chemicals.filter(chemicalFilter.curry(nameFilterText, "NAME"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(supplierFilterText, "SUPPLIER"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(artnumFilterText, "ARTICLE_NUMBER"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(locidFilterText, "LOCAL_ID"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(storageFilterText, "STORAGE"));
-	
-	
-	
-
-	var selection2 = d3.select("#vis").select("#chemical-table").selectAll("tr.chemical-table-data").data(chemicals);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedChemicals) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-			
-		
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
- 
- function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "CHEMICAL" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamples(sampleCriteria, displayReturnedSamples);
-
-}
- 
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#name_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});	
-	
-	$('#supplier_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});	
-	
-		$('#artnum_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});	
-	
-	$('#locid_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});		
-	
-
-	$('#storage_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});		
-
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> CHEMICALS </div>
-		<div id ="sectionsContainer"><div>
-		<div id="filter-button"	style="padding-left:400px; padding-top: 570px; font-weight:bold; padding-bottom:30px;"> <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> </div>
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="position:absolute; top: 680px; left: 400px"><td style="font-weight: bold; width: 200px">Chemical Name</td><td><input style="width: 200px" id="name_filter" type="text"></td></tr> 		
-			  <tr style="position:absolute; top: 720px; left: 400px"><td style="font-weight: bold;  width: 200px">Supplier</td><td><input style="width: 200px" id="supplier_filter" type="text"></td></tr>
-				<tr style="position:absolute; top: 760px; left: 400px"><td style="font-weight: bold;  width: 200px">Art. Number</td><td> <input style="width: 200px" id="artnum_filter" type="text"></td></tr> 		
-      	<tr style="position:absolute; top: 800px; left: 400px"><td style="font-weight: bold;  width: 200px">Local ID</td><td> <input style="width: 200px" id="locid_filter" type="text"></td></tr> 		
-   	  	<tr style="position:absolute; top: 840px; left: 400px"><td style="font-weight: bold;  width: 200px">Storage</td><td> <input style="width: 200px" id="storage_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-		
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; height: 500px; top: 100px; overflow: auto">
-		  <table cellspacing="10" cellpadding="20">
-			<table id="chemical-table" style="float: left">
-			  <tr class="chemical-table-header"><th>Code</th><th>Name</th><th>Supplier</th><th>Art. Number</th><th>Local ID</th><th>Storage</th></tr>
-			</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/common.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/common.js
deleted file mode 100644
index dba70b6169ff008bf4330143f6413b771e32f55a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/common.js
+++ /dev/null
@@ -1,110 +0,0 @@
-var openbisUrl = 'https://localhost:8443/';
-var dssUrl = 'https://localhost:8444/datastore_server';
-
-function dataset(sample, data) {
-   if(data.result){
-      for (var i = 0; i < data.result.length; i++) {
-        console.log(data.result)
-        openbisServer.listFilesForDataSet(data.result[i].code, "/", true, filelist.curry(sample, data.result[i]));
-      }
-   }
-}
-
-function filelist(sample, dataset, files) {
-	for (var i in files.result) {
-		if (!files.result[i].isDirectory) {
-			var inspector = inspectors.select("#"+sample.code+"_INSPECTOR");
-			var pathInDataSet = files.result[i].pathInDataSet;
-			
-			if(pathInDataSet){
-				var downloadUrl = dssUrl+"/"+dataset.code+"/"+pathInDataSet+"?sessionID=" + openbisServer.getSession();
-				inspector.select("td.data_sets").append("a").attr("href", downloadUrl).text(pathInDataSet)
-				inspector.select("td.data_sets").append("br");
-				
-				if (/\.svg$/.test(pathInDataSet)) {
-						// Retrieve the svg file and inject it into the DOM
-						d3.xml(downloadUrl, "image/svg+xml", function(xml) {
-							var importedNode = document.importNode(xml.documentElement, true);
-							d3.select(importedNode)
-								.attr("width", inspectorsWidth - 20)
-								.attr("height", inspectorsWidth - 20)
-								.attr("viewBox", "200 200 650 650");
-							inspector.node().appendChild(importedNode);
-						});
-				}
-			}
-		}
-	}
-}
-
-//
-// UI Related
-//
-
-function createTableFromProperties() {
-	var tableTemplate = "<table id=\"yeast-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\" bordercolor=\"white\" class=\"display\" width=\"100%\"><thead><tr class=\"yeast-table-header\"><th>Code</th>";
-	for(var i=0; i<SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME.length;i++) {
-		tableTemplate += "<th>" + SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME[i]+ "</th>";
-	}
-	tableTemplate += "</tr></thead><tbody></tbody></table>";
-	$("#tableContainer").append(tableTemplate);
-}
-
-function createTableFilterFromProperties() {
-	var PADDING = 40;
-	var START = 660;
-	
-	
-	var tableTemplate = "<table>";
-	for(var i=0; i<SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME.length;i++) {
-		START = START+PADDING;
-		tableTemplate += "<tr style=\"position:absolute; top: "+START+"px; left: 200px\"><td style=\"font-weight: bold; width: 200px\">"+SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME[i]+"</td><td><input style=\"width: 200px\" id=\""+SAMPLE_TYPE_PROPERTIES[i]+"_filter\" type=\"text\"></td></tr>";
-	}
-	
-	tableTemplate += "</table>";
-	$("#filterContainer").append(tableTemplate);
-}
-
-function createVisualizeFiltersFromProperties() {
-	for(var i=0;i<SAMPLE_TYPE_PROPERTIES.length;i++) {
-		$('#'+SAMPLE_TYPE_PROPERTIES[i]+'_filter').keyup(function() {
-			var filterResults = [];
-			for(var i=0;i<SAMPLE_TYPE_PROPERTIES.length;i++) {
-				filterResults[i] = $('#'+SAMPLE_TYPE_PROPERTIES[i]+'_filter').val();
-			}
-			
-			visualize(
-				filterResults
-			);
-		});	
-	}
-}
-
-function populateMenu() {
-	
-	var menu = "";
-		menu += "<div id='button-group'>	<button id='logout-button' style='position: absolute; right:10px; top:10px;'>Logout</button> </div>";
-		menu += "<div id='search_browser' style='position: absolute; left:10px; top:100px'> <a href='search-browser.html'>Search</a> </div>";
-		menu += "<div id='bacteria_browser'	style='position: absolute; left:10px; top:150px'> <a href='bacteria-browser.html'>Bacteria</a> </div>";
-		menu += "<div id='chemical_browser'	style='position: absolute; left:10px; top:200px'> <a href='chemical-browser.html'>Chemicals</a> </div>";
-		menu += "<div id='antibody_browser' style='position: absolute; left:10px; top:250px'> <a href='antibody-browser.html'>Antibodies</a> </div>";
-		menu += "<div id='media_browser' style='position: absolute; left:10px; top:300px'> <a href='media-browser.html'>Media</a> </div>";
-		menu += "<div id='buffer_browser' style='position: absolute; left:10px; top:350px'> <a href='solutions_buffers-browser.html'>Solutions Buffers</a> </div>";
-		menu += "<div id='enzyme_browser' style='position: absolute; left:10px; top:400px'> <a href='enzyme-browser.html'>Enzymes</a> </div>";
-		menu += "<div id='oligo_browser'	style='position: absolute; left:10px; top:450px'> <a href='oligo-browser.html'>Oligos</a> </div>";
-		menu += "<div id='plasmid_browser'	style='position: absolute; left:10px; top:500px'> <a href='plasmid-browser.html'>Plasmids</a> </div>";
-		menu += "<div id='yeast_browser' style='position: absolute; left:10px; top:550px'> <a href='yeast-browser.html'>Yeasts</a> </div>";
-		menu += "<div id='protocol_browser' style='position: absolute; left:10px; top:600px'> <a href='general_protocol-browser.html'>General Protocols</a> </div>";
-		menu += "<div id='pcr_browser' style='position: absolute; left:10px; top:650px'> <a href='pcr-browser.html'>PCR</a> </div>";
-		menu += "<div id='western_blotting_browser' style='position: absolute; left:10px; top:700px'> <a href='western_blotting-browser.html'>Western Blotting</a> </div>";
-		
-	$("#sectionsContainer").append(menu);
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.js
deleted file mode 100755
index 13abb6dbc6f9665c005209b8e09d0dc97266d1f7..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.js
+++ /dev/null
@@ -1,4013 +0,0 @@
-(function(){if (!Date.now) Date.now = function() {
-  return +new Date;
-};
-try {
-  document.createElement("div").style.setProperty("opacity", 0, "");
-} catch (error) {
-  var d3_style_prototype = CSSStyleDeclaration.prototype,
-      d3_style_setProperty = d3_style_prototype.setProperty;
-  d3_style_prototype.setProperty = function(name, value, priority) {
-    d3_style_setProperty.call(this, name, value + "", priority);
-  };
-}
-d3 = {version: "2.1.3"}; // semver
-var d3_arraySubclass = [].__proto__?
-
-// Until ECMAScript supports array subclassing, prototype injection works well.
-function(array, prototype) {
-  array.__proto__ = prototype;
-}:
-
-// And if your browser doesn't support __proto__, we'll use direct extension.
-function(array, prototype) {
-  for (var property in prototype) array[property] = prototype[property];
-};
-function d3_this() {
-  return this;
-}
-d3.functor = function(v) {
-  return typeof v === "function" ? v : function() { return v; };
-};
-// A getter-setter method that preserves the appropriate `this` context.
-d3.rebind = function(object, method) {
-  return function() {
-    var x = method.apply(object, arguments);
-    return arguments.length ? object : x;
-  };
-};
-d3.ascending = function(a, b) {
-  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-};
-d3.descending = function(a, b) {
-  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-};
-d3.min = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
-  }
-  return a;
-};
-d3.max = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
-  }
-  return a;
-};
-d3.sum = function(array, f) {
-  var s = 0,
-      n = array.length,
-      a,
-      i = -1;
-
-  if (arguments.length === 1) {
-    while (++i < n) if (!isNaN(a = +array[i])) s += a;
-  } else {
-    while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
-  }
-
-  return s;
-};
-// R-7 per <http://en.wikipedia.org/wiki/Quantile>
-d3.quantile = function(values, p) {
-  var H = (values.length - 1) * p + 1,
-      h = Math.floor(H),
-      v = values[h - 1],
-      e = H - h;
-  return e ? v + e * (values[h] - v) : v;
-};
-d3.zip = function() {
-  if (!(n = arguments.length)) return [];
-  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
-    for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
-      zip[j] = arguments[j][i];
-    }
-  }
-  return zips;
-};
-
-function d3_zipLength(d) {
-  return d.length;
-}
-// Locate the insertion point for x in a to maintain sorted order. The
-// arguments lo and hi may be used to specify a subset of the array which should
-// be considered; by default the entire array is used. If x is already present
-// in a, the insertion point will be before (to the left of) any existing
-// entries. The return value is suitable for use as the first argument to
-// `array.splice` assuming that a is already sorted.
-//
-// The returned insertion point i partitions the array a into two halves so that
-// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi]
-// for the right side.
-d3.bisectLeft = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (a[mid] < x) lo = mid + 1;
-    else hi = mid;
-  }
-  return lo;
-};
-
-// Similar to bisectLeft, but returns an insertion point which comes after (to
-// the right of) any existing entries of x in a.
-//
-// The returned insertion point i partitions the array into two halves so that
-// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi]
-// for the right side.
-d3.bisect =
-d3.bisectRight = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (x < a[mid]) hi = mid;
-    else lo = mid + 1;
-  }
-  return lo;
-};
-d3.first = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) > 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.last = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) <= 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.nest = function() {
-  var nest = {},
-      keys = [],
-      sortKeys = [],
-      sortValues,
-      rollup;
-
-  function map(array, depth) {
-    if (depth >= keys.length) return rollup
-        ? rollup.call(nest, array) : (sortValues
-        ? array.sort(sortValues)
-        : array);
-
-    var i = -1,
-        n = array.length,
-        key = keys[depth++],
-        keyValue,
-        object,
-        o = {};
-
-    while (++i < n) {
-      if ((keyValue = key(object = array[i])) in o) {
-        o[keyValue].push(object);
-      } else {
-        o[keyValue] = [object];
-      }
-    }
-
-    for (keyValue in o) {
-      o[keyValue] = map(o[keyValue], depth);
-    }
-
-    return o;
-  }
-
-  function entries(map, depth) {
-    if (depth >= keys.length) return map;
-
-    var a = [],
-        sortKey = sortKeys[depth++],
-        key;
-
-    for (key in map) {
-      a.push({key: key, values: entries(map[key], depth)});
-    }
-
-    if (sortKey) a.sort(function(a, b) {
-      return sortKey(a.key, b.key);
-    });
-
-    return a;
-  }
-
-  nest.map = function(array) {
-    return map(array, 0);
-  };
-
-  nest.entries = function(array) {
-    return entries(map(array, 0), 0);
-  };
-
-  nest.key = function(d) {
-    keys.push(d);
-    return nest;
-  };
-
-  // Specifies the order for the most-recently specified key.
-  // Note: only applies to entries. Map keys are unordered!
-  nest.sortKeys = function(order) {
-    sortKeys[keys.length - 1] = order;
-    return nest;
-  };
-
-  // Specifies the order for leaf values.
-  // Applies to both maps and entries array.
-  nest.sortValues = function(order) {
-    sortValues = order;
-    return nest;
-  };
-
-  nest.rollup = function(f) {
-    rollup = f;
-    return nest;
-  };
-
-  return nest;
-};
-d3.keys = function(map) {
-  var keys = [];
-  for (var key in map) keys.push(key);
-  return keys;
-};
-d3.values = function(map) {
-  var values = [];
-  for (var key in map) values.push(map[key]);
-  return values;
-};
-d3.entries = function(map) {
-  var entries = [];
-  for (var key in map) entries.push({key: key, value: map[key]});
-  return entries;
-};
-d3.permute = function(array, indexes) {
-  var permutes = [],
-      i = -1,
-      n = indexes.length;
-  while (++i < n) permutes[i] = array[indexes[i]];
-  return permutes;
-};
-d3.merge = function(arrays) {
-  return Array.prototype.concat.apply([], arrays);
-};
-d3.split = function(array, f) {
-  var arrays = [],
-      values = [],
-      value,
-      i = -1,
-      n = array.length;
-  if (arguments.length < 2) f = d3_splitter;
-  while (++i < n) {
-    if (f.call(values, value = array[i], i)) {
-      values = [];
-    } else {
-      if (!values.length) arrays.push(values);
-      values.push(value);
-    }
-  }
-  return arrays;
-};
-
-function d3_splitter(d) {
-  return d == null;
-}
-function d3_collapse(s) {
-  return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
-}
-/**
- * @param {number} start
- * @param {number=} stop
- * @param {number=} step
- */
-d3.range = function(start, stop, step) {
-  if (arguments.length < 3) {
-    step = 1;
-    if (arguments.length < 2) {
-      stop = start;
-      start = 0;
-    }
-  }
-  if ((stop - start) / step == Infinity) throw new Error("infinite range");
-  var range = [],
-       i = -1,
-       j;
-  if (step < 0) while ((j = start + step * ++i) > stop) range.push(j);
-  else while ((j = start + step * ++i) < stop) range.push(j);
-  return range;
-};
-d3.requote = function(s) {
-  return s.replace(d3_requote_re, "\\$&");
-};
-
-var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
-d3.round = function(x, n) {
-  return n
-      ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n)
-      : Math.round(x);
-};
-d3.xhr = function(url, mime, callback) {
-  var req = new XMLHttpRequest;
-  if (arguments.length < 3) callback = mime;
-  else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
-  req.open("GET", url, true);
-  req.onreadystatechange = function() {
-    if (req.readyState === 4) callback(req.status < 300 ? req : null);
-  };
-  req.send(null);
-};
-d3.text = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseText);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.json = function(url, callback) {
-  d3.text(url, "application/json", function(text) {
-    callback(text ? JSON.parse(text) : null);
-  });
-};
-d3.html = function(url, callback) {
-  d3.text(url, "text/html", function(text) {
-    if (text != null) { // Treat empty string as valid HTML.
-      var range = document.createRange();
-      range.selectNode(document.body);
-      text = range.createContextualFragment(text);
-    }
-    callback(text);
-  });
-};
-d3.xml = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseXML);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.ns = {
-
-  prefix: {
-    svg: "http://www.w3.org/2000/svg",
-    xhtml: "http://www.w3.org/1999/xhtml",
-    xlink: "http://www.w3.org/1999/xlink",
-    xml: "http://www.w3.org/XML/1998/namespace",
-    xmlns: "http://www.w3.org/2000/xmlns/"
-  },
-
-  qualify: function(name) {
-    var i = name.indexOf(":");
-    return i < 0 ? name : {
-      space: d3.ns.prefix[name.substring(0, i)],
-      local: name.substring(i + 1)
-    };
-  }
-
-};
-/** @param {...string} types */
-d3.dispatch = function(types) {
-  var dispatch = {},
-      type;
-  for (var i = 0, n = arguments.length; i < n; i++) {
-    type = arguments[i];
-    dispatch[type] = d3_dispatch(type);
-  }
-  return dispatch;
-};
-
-function d3_dispatch(type) {
-  var dispatch = {},
-      listeners = [];
-
-  dispatch.add = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      if (listeners[i].listener == listener) return dispatch; // already registered
-    }
-    listeners.push({listener: listener, on: true});
-    return dispatch;
-  };
-
-  dispatch.remove = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      var l = listeners[i];
-      if (l.listener == listener) {
-        l.on = false;
-        listeners = listeners.slice(0, i).concat(listeners.slice(i + 1));
-        break;
-      }
-    }
-    return dispatch;
-  };
-
-  dispatch.dispatch = function() {
-    var ls = listeners; // defensive reference
-    for (var i = 0, n = ls.length; i < n; i++) {
-      var l = ls[i];
-      if (l.on) l.listener.apply(this, arguments);
-    }
-  };
-
-  return dispatch;
-};
-// TODO align
-d3.format = function(specifier) {
-  var match = d3_format_re.exec(specifier),
-      fill = match[1] || " ",
-      sign = match[3] || "",
-      zfill = match[5],
-      width = +match[6],
-      comma = match[7],
-      precision = match[8],
-      type = match[9],
-      percentage = false,
-      integer = false;
-
-  if (precision) precision = precision.substring(1);
-
-  if (zfill) {
-    fill = "0"; // TODO align = "=";
-    if (comma) width -= Math.floor((width - 1) / 4);
-  }
-
-  switch (type) {
-    case "n": comma = true; type = "g"; break;
-    case "%": percentage = true; type = "f"; break;
-    case "p": percentage = true; type = "r"; break;
-    case "d": integer = true; precision = "0"; break;
-  }
-
-  type = d3_format_types[type] || d3_format_typeDefault;
-
-  return function(value) {
-    var number = percentage ? value * 100 : +value,
-        negative = (number < 0) && (number = -number) ? "\u2212" : sign;
-
-    // Return the empty string for floats formatted as ints.
-    if (integer && (number % 1)) return "";
-
-    // Convert the input value to the desired precision.
-    value = type(number, precision);
-
-    // If the fill character is 0, the sign and group is applied after the fill.
-    if (zfill) {
-      var length = value.length + negative.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-    }
-
-    // Otherwise (e.g., space-filling), the sign and group is applied before.
-    else {
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-      var length = value.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-    }
-    if (percentage) value += "%";
-
-    return value;
-  };
-};
-
-// [[fill]align][sign][#][0][width][,][.precision][type]
-var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
-
-var d3_format_types = {
-  g: function(x, p) { return x.toPrecision(p); },
-  e: function(x, p) { return x.toExponential(p); },
-  f: function(x, p) { return x.toFixed(p); },
-  r: function(x, p) {
-    var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
-    return d3.round(x, p - n).toFixed(Math.max(0, Math.min(20, p - n)));
-  }
-};
-
-function d3_format_typeDefault(x) {
-  return x + "";
-}
-
-// Apply comma grouping for thousands.
-function d3_format_group(value) {
-  var i = value.lastIndexOf("."),
-      f = i >= 0 ? value.substring(i) : (i = value.length, ""),
-      t = [];
-  while (i > 0) t.push(value.substring(i -= 3, i + 3));
-  return t.reverse().join(",") + f;
-}
-/*
- * TERMS OF USE - EASING EQUATIONS
- *
- * Open source under the BSD License.
- *
- * Copyright 2001 Robert Penner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- *
- * - Neither the name of the author nor the names of contributors may be used to
- *   endorse or promote products derived from this software without specific
- *   prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-var d3_ease_quad = d3_ease_poly(2),
-    d3_ease_cubic = d3_ease_poly(3);
-
-var d3_ease = {
-  linear: function() { return d3_ease_linear; },
-  poly: d3_ease_poly,
-  quad: function() { return d3_ease_quad; },
-  cubic: function() { return d3_ease_cubic; },
-  sin: function() { return d3_ease_sin; },
-  exp: function() { return d3_ease_exp; },
-  circle: function() { return d3_ease_circle; },
-  elastic: d3_ease_elastic,
-  back: d3_ease_back,
-  bounce: function() { return d3_ease_bounce; }
-};
-
-var d3_ease_mode = {
-  "in": function(f) { return f; },
-  "out": d3_ease_reverse,
-  "in-out": d3_ease_reflect,
-  "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
-};
-
-d3.ease = function(name) {
-  var i = name.indexOf("-"),
-      t = i >= 0 ? name.substring(0, i) : name,
-      m = i >= 0 ? name.substring(i + 1) : "in";
-  return d3_ease_clamp(d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1))));
-};
-
-function d3_ease_clamp(f) {
-  return function(t) {
-    return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
-  };
-}
-
-function d3_ease_reverse(f) {
-  return function(t) {
-    return 1 - f(1 - t);
-  };
-}
-
-function d3_ease_reflect(f) {
-  return function(t) {
-    return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
-  };
-}
-
-function d3_ease_linear(t) {
-  return t;
-}
-
-function d3_ease_poly(e) {
-  return function(t) {
-    return Math.pow(t, e);
-  }
-}
-
-function d3_ease_sin(t) {
-  return 1 - Math.cos(t * Math.PI / 2);
-}
-
-function d3_ease_exp(t) {
-  return Math.pow(2, 10 * (t - 1));
-}
-
-function d3_ease_circle(t) {
-  return 1 - Math.sqrt(1 - t * t);
-}
-
-function d3_ease_elastic(a, p) {
-  var s;
-  if (arguments.length < 2) p = 0.45;
-  if (arguments.length < 1) { a = 1; s = p / 4; }
-  else s = p / (2 * Math.PI) * Math.asin(1 / a);
-  return function(t) {
-    return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
-  };
-}
-
-function d3_ease_back(s) {
-  if (!s) s = 1.70158;
-  return function(t) {
-    return t * t * ((s + 1) * t - s);
-  };
-}
-
-function d3_ease_bounce(t) {
-  return t < 1 / 2.75 ? 7.5625 * t * t
-      : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75
-      : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375
-      : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
-}
-d3.event = null;
-d3.interpolate = function(a, b) {
-  var i = d3.interpolators.length, f;
-  while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
-  return f;
-};
-
-d3.interpolateNumber = function(a, b) {
-  b -= a;
-  return function(t) { return a + b * t; };
-};
-
-d3.interpolateRound = function(a, b) {
-  b -= a;
-  return function(t) { return Math.round(a + b * t); };
-};
-
-d3.interpolateString = function(a, b) {
-  var m, // current match
-      i, // current index
-      j, // current index (for coallescing)
-      s0 = 0, // start index of current string prefix
-      s1 = 0, // end index of current string prefix
-      s = [], // string constants and placeholders
-      q = [], // number interpolators
-      n, // q.length
-      o;
-
-  // Reset our regular expression!
-  d3_interpolate_number.lastIndex = 0;
-
-  // Find all numbers in b.
-  for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
-    if (m.index) s.push(b.substring(s0, s1 = m.index));
-    q.push({i: s.length, x: m[0]});
-    s.push(null);
-    s0 = d3_interpolate_number.lastIndex;
-  }
-  if (s0 < b.length) s.push(b.substring(s0));
-
-  // Find all numbers in a.
-  for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
-    o = q[i];
-    if (o.x == m[0]) { // The numbers match, so coallesce.
-      if (o.i) {
-        if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i - 1] += o.x;
-          s.splice(o.i, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i - 1] += o.x + s[o.i + 1];
-          s.splice(o.i, 2);
-          for (j = i + 1; j < n; ++j) q[j].i -= 2;
-        }
-      } else {
-          if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i] = o.x;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i] = o.x + s[o.i + 1];
-          s.splice(o.i + 1, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        }
-      }
-      q.splice(i, 1);
-      n--;
-      i--;
-    } else {
-      o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
-    }
-  }
-
-  // Remove any numbers in b not found in a.
-  while (i < n) {
-    o = q.pop();
-    if (s[o.i + 1] == null) { // This match is followed by another number.
-      s[o.i] = o.x;
-    } else { // This match is followed by a string, so coallesce twice.
-      s[o.i] = o.x + s[o.i + 1];
-      s.splice(o.i + 1, 1);
-    }
-    n--;
-  }
-
-  // Special optimization for only a single match.
-  if (s.length === 1) {
-    return s[0] == null ? q[0].x : function() { return b; };
-  }
-
-  // Otherwise, interpolate each of the numbers and rejoin the string.
-  return function(t) {
-    for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
-    return s.join("");
-  };
-};
-
-d3.interpolateRgb = function(a, b) {
-  a = d3.rgb(a);
-  b = d3.rgb(b);
-  var ar = a.r,
-      ag = a.g,
-      ab = a.b,
-      br = b.r - ar,
-      bg = b.g - ag,
-      bb = b.b - ab;
-  return function(t) {
-    return "rgb(" + Math.round(ar + br * t)
-        + "," + Math.round(ag + bg * t)
-        + "," + Math.round(ab + bb * t)
-        + ")";
-  };
-};
-
-// interpolates HSL space, but outputs RGB string (for compatibility)
-d3.interpolateHsl = function(a, b) {
-  a = d3.hsl(a);
-  b = d3.hsl(b);
-  var h0 = a.h,
-      s0 = a.s,
-      l0 = a.l,
-      h1 = b.h - h0,
-      s1 = b.s - s0,
-      l1 = b.l - l0;
-  return function(t) {
-    return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
-  };
-};
-
-d3.interpolateArray = function(a, b) {
-  var x = [],
-      c = [],
-      na = a.length,
-      nb = b.length,
-      n0 = Math.min(a.length, b.length),
-      i;
-  for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
-  for (; i < na; ++i) c[i] = a[i];
-  for (; i < nb; ++i) c[i] = b[i];
-  return function(t) {
-    for (i = 0; i < n0; ++i) c[i] = x[i](t);
-    return c;
-  };
-};
-
-d3.interpolateObject = function(a, b) {
-  var i = {},
-      c = {},
-      k;
-  for (k in a) {
-    if (k in b) {
-      i[k] = d3_interpolateByName(k)(a[k], b[k]);
-    } else {
-      c[k] = a[k];
-    }
-  }
-  for (k in b) {
-    if (!(k in a)) {
-      c[k] = b[k];
-    }
-  }
-  return function(t) {
-    for (k in i) c[k] = i[k](t);
-    return c;
-  };
-}
-
-var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
-    d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1};
-
-function d3_interpolateByName(n) {
-  return n in d3_interpolate_rgb || /\bcolor\b/.test(n)
-      ? d3.interpolateRgb
-      : d3.interpolate;
-}
-
-d3.interpolators = [
-  d3.interpolateObject,
-  function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
-  function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); },
-  function(a, b) { return (typeof b === "string" ? b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(String(a), b); },
-  function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); }
-];
-function d3_uninterpolateNumber(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return (x - a) * b; };
-}
-
-function d3_uninterpolateClamp(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
-}
-d3.rgb = function(r, g, b) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)
-      : d3_rgb(~~r, ~~g, ~~b);
-};
-
-function d3_rgb(r, g, b) {
-  return new d3_Rgb(r, g, b);
-}
-
-function d3_Rgb(r, g, b) {
-  this.r = r;
-  this.g = g;
-  this.b = b;
-}
-
-d3_Rgb.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  var r = this.r,
-      g = this.g,
-      b = this.b,
-      i = 30;
-  if (!r && !g && !b) return d3_rgb(i, i, i);
-  if (r && r < i) r = i;
-  if (g && g < i) g = i;
-  if (b && b < i) b = i;
-  return d3_rgb(
-    Math.min(255, Math.floor(r / k)),
-    Math.min(255, Math.floor(g / k)),
-    Math.min(255, Math.floor(b / k)));
-};
-
-d3_Rgb.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_rgb(
-    Math.max(0, Math.floor(k * this.r)),
-    Math.max(0, Math.floor(k * this.g)),
-    Math.max(0, Math.floor(k * this.b)));
-};
-
-d3_Rgb.prototype.hsl = function() {
-  return d3_rgb_hsl(this.r, this.g, this.b);
-};
-
-d3_Rgb.prototype.toString = function() {
-  return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
-};
-
-function d3_rgb_hex(v) {
-  return v < 0x10 ? "0" + v.toString(16) : v.toString(16);
-}
-
-function d3_rgb_parse(format, rgb, hsl) {
-  var r = 0, // red channel; int in [0, 255]
-      g = 0, // green channel; int in [0, 255]
-      b = 0, // blue channel; int in [0, 255]
-      m1, // CSS color specification match
-      m2, // CSS color specification type (e.g., rgb)
-      name;
-
-  /* Handle hsl, rgb. */
-  m1 = /([a-z]+)\((.*)\)/i.exec(format);
-  if (m1) {
-    m2 = m1[2].split(",");
-    switch (m1[1]) {
-      case "hsl": {
-        return hsl(
-          parseFloat(m2[0]), // degrees
-          parseFloat(m2[1]) / 100, // percentage
-          parseFloat(m2[2]) / 100 // percentage
-        );
-      }
-      case "rgb": {
-        return rgb(
-          d3_rgb_parseNumber(m2[0]),
-          d3_rgb_parseNumber(m2[1]),
-          d3_rgb_parseNumber(m2[2])
-        );
-      }
-    }
-  }
-
-  /* Named colors. */
-  if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b);
-
-  /* Hexadecimal colors: #rgb and #rrggbb. */
-  if (format != null && format.charAt(0) === "#") {
-    if (format.length === 4) {
-      r = format.charAt(1); r += r;
-      g = format.charAt(2); g += g;
-      b = format.charAt(3); b += b;
-    } else if (format.length === 7) {
-      r = format.substring(1, 3);
-      g = format.substring(3, 5);
-      b = format.substring(5, 7);
-    }
-    r = parseInt(r, 16);
-    g = parseInt(g, 16);
-    b = parseInt(b, 16);
-  }
-
-  return rgb(r, g, b);
-}
-
-function d3_rgb_hsl(r, g, b) {
-  var min = Math.min(r /= 255, g /= 255, b /= 255),
-      max = Math.max(r, g, b),
-      d = max - min,
-      h,
-      s,
-      l = (max + min) / 2;
-  if (d) {
-    s = l < .5 ? d / (max + min) : d / (2 - max - min);
-    if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
-    else if (g == max) h = (b - r) / d + 2;
-    else h = (r - g) / d + 4;
-    h *= 60;
-  } else {
-    s = h = 0;
-  }
-  return d3_hsl(h, s, l);
-}
-
-function d3_rgb_parseNumber(c) { // either integer or percentage
-  var f = parseFloat(c);
-  return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
-}
-
-var d3_rgb_names = {
-  aliceblue: "#f0f8ff",
-  antiquewhite: "#faebd7",
-  aqua: "#00ffff",
-  aquamarine: "#7fffd4",
-  azure: "#f0ffff",
-  beige: "#f5f5dc",
-  bisque: "#ffe4c4",
-  black: "#000000",
-  blanchedalmond: "#ffebcd",
-  blue: "#0000ff",
-  blueviolet: "#8a2be2",
-  brown: "#a52a2a",
-  burlywood: "#deb887",
-  cadetblue: "#5f9ea0",
-  chartreuse: "#7fff00",
-  chocolate: "#d2691e",
-  coral: "#ff7f50",
-  cornflowerblue: "#6495ed",
-  cornsilk: "#fff8dc",
-  crimson: "#dc143c",
-  cyan: "#00ffff",
-  darkblue: "#00008b",
-  darkcyan: "#008b8b",
-  darkgoldenrod: "#b8860b",
-  darkgray: "#a9a9a9",
-  darkgreen: "#006400",
-  darkgrey: "#a9a9a9",
-  darkkhaki: "#bdb76b",
-  darkmagenta: "#8b008b",
-  darkolivegreen: "#556b2f",
-  darkorange: "#ff8c00",
-  darkorchid: "#9932cc",
-  darkred: "#8b0000",
-  darksalmon: "#e9967a",
-  darkseagreen: "#8fbc8f",
-  darkslateblue: "#483d8b",
-  darkslategray: "#2f4f4f",
-  darkslategrey: "#2f4f4f",
-  darkturquoise: "#00ced1",
-  darkviolet: "#9400d3",
-  deeppink: "#ff1493",
-  deepskyblue: "#00bfff",
-  dimgray: "#696969",
-  dimgrey: "#696969",
-  dodgerblue: "#1e90ff",
-  firebrick: "#b22222",
-  floralwhite: "#fffaf0",
-  forestgreen: "#228b22",
-  fuchsia: "#ff00ff",
-  gainsboro: "#dcdcdc",
-  ghostwhite: "#f8f8ff",
-  gold: "#ffd700",
-  goldenrod: "#daa520",
-  gray: "#808080",
-  green: "#008000",
-  greenyellow: "#adff2f",
-  grey: "#808080",
-  honeydew: "#f0fff0",
-  hotpink: "#ff69b4",
-  indianred: "#cd5c5c",
-  indigo: "#4b0082",
-  ivory: "#fffff0",
-  khaki: "#f0e68c",
-  lavender: "#e6e6fa",
-  lavenderblush: "#fff0f5",
-  lawngreen: "#7cfc00",
-  lemonchiffon: "#fffacd",
-  lightblue: "#add8e6",
-  lightcoral: "#f08080",
-  lightcyan: "#e0ffff",
-  lightgoldenrodyellow: "#fafad2",
-  lightgray: "#d3d3d3",
-  lightgreen: "#90ee90",
-  lightgrey: "#d3d3d3",
-  lightpink: "#ffb6c1",
-  lightsalmon: "#ffa07a",
-  lightseagreen: "#20b2aa",
-  lightskyblue: "#87cefa",
-  lightslategray: "#778899",
-  lightslategrey: "#778899",
-  lightsteelblue: "#b0c4de",
-  lightyellow: "#ffffe0",
-  lime: "#00ff00",
-  limegreen: "#32cd32",
-  linen: "#faf0e6",
-  magenta: "#ff00ff",
-  maroon: "#800000",
-  mediumaquamarine: "#66cdaa",
-  mediumblue: "#0000cd",
-  mediumorchid: "#ba55d3",
-  mediumpurple: "#9370db",
-  mediumseagreen: "#3cb371",
-  mediumslateblue: "#7b68ee",
-  mediumspringgreen: "#00fa9a",
-  mediumturquoise: "#48d1cc",
-  mediumvioletred: "#c71585",
-  midnightblue: "#191970",
-  mintcream: "#f5fffa",
-  mistyrose: "#ffe4e1",
-  moccasin: "#ffe4b5",
-  navajowhite: "#ffdead",
-  navy: "#000080",
-  oldlace: "#fdf5e6",
-  olive: "#808000",
-  olivedrab: "#6b8e23",
-  orange: "#ffa500",
-  orangered: "#ff4500",
-  orchid: "#da70d6",
-  palegoldenrod: "#eee8aa",
-  palegreen: "#98fb98",
-  paleturquoise: "#afeeee",
-  palevioletred: "#db7093",
-  papayawhip: "#ffefd5",
-  peachpuff: "#ffdab9",
-  peru: "#cd853f",
-  pink: "#ffc0cb",
-  plum: "#dda0dd",
-  powderblue: "#b0e0e6",
-  purple: "#800080",
-  red: "#ff0000",
-  rosybrown: "#bc8f8f",
-  royalblue: "#4169e1",
-  saddlebrown: "#8b4513",
-  salmon: "#fa8072",
-  sandybrown: "#f4a460",
-  seagreen: "#2e8b57",
-  seashell: "#fff5ee",
-  sienna: "#a0522d",
-  silver: "#c0c0c0",
-  skyblue: "#87ceeb",
-  slateblue: "#6a5acd",
-  slategray: "#708090",
-  slategrey: "#708090",
-  snow: "#fffafa",
-  springgreen: "#00ff7f",
-  steelblue: "#4682b4",
-  tan: "#d2b48c",
-  teal: "#008080",
-  thistle: "#d8bfd8",
-  tomato: "#ff6347",
-  turquoise: "#40e0d0",
-  violet: "#ee82ee",
-  wheat: "#f5deb3",
-  white: "#ffffff",
-  whitesmoke: "#f5f5f5",
-  yellow: "#ffff00",
-  yellowgreen: "#9acd32"
-};
-
-for (var d3_rgb_name in d3_rgb_names) {
-  d3_rgb_names[d3_rgb_name] = d3_rgb_parse(
-      d3_rgb_names[d3_rgb_name],
-      d3_rgb,
-      d3_hsl_rgb);
-}
-d3.hsl = function(h, s, l) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)
-      : d3_hsl(+h, +s, +l);
-};
-
-function d3_hsl(h, s, l) {
-  return new d3_Hsl(h, s, l);
-}
-
-function d3_Hsl(h, s, l) {
-  this.h = h;
-  this.s = s;
-  this.l = l;
-}
-
-d3_Hsl.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, this.l / k);
-};
-
-d3_Hsl.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, k * this.l);
-};
-
-d3_Hsl.prototype.rgb = function() {
-  return d3_hsl_rgb(this.h, this.s, this.l);
-};
-
-d3_Hsl.prototype.toString = function() {
-  return "hsl(" + this.h + "," + this.s * 100 + "%," + this.l * 100 + "%)";
-};
-
-function d3_hsl_rgb(h, s, l) {
-  var m1,
-      m2;
-
-  /* Some simple corrections for h, s and l. */
-  h = h % 360; if (h < 0) h += 360;
-  s = s < 0 ? 0 : s > 1 ? 1 : s;
-  l = l < 0 ? 0 : l > 1 ? 1 : l;
-
-  /* From FvD 13.37, CSS Color Module Level 3 */
-  m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
-  m1 = 2 * l - m2;
-
-  function v(h) {
-    if (h > 360) h -= 360;
-    else if (h < 0) h += 360;
-    if (h < 60) return m1 + (m2 - m1) * h / 60;
-    if (h < 180) return m2;
-    if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
-    return m1;
-  }
-
-  function vv(h) {
-    return Math.round(v(h) * 255);
-  }
-
-  return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
-}
-function d3_selection(groups) {
-  d3_arraySubclass(groups, d3_selectionPrototype);
-  return groups;
-}
-
-var d3_select = function(s, n) { return n.querySelector(s); },
-    d3_selectAll = function(s, n) { return n.querySelectorAll(s); };
-
-// Prefer Sizzle, if available.
-if (typeof Sizzle === "function") {
-  d3_select = function(s, n) { return Sizzle(s, n)[0]; };
-  d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
-}
-
-var d3_selectionPrototype = [];
-
-d3.selection = function() {
-  return d3_selectionRoot;
-};
-
-d3.selection.prototype = d3_selectionPrototype;
-d3_selectionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      group,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(subnode = selector.call(node, node.__data__, i));
-        if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selector(selector) {
-  return function() {
-    return d3_select(selector, this);
-  };
-}
-d3_selectionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node, node.__data__, i));
-        subgroup.parentNode = node;
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selectorAll(selector) {
-  return function() {
-    return d3_selectAll(selector, this);
-  };
-}
-d3_selectionPrototype.attr = function(name, value) {
-  name = d3.ns.qualify(name);
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    return name.local
-        ? node.getAttributeNS(name.space, name.local)
-        : node.getAttribute(name);
-  }
-
-  function attrNull() {
-    this.removeAttribute(name);
-  }
-
-  function attrNullNS() {
-    this.removeAttributeNS(name.space, name.local);
-  }
-
-  function attrConstant() {
-    this.setAttribute(name, value);
-  }
-
-  function attrConstantNS() {
-    this.setAttributeNS(name.space, name.local, value);
-  }
-
-  function attrFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttribute(name);
-    else this.setAttribute(name, x);
-  }
-
-  function attrFunctionNS() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttributeNS(name.space, name.local);
-    else this.setAttributeNS(name.space, name.local, x);
-  }
-
-  return this.each(value == null
-      ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
-      ? (name.local ? attrFunctionNS : attrFunction)
-      : (name.local ? attrConstantNS : attrConstant)));
-};
-d3_selectionPrototype.classed = function(name, value) {
-  var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    if (c = node.classList) return c.contains(name);
-    var c = node.className;
-    re.lastIndex = 0;
-    return re.test(c.baseVal != null ? c.baseVal : c);
-  }
-
-  function classedAdd() {
-    if (c = this.classList) return c.add(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    re.lastIndex = 0;
-    if (!re.test(cv)) {
-      cv = d3_collapse(cv + " " + name);
-      if (cb) c.baseVal = cv;
-      else this.className = cv;
-    }
-  }
-
-  function classedRemove() {
-    if (c = this.classList) return c.remove(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    cv = d3_collapse(cv.replace(re, " "));
-    if (cb) c.baseVal = cv;
-    else this.className = cv;
-  }
-
-  function classedFunction() {
-    (value.apply(this, arguments)
-        ? classedAdd
-        : classedRemove).call(this);
-  }
-
-  return this.each(typeof value === "function"
-      ? classedFunction : value
-      ? classedAdd
-      : classedRemove);
-};
-d3_selectionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return window
-      .getComputedStyle(this.node(), null)
-      .getPropertyValue(name);
-
-  function styleNull() {
-    this.style.removeProperty(name);
-  }
-
-  function styleConstant() {
-    this.style.setProperty(name, value, priority);
-  }
-
-  function styleFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.style.removeProperty(name);
-    else this.style.setProperty(name, x, priority);
-  }
-
-  return this.each(value == null
-      ? styleNull : (typeof value === "function"
-      ? styleFunction : styleConstant));
-};
-d3_selectionPrototype.property = function(name, value) {
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return this.node()[name];
-
-  function propertyNull() {
-    delete this[name];
-  }
-
-  function propertyConstant() {
-    this[name] = value;
-  }
-
-  function propertyFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) delete this[name];
-    else this[name] = x;
-  }
-
-  return this.each(value == null
-      ? propertyNull : (typeof value === "function"
-      ? propertyFunction : propertyConstant));
-};
-d3_selectionPrototype.text = function(value) {
-  return arguments.length < 1 ? this.node().textContent
-      : (this.each(typeof value === "function"
-      ? function() { this.textContent = value.apply(this, arguments); }
-      : function() { this.textContent = value; }));
-};
-d3_selectionPrototype.html = function(value) {
-  return arguments.length < 1 ? this.node().innerHTML
-      : (this.each(typeof value === "function"
-      ? function() { this.innerHTML = value.apply(this, arguments); }
-      : function() { this.innerHTML = value; }));
-};
-// TODO append(node)?
-// TODO append(function)?
-d3_selectionPrototype.append = function(name) {
-  name = d3.ns.qualify(name);
-
-  function append() {
-    return this.appendChild(document.createElement(name));
-  }
-
-  function appendNS() {
-    return this.appendChild(document.createElementNS(name.space, name.local));
-  }
-
-  return this.select(name.local ? appendNS : append);
-};
-// TODO insert(node, function)?
-// TODO insert(function, string)?
-// TODO insert(function, function)?
-d3_selectionPrototype.insert = function(name, before) {
-  name = d3.ns.qualify(name);
-
-  function insert() {
-    return this.insertBefore(
-        document.createElement(name),
-        d3_select(before, this));
-  }
-
-  function insertNS() {
-    return this.insertBefore(
-        document.createElementNS(name.space, name.local),
-        d3_select(before, this));
-  }
-
-  return this.select(name.local ? insertNS : insert);
-};
-// TODO remove(selector)?
-// TODO remove(node)?
-// TODO remove(function)?
-d3_selectionPrototype.remove = function() {
-  return this.each(function() {
-    var parent = this.parentNode;
-    if (parent) parent.removeChild(this);
-  });
-};
-// TODO data(null) for clearing data?
-d3_selectionPrototype.data = function(data, join) {
-  var enter = [],
-      update = [],
-      exit = [];
-
-  function bind(group, groupData) {
-    var i,
-        n = group.length,
-        m = groupData.length,
-        n0 = Math.min(n, m),
-        n1 = Math.max(n, m),
-        updateNodes = [],
-        enterNodes = [],
-        exitNodes = [],
-        node,
-        nodeData;
-
-    if (join) {
-      var nodeByKey = {},
-          keys = [],
-          key,
-          j = groupData.length;
-
-      for (i = -1; ++i < n;) {
-        key = join.call(node = group[i], node.__data__, i);
-        if (key in nodeByKey) {
-          exitNodes[j++] = node; // duplicate key
-        } else {
-          nodeByKey[key] = node;
-        }
-        keys.push(key);
-      }
-
-      for (i = -1; ++i < m;) {
-        node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-        delete nodeByKey[key];
-      }
-
-      for (i = -1; ++i < n;) {
-        if (keys[i] in nodeByKey) {
-          exitNodes[i] = group[i];
-        }
-      }
-    } else {
-      for (i = -1; ++i < n0;) {
-        node = group[i];
-        nodeData = groupData[i];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-      }
-      for (; i < m; ++i) {
-        enterNodes[i] = d3_selection_dataNode(groupData[i]);
-        updateNodes[i] = exitNodes[i] = null;
-      }
-      for (; i < n1; ++i) {
-        exitNodes[i] = group[i];
-        enterNodes[i] = updateNodes[i] = null;
-      }
-    }
-
-    enterNodes.update
-        = updateNodes;
-
-    enterNodes.parentNode
-        = updateNodes.parentNode
-        = exitNodes.parentNode
-        = group.parentNode;
-
-    enter.push(enterNodes);
-    update.push(updateNodes);
-    exit.push(exitNodes);
-  }
-
-  var i = -1,
-      n = this.length,
-      group;
-  if (typeof data === "function") {
-    while (++i < n) {
-      bind(group = this[i], data.call(group, group.parentNode.__data__, i));
-    }
-  } else {
-    while (++i < n) {
-      bind(group = this[i], data);
-    }
-  }
-
-  var selection = d3_selection(update);
-  selection.enter = function() { return d3_selection_enter(enter); };
-  selection.exit = function() { return d3_selection(exit); };
-  return selection;
-};
-
-function d3_selection_dataNode(data) {
-  return {__data__: data};
-}
-function d3_selection_enter(selection) {
-  d3_arraySubclass(selection, d3_selection_enterPrototype);
-  return selection;
-}
-
-var d3_selection_enterPrototype = [];
-
-d3_selection_enterPrototype.append = d3_selectionPrototype.append;
-d3_selection_enterPrototype.insert = d3_selectionPrototype.insert;
-d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
-d3_selection_enterPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      upgroup,
-      group,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    upgroup = (group = this[j]).update;
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = group.parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i));
-        subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-// TODO preserve null elements to maintain index?
-d3_selectionPrototype.filter = function(filter) {
-  var subgroups = [],
-      subgroup,
-      group,
-      node;
-
-  for (var j = 0, m = this.length; j < m; j++) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = 0, n = group.length; i < n; i++) {
-      if ((node = group[i]) && filter.call(node, node.__data__, i)) {
-        subgroup.push(node);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-d3_selectionPrototype.map = function(map) {
-  return this.each(function() {
-    this.__data__ = map.apply(this, arguments);
-  });
-};
-d3_selectionPrototype.sort = function(comparator) {
-  comparator = d3_selection_sortComparator.apply(this, arguments);
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j].sort(comparator), i = 1, n = group.length, prev = group[0]; i < n; i++) {
-      var node = group[i];
-      if (node) {
-        if (prev) prev.parentNode.insertBefore(node, prev.nextSibling);
-        prev = node;
-      }
-    }
-  }
-  return this;
-};
-
-function d3_selection_sortComparator(comparator) {
-  if (!arguments.length) comparator = d3.ascending;
-  return function(a, b) {
-    return comparator(a && a.__data__, b && b.__data__);
-  };
-}
-// type can be namespaced, e.g., "click.foo"
-// listener can be null for removal
-d3_selectionPrototype.on = function(type, listener, capture) {
-  if (arguments.length < 3) capture = false;
-
-  // parse the type specifier
-  var name = "__on" + type, i = type.indexOf(".");
-  if (i > 0) type = type.substring(0, i);
-
-  // if called with only one argument, return the current listener
-  if (arguments.length < 2) return (i = this.node()[name]) && i._;
-
-  // remove the old event listener, and add the new event listener
-  return this.each(function(d, i) {
-    var node = this;
-
-    if (node[name]) node.removeEventListener(type, node[name], capture);
-    if (listener) node.addEventListener(type, node[name] = l, capture);
-
-    // wrapped event listener that preserves i
-    function l(e) {
-      var o = d3.event; // Events can be reentrant (e.g., focus).
-      d3.event = e;
-      try {
-        listener.call(node, node.__data__, i);
-      } finally {
-        d3.event = o;
-      }
-    }
-
-    // stash the unwrapped listener for retrieval
-    l._ = listener;
-  });
-};
-d3_selectionPrototype.each = function(callback) {
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      var node = group[i];
-      if (node) callback.call(node, node.__data__, i, j);
-    }
-  }
-  return this;
-};
-//
-// Note: assigning to the arguments array simultaneously changes the value of
-// the corresponding argument!
-//
-// TODO The `this` argument probably shouldn't be the first argument to the
-// callback, anyway, since it's redundant. However, that will require a major
-// version bump due to backwards compatibility, so I'm not changing it right
-// away.
-//
-d3_selectionPrototype.call = function(callback) {
-  callback.apply(this, (arguments[0] = this, arguments));
-  return this;
-};
-d3_selectionPrototype.empty = function() {
-  return !this.node();
-};
-d3_selectionPrototype.node = function(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) return node;
-    }
-  }
-  return null;
-};
-d3_selectionPrototype.transition = function() {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      subgroup.push((node = group[i]) ? {node: node, delay: 0, duration: 250} : null);
-    }
-  }
-
-  return d3_transition(subgroups, d3_transitionInheritId || ++d3_transitionId);
-};
-var d3_selectionRoot = d3_selection([[document]]);
-
-d3_selectionRoot[0].parentNode = document.documentElement;
-
-// TODO fast singleton implementation!
-d3.select = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.select(selector)
-      : d3_selection([[selector]]); // assume node
-};
-
-d3.selectAll = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.selectAll(selector)
-      : d3_selection([selector]); // assume node[]
-};
-function d3_transition(groups, id) {
-  d3_arraySubclass(groups, d3_transitionPrototype);
-
-  var tweens = {},
-      event = d3.dispatch("start", "end"),
-      ease = d3_transitionEase,
-      then = Date.now();
-
-  groups.id = id;
-
-  groups.tween = function(name, tween) {
-    if (arguments.length < 2) return tweens[name];
-    if (tween == null) delete tweens[name];
-    else tweens[name] = tween;
-    return groups;
-  };
-
-  groups.ease = function(value) {
-    if (!arguments.length) return ease;
-    ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
-    return groups;
-  };
-
-  groups.each = function(type, listener) {
-    if (arguments.length < 2) return d3_transition_each.call(groups, type);
-    event[type].add(listener);
-    return groups;
-  };
-
-  d3.timer(function(elapsed) {
-    groups.each(function(d, i, j) {
-      var tweened = [],
-          node = this,
-          delay = groups[j][i].delay,
-          duration = groups[j][i].duration,
-          lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0});
-
-      ++lock.count;
-
-      delay <= elapsed ? start(elapsed) : d3.timer(start, delay, then);
-
-      function start(elapsed) {
-        if (lock.active > id) return stop();
-        lock.active = id;
-
-        for (var tween in tweens) {
-          if (tween = tweens[tween].call(node, d, i)) {
-            tweened.push(tween);
-          }
-        }
-
-        event.start.dispatch.call(node, d, i);
-        if (!tick(elapsed)) d3.timer(tick, 0, then);
-        return 1;
-      }
-
-      function tick(elapsed) {
-        if (lock.active !== id) return stop();
-
-        var t = (elapsed - delay) / duration,
-            e = ease(t),
-            n = tweened.length;
-
-        while (n > 0) {
-          tweened[--n].call(node, e);
-        }
-
-        if (t >= 1) {
-          stop();
-          d3_transitionInheritId = id;
-          event.end.dispatch.call(node, d, i);
-          d3_transitionInheritId = 0;
-          return 1;
-        }
-      }
-
-      function stop() {
-        if (!--lock.count) delete node.__transition__;
-        return 1;
-      }
-    });
-    return 1;
-  }, 0, then);
-
-  return groups;
-}
-
-function d3_transitionTween(b) {
-  return typeof b === "function"
-      ? function(d, i, a) { var v = b.call(this, d, i) + ""; return a != v && d3.interpolate(a, v); }
-      : (b = b + "", function(d, i, a) { return a != b && d3.interpolate(a, b); });
-}
-
-var d3_transitionPrototype = [],
-    d3_transitionId = 0,
-    d3_transitionInheritId = 0,
-    d3_transitionEase = d3.ease("cubic-in-out");
-
-d3_transitionPrototype.call = d3_selectionPrototype.call;
-
-d3.transition = function() {
-  return d3_selectionRoot.transition();
-};
-
-d3.transition.prototype = d3_transitionPrototype;
-d3_transitionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) {
-        if ("__data__" in node.node) subnode.__data__ = node.node.__data__;
-        subgroup.push({node: subnode, delay: node.delay, duration: node.duration});
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node.node, node.node.__data__, i));
-        for (var k = -1, o = subgroup.length; ++k < o;) {
-          subgroup[k] = {node: subgroup[k], delay: node.delay, duration: node.duration};
-        }
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.attr = function(name, value) {
-  return this.attrTween(name, d3_transitionTween(value));
-};
-
-d3_transitionPrototype.attrTween = function(name, tween) {
-  name = d3.ns.qualify(name);
-
-  function attrTween(d, i) {
-    var f = tween.call(this, d, i, this.getAttribute(name));
-    return f && function(t) {
-      this.setAttribute(name, f(t));
-    };
-  }
-
-  function attrTweenNS(d, i) {
-    var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
-    return f && function(t) {
-      this.setAttributeNS(name.space, name.local, f(t));
-    };
-  }
-
-  return this.tween("attr." + name, name.local ? attrTweenNS : attrTween);
-};
-d3_transitionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.styleTween(name, d3_transitionTween(value), priority);
-};
-
-d3_transitionPrototype.styleTween = function(name, tween, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.tween("style." + name, function(d, i) {
-    var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
-    return f && function(t) {
-      this.style.setProperty(name, f(t), priority);
-    };
-  });
-};
-d3_transitionPrototype.text = function(value) {
-  return this.tween("text", function(d, i) {
-    this.textContent = typeof value === "function"
-        ? value.call(this, d, i)
-        : value;
-  });
-};
-d3_transitionPrototype.remove = function() {
-  return this.each("end", function() {
-    var p;
-    if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
-  });
-};
-d3_transitionPrototype.delay = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].delay = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].delay = value; }));
-};
-d3_transitionPrototype.duration = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].duration = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].duration = value; }));
-};
-function d3_transition_each(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) callback.call(node = node.node, node.__data__, i, j);
-    }
-  }
-  return this;
-}
-d3_transitionPrototype.transition = function() {
-  return this.select(d3_this);
-};
-var d3_timer_queue = null,
-    d3_timer_interval, // is an interval (or frame) active?
-    d3_timer_timeout; // is a timeout active?
-
-// The timer will continue to fire until callback returns true.
-d3.timer = function(callback, delay, then) {
-  var found = false,
-      t0,
-      t1 = d3_timer_queue;
-
-  if (arguments.length < 3) {
-    if (arguments.length < 2) delay = 0;
-    else if (!isFinite(delay)) return;
-    then = Date.now();
-  }
-
-  // See if the callback's already in the queue.
-  while (t1) {
-    if (t1.callback === callback) {
-      t1.then = then;
-      t1.delay = delay;
-      found = true;
-      break;
-    }
-    t0 = t1;
-    t1 = t1.next;
-  }
-
-  // Otherwise, add the callback to the queue.
-  if (!found) d3_timer_queue = {
-    callback: callback,
-    then: then,
-    delay: delay,
-    next: d3_timer_queue
-  };
-
-  // Start animatin'!
-  if (!d3_timer_interval) {
-    d3_timer_timeout = clearTimeout(d3_timer_timeout);
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-function d3_timer_step() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  var delay = d3_timer_flush() - now;
-  if (delay > 24) {
-    if (isFinite(delay)) {
-      clearTimeout(d3_timer_timeout);
-      d3_timer_timeout = setTimeout(d3_timer_step, delay);
-    }
-    d3_timer_interval = 0;
-  } else {
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-d3.timer.flush = function() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (!t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  d3_timer_flush();
-};
-
-// Flush after callbacks, to avoid concurrent queue modification.
-function d3_timer_flush() {
-  var t0 = null,
-      t1 = d3_timer_queue,
-      then = Infinity;
-  while (t1) {
-    if (t1.flush) {
-      t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
-    } else {
-      then = Math.min(then, t1.then + t1.delay);
-      t1 = (t0 = t1).next;
-    }
-  }
-  return then;
-}
-
-var d3_timer_frame = window.requestAnimationFrame
-    || window.webkitRequestAnimationFrame
-    || window.mozRequestAnimationFrame
-    || window.oRequestAnimationFrame
-    || window.msRequestAnimationFrame
-    || function(callback) { setTimeout(callback, 17); };
-function d3_noop() {}
-d3.scale = {};
-
-function d3_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-function d3_scale_nice(domain, nice) {
-  var i0 = 0,
-      i1 = domain.length - 1,
-      x0 = domain[i0],
-      x1 = domain[i1],
-      dx;
-
-  if (x1 < x0) {
-    dx = i0; i0 = i1; i1 = dx;
-    dx = x0; x0 = x1; x1 = dx;
-  }
-
-  nice = nice(x1 - x0);
-  domain[i0] = nice.floor(x0);
-  domain[i1] = nice.ceil(x1);
-  return domain;
-}
-
-function d3_scale_niceDefault() {
-  return Math;
-}
-d3.scale.linear = function() {
-  return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false);
-};
-
-function d3_scale_linear(domain, range, interpolate, clamp) {
-  var output,
-      input;
-
-  function rescale() {
-    var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear,
-        uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
-    output = linear(domain, range, uninterpolate, interpolate);
-    input = linear(range, domain, uninterpolate, d3.interpolate);
-    return scale;
-  }
-
-  function scale(x) {
-    return output(x);
-  }
-
-  // Note: requires range is coercible to number!
-  scale.invert = function(y) {
-    return input(y);
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.map(Number);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.rangeRound = function(x) {
-    return scale.range(x).interpolate(d3.interpolateRound);
-  };
-
-  scale.clamp = function(x) {
-    if (!arguments.length) return clamp;
-    clamp = x;
-    return rescale();
-  };
-
-  scale.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolate = x;
-    return rescale();
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(domain, m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(domain, m);
-  };
-
-  scale.nice = function() {
-    d3_scale_nice(domain, d3_scale_linearNice);
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_linear(domain, range, interpolate, clamp);
-  };
-
-  return rescale();
-};
-
-function d3_scale_linearRebind(scale, linear) {
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-  return scale;
-}
-
-function d3_scale_linearNice(dx) {
-  dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
-  return {
-    floor: function(x) { return Math.floor(x / dx) * dx; },
-    ceil: function(x) { return Math.ceil(x / dx) * dx; }
-  };
-}
-
-// TODO Dates? Ugh.
-function d3_scale_linearTickRange(domain, m) {
-  var extent = d3_scaleExtent(domain),
-      span = extent[1] - extent[0],
-      step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
-      err = m / span * step;
-
-  // Filter ticks to get closer to the desired count.
-  if (err <= .15) step *= 10;
-  else if (err <= .35) step *= 5;
-  else if (err <= .75) step *= 2;
-
-  // Round start and stop values to step interval.
-  extent[0] = Math.ceil(extent[0] / step) * step;
-  extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
-  extent[2] = step;
-  return extent;
-}
-
-function d3_scale_linearTicks(domain, m) {
-  return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
-}
-
-function d3_scale_linearTickFormat(domain, m) {
-  return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
-}
-function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
-  var u = uninterpolate(domain[0], domain[1]),
-      i = interpolate(range[0], range[1]);
-  return function(x) {
-    return i(u(x));
-  };
-}
-function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
-  var u = [],
-      i = [],
-      j = 0,
-      n = domain.length;
-
-  while (++j < n) {
-    u.push(uninterpolate(domain[j - 1], domain[j]));
-    i.push(interpolate(range[j - 1], range[j]));
-  }
-
-  return function(x) {
-    var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
-    return i[j](u[j](x));
-  };
-}
-d3.scale.log = function() {
-  return d3_scale_log(d3.scale.linear(), d3_scale_logp);
-};
-
-function d3_scale_log(linear, log) {
-  var pow = log.pow;
-
-  function scale(x) {
-    return linear(log(x));
-  }
-
-  scale.invert = function(x) {
-    return pow(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(pow);
-    log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
-    pow = log.pow;
-    linear.domain(x.map(log));
-    return scale;
-  };
-
-  scale.nice = function() {
-    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
-    return scale;
-  };
-
-  scale.ticks = function() {
-    var extent = d3_scaleExtent(linear.domain()),
-        ticks = [];
-    if (extent.every(isFinite)) {
-      var i = Math.floor(extent[0]),
-          j = Math.ceil(extent[1]),
-          u = pow(extent[0]),
-          v = pow(extent[1]);
-      if (log === d3_scale_logn) {
-        ticks.push(pow(i));
-        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
-      } else {
-        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
-        ticks.push(pow(i));
-      }
-      for (i = 0; ticks[i] < u; i++) {} // strip small values
-      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
-      ticks = ticks.slice(i, j);
-    }
-    return ticks;
-  };
-
-  scale.tickFormat = function() {
-    return d3_scale_logTickFormat;
-  };
-
-  scale.copy = function() {
-    return d3_scale_log(linear.copy(), log);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_logp(x) {
-  return Math.log(x) / Math.LN10;
-}
-
-function d3_scale_logn(x) {
-  return -Math.log(-x) / Math.LN10;
-}
-
-d3_scale_logp.pow = function(x) {
-  return Math.pow(10, x);
-};
-
-d3_scale_logn.pow = function(x) {
-  return -Math.pow(10, -x);
-};
-
-function d3_scale_logTickFormat(d) {
-  return d.toPrecision(1);
-}
-d3.scale.pow = function() {
-  return d3_scale_pow(d3.scale.linear(), 1);
-};
-
-function d3_scale_pow(linear, exponent) {
-  var powp = d3_scale_powPow(exponent),
-      powb = d3_scale_powPow(1 / exponent);
-
-  function scale(x) {
-    return linear(powp(x));
-  }
-
-  scale.invert = function(x) {
-    return powb(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(powb);
-    linear.domain(x.map(powp));
-    return scale;
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(scale.domain(), m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(scale.domain(), m);
-  };
-
-  scale.nice = function() {
-    return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
-  };
-
-  scale.exponent = function(x) {
-    if (!arguments.length) return exponent;
-    var domain = scale.domain();
-    powp = d3_scale_powPow(exponent = x);
-    powb = d3_scale_powPow(1 / exponent);
-    return scale.domain(domain);
-  };
-
-  scale.copy = function() {
-    return d3_scale_pow(linear.copy(), exponent);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_powPow(e) {
-  return function(x) {
-    return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
-  };
-}
-d3.scale.sqrt = function() {
-  return d3.scale.pow().exponent(.5);
-};
-d3.scale.ordinal = function() {
-  return d3_scale_ordinal([], {t: "range", x: []});
-};
-
-function d3_scale_ordinal(domain, ranger) {
-  var index,
-      range,
-      rangeBand;
-
-  function scale(x) {
-    return range[((index[x] || (index[x] = domain.push(x))) - 1) % range.length];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = [];
-    index = {};
-    var i = -1, n = x.length, xi;
-    while (++i < n) if (!index[xi = x[i]]) index[xi] = domain.push(xi);
-    return scale[ranger.t](ranger.x, ranger.p);
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    rangeBand = 0;
-    ranger = {t: "range", x: x};
-    return scale;
-  };
-
-  scale.rangePoints = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length - 1 + padding);
-    range = domain.length < 2 ? [(start + stop) / 2] : d3.range(start + step * padding / 2, stop + step / 2, step);
-    rangeBand = 0;
-    ranger = {t: "rangePoints", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length + padding);
-    range = d3.range(start + step * padding, stop, step);
-    rangeBand = step * (1 - padding);
-    ranger = {t: "rangeBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeRoundBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = Math.floor((stop - start) / (domain.length + padding)),
-        err = stop - start - (domain.length - padding) * step;
-    range = d3.range(start + Math.round(err / 2), stop, step);
-    rangeBand = Math.round(step * (1 - padding));
-    ranger = {t: "rangeRoundBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBand = function() {
-    return rangeBand;
-  };
-
-  scale.copy = function() {
-    return d3_scale_ordinal(domain, ranger);
-  };
-
-  return scale.domain(domain);
-};
-/*
- * This product includes color specifications and designs developed by Cynthia
- * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
- */
-
-d3.scale.category10 = function() {
-  return d3.scale.ordinal().range(d3_category10);
-};
-
-d3.scale.category20 = function() {
-  return d3.scale.ordinal().range(d3_category20);
-};
-
-d3.scale.category20b = function() {
-  return d3.scale.ordinal().range(d3_category20b);
-};
-
-d3.scale.category20c = function() {
-  return d3.scale.ordinal().range(d3_category20c);
-};
-
-var d3_category10 = [
-  "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
-  "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
-];
-
-var d3_category20 = [
-  "#1f77b4", "#aec7e8",
-  "#ff7f0e", "#ffbb78",
-  "#2ca02c", "#98df8a",
-  "#d62728", "#ff9896",
-  "#9467bd", "#c5b0d5",
-  "#8c564b", "#c49c94",
-  "#e377c2", "#f7b6d2",
-  "#7f7f7f", "#c7c7c7",
-  "#bcbd22", "#dbdb8d",
-  "#17becf", "#9edae5"
-];
-
-var d3_category20b = [
-  "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
-  "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
-  "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
-  "#843c39", "#ad494a", "#d6616b", "#e7969c",
-  "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
-];
-
-var d3_category20c = [
-  "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
-  "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
-  "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
-  "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
-  "#636363", "#969696", "#bdbdbd", "#d9d9d9"
-];
-d3.scale.quantile = function() {
-  return d3_scale_quantile([], []);
-};
-
-function d3_scale_quantile(domain, range) {
-  var thresholds;
-
-  function rescale() {
-    var k = 0,
-        n = domain.length,
-        q = range.length;
-    thresholds = [];
-    while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
-    return scale;
-  }
-
-  function scale(x) {
-    if (isNaN(x = +x)) return NaN;
-    return range[d3.bisect(thresholds, x)];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.quantiles = function() {
-    return thresholds;
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantile(domain, range); // copy on write!
-  };
-
-  return rescale();
-};
-d3.scale.quantize = function() {
-  return d3_scale_quantize(0, 1, [0, 1]);
-};
-
-function d3_scale_quantize(x0, x1, range) {
-  var kx, i;
-
-  function scale(x) {
-    return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
-  }
-
-  function rescale() {
-    kx = range.length / (x1 - x0);
-    i = range.length - 1;
-    return scale;
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return [x0, x1];
-    x0 = +x[0];
-    x1 = +x[x.length - 1];
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantize(x0, x1, range); // copy on write
-  };
-
-  return rescale();
-};
-d3.svg = {};
-d3.svg.arc = function() {
-  var innerRadius = d3_svg_arcInnerRadius,
-      outerRadius = d3_svg_arcOuterRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  function arc() {
-    var r0 = innerRadius.apply(this, arguments),
-        r1 = outerRadius.apply(this, arguments),
-        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
-        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
-        da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0),
-        df = da < Math.PI ? "0" : "1",
-        c0 = Math.cos(a0),
-        s0 = Math.sin(a0),
-        c1 = Math.cos(a1),
-        s1 = Math.sin(a1);
-    return da >= d3_svg_arcMax
-      ? (r0
-      ? "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "M0," + r0
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0)
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + r0
-      + "Z"
-      : "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "Z")
-      : (r0
-      ? "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L" + r0 * c1 + "," + r0 * s1
-      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
-      + "Z"
-      : "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L0,0"
-      + "Z");
-  }
-
-  arc.innerRadius = function(v) {
-    if (!arguments.length) return innerRadius;
-    innerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.outerRadius = function(v) {
-    if (!arguments.length) return outerRadius;
-    outerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.centroid = function() {
-    var r = (innerRadius.apply(this, arguments)
-        + outerRadius.apply(this, arguments)) / 2,
-        a = (startAngle.apply(this, arguments)
-        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
-    return [Math.cos(a) * r, Math.sin(a) * r];
-  };
-
-  return arc;
-};
-
-var d3_svg_arcOffset = -Math.PI / 2,
-    d3_svg_arcMax = 2 * Math.PI - 1e-6;
-
-function d3_svg_arcInnerRadius(d) {
-  return d.innerRadius;
-}
-
-function d3_svg_arcOuterRadius(d) {
-  return d.outerRadius;
-}
-
-function d3_svg_arcStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_arcEndAngle(d) {
-  return d.endAngle;
-}
-function d3_svg_line(projection) {
-  var x = d3_svg_lineX,
-      y = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function line(d) {
-    return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
-  }
-
-  line.x = function(v) {
-    if (!arguments.length) return x;
-    x = v;
-    return line;
-  };
-
-  line.y = function(v) {
-    if (!arguments.length) return y;
-    y = v;
-    return line;
-  };
-
-  line.interpolate = function(v) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = v];
-    return line;
-  };
-
-  line.tension = function(v) {
-    if (!arguments.length) return tension;
-    tension = v;
-    return line;
-  };
-
-  return line;
-}
-
-d3.svg.line = function() {
-  return d3_svg_line(Object);
-};
-
-// Converts the specified array of data into an array of points
-// (x-y tuples), by evaluating the specified `x` and `y` functions on each
-// data point. The `this` context of the evaluated functions is the specified
-// "self" object; each function is passed the current datum and index.
-function d3_svg_linePoints(self, d, x, y) {
-  var points = [],
-      i = -1,
-      n = d.length,
-      fx = typeof x === "function",
-      fy = typeof y === "function",
-      value;
-  if (fx && fy) {
-    while (++i < n) points.push([
-      x.call(self, value = d[i], i),
-      y.call(self, value, i)
-    ]);
-  } else if (fx) {
-    while (++i < n) points.push([x.call(self, d[i], i), y]);
-  } else if (fy) {
-    while (++i < n) points.push([x, y.call(self, d[i], i)]);
-  } else {
-    while (++i < n) points.push([x, y]);
-  }
-  return points;
-}
-
-// The default `x` property, which references d[0].
-function d3_svg_lineX(d) {
-  return d[0];
-}
-
-// The default `y` property, which references d[1].
-function d3_svg_lineY(d) {
-  return d[1];
-}
-
-// The various interpolators supported by the `line` class.
-var d3_svg_lineInterpolators = {
-  "linear": d3_svg_lineLinear,
-  "step-before": d3_svg_lineStepBefore,
-  "step-after": d3_svg_lineStepAfter,
-  "basis": d3_svg_lineBasis,
-  "basis-open": d3_svg_lineBasisOpen,
-  "basis-closed": d3_svg_lineBasisClosed,
-  "bundle": d3_svg_lineBundle,
-  "cardinal": d3_svg_lineCardinal,
-  "cardinal-open": d3_svg_lineCardinalOpen,
-  "cardinal-closed": d3_svg_lineCardinalClosed,
-  "monotone": d3_svg_lineMonotone
-};
-
-// Linear interpolation; generates "L" commands.
-function d3_svg_lineLinear(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepBefore(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepAfter(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
-  return path.join("");
-}
-
-// Open cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalOpen(points, tension) {
-  return points.length < 4
-      ? d3_svg_lineLinear(points)
-      : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Closed cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalClosed(points, tension) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
-        d3_svg_lineCardinalTangents([points[points.length - 2]]
-        .concat(points, [points[1]]), tension));
-}
-
-// Cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinal(points, tension, closed) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite(points,
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Hermite spline construction; generates "C" commands.
-function d3_svg_lineHermite(points, tangents) {
-  if (tangents.length < 1
-      || (points.length != tangents.length
-      && points.length != tangents.length + 2)) {
-    return d3_svg_lineLinear(points);
-  }
-
-  var quad = points.length != tangents.length,
-      path = "",
-      p0 = points[0],
-      p = points[1],
-      t0 = tangents[0],
-      t = t0,
-      pi = 1;
-
-  if (quad) {
-    path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
-        + "," + p[0] + "," + p[1];
-    p0 = points[1];
-    pi = 2;
-  }
-
-  if (tangents.length > 1) {
-    t = tangents[1];
-    p = points[pi];
-    pi++;
-    path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
-        + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
-        + "," + p[0] + "," + p[1];
-    for (var i = 2; i < tangents.length; i++, pi++) {
-      p = points[pi];
-      t = tangents[i];
-      path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
-          + "," + p[0] + "," + p[1];
-    }
-  }
-
-  if (quad) {
-    var lp = points[pi];
-    path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
-        + "," + lp[0] + "," + lp[1];
-  }
-
-  return path;
-}
-
-// Generates tangents for a cardinal spline.
-function d3_svg_lineCardinalTangents(points, tension) {
-  var tangents = [],
-      a = (1 - tension) / 2,
-      p0,
-      p1 = points[0],
-      p2 = points[1],
-      i = 1,
-      n = points.length;
-  while (++i < n) {
-    p0 = p1;
-    p1 = p2;
-    p2 = points[i];
-    tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
-  }
-  return tangents;
-}
-
-// B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasis(points) {
-  if (points.length < 3) return d3_svg_lineLinear(points);
-  var path = [],
-      i = 1,
-      n = points.length,
-      pi = points[0],
-      x0 = pi[0],
-      y0 = pi[1],
-      px = [x0, x0, x0, (pi = points[1])[0]],
-      py = [y0, y0, y0, pi[1]];
-  path.push(x0, ",", y0);
-  d3_svg_lineBasisBezier(path, px, py);
-  while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  i = -1;
-  while (++i < 2) {
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Open B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisOpen(points) {
-  if (points.length < 4) return d3_svg_lineLinear(points);
-  var path = [],
-      i = -1,
-      n = points.length,
-      pi,
-      px = [0],
-      py = [0];
-  while (++i < 3) {
-    pi = points[i];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
-    + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
-  --i; while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Closed B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisClosed(points) {
-  var path,
-      i = -1,
-      n = points.length,
-      m = n + 4,
-      pi,
-      px = [],
-      py = [];
-  while (++i < 4) {
-    pi = points[i % n];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path = [
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
-  ];
-  --i; while (++i < m) {
-    pi = points[i % n];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-function d3_svg_lineBundle(points, tension) {
-  var n = points.length - 1,
-      x0 = points[0][0],
-      y0 = points[0][1],
-      dx = points[n][0] - x0,
-      dy = points[n][1] - y0,
-      i = -1,
-      p,
-      t;
-  while (++i <= n) {
-    p = points[i];
-    t = i / n;
-    p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
-    p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
-  }
-  return d3_svg_lineBasis(points);
-}
-
-// Returns the dot product of the given four-element vectors.
-function d3_svg_lineDot4(a, b) {
-  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
-}
-
-// Matrix to transform basis (b-spline) control points to bezier
-// control points. Derived from FvD 11.2.8.
-var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
-    d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
-    d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
-
-// Pushes a "C" Bézier curve onto the specified path array, given the
-// two specified four-element arrays which define the control points.
-function d3_svg_lineBasisBezier(path, x, y) {
-  path.push(
-      "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
-}
-
-// Computes the slope from points p0 to p1.
-function d3_svg_lineSlope(p0, p1) {
-  return (p1[1] - p0[1]) / (p1[0] - p0[0]);
-}
-
-// Compute three-point differences for the given points.
-// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
-function d3_svg_lineFiniteDifferences(points) {
-  var i = 0,
-      j = points.length - 1,
-      m = [],
-      p0 = points[0],
-      p1 = points[1],
-      d = m[0] = d3_svg_lineSlope(p0, p1);
-  while (++i < j) {
-    m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
-  }
-  m[i] = d;
-  return m;
-}
-
-// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
-// interpolation. Returns an array of tangent vectors. For details, see
-// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
-function d3_svg_lineMonotoneTangents(points) {
-  var tangents = [],
-      d,
-      a,
-      b,
-      s,
-      m = d3_svg_lineFiniteDifferences(points),
-      i = -1,
-      j = points.length - 1;
-
-  // The first two steps are done by computing finite-differences:
-  // 1. Compute the slopes of the secant lines between successive points.
-  // 2. Initialize the tangents at every point as the average of the secants.
-
-  // Then, for each segment…
-  while (++i < j) {
-    d = d3_svg_lineSlope(points[i], points[i + 1]);
-
-    // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
-    // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
-    // preserve monotonicity. Ignore step 4 and 5 for those k.
-
-    if (Math.abs(d) < 1e-6) {
-      m[i] = m[i + 1] = 0;
-    } else {
-      // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
-      a = m[i] / d;
-      b = m[i + 1] / d;
-
-      // 5. Prevent overshoot and ensure monotonicity by restricting the
-      // magnitude of vector <ak, bk> to a circle of radius 3.
-      s = a * a + b * b;
-      if (s > 9) {
-        s = d * 3 / Math.sqrt(s);
-        m[i] = s * a;
-        m[i + 1] = s * b;
-      }
-    }
-  }
-
-  // Compute the normalized tangent vector from the slopes. Note that if x is
-  // not monotonic, it's possible that the slope will be infinite, so we protect
-  // against NaN by setting the coordinate to zero.
-  i = -1; while (++i <= j) {
-    s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
-      / (6 * (1 + m[i] * m[i]));
-    tangents.push([s || 0, m[i] * s || 0]);
-  }
-
-  return tangents;
-}
-
-function d3_svg_lineMonotone(points) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] +
-        d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
-}
-d3.svg.line.radial = function() {
-  var line = d3_svg_line(d3_svg_lineRadial);
-  line.radius = line.x, delete line.x;
-  line.angle = line.y, delete line.y;
-  return line;
-};
-
-function d3_svg_lineRadial(points) {
-  var point,
-      i = -1,
-      n = points.length,
-      r,
-      a;
-  while (++i < n) {
-    point = points[i];
-    r = point[0];
-    a = point[1] + d3_svg_arcOffset;
-    point[0] = r * Math.cos(a);
-    point[1] = r * Math.sin(a);
-  }
-  return points;
-}
-function d3_svg_area(projection) {
-  var x0 = d3_svg_lineX,
-      x1 = d3_svg_lineX,
-      y0 = 0,
-      y1 = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function area(d) {
-    if (d.length < 1) return null;
-    var points0 = d3_svg_linePoints(this, d, x0, y0),
-        points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
-    return "M" + interpolator(projection(points1), tension)
-         + "L" + interpolator(projection(points0.reverse()), tension)
-         + "Z";
-  }
-
-  area.x = function(x) {
-    if (!arguments.length) return x1;
-    x0 = x1 = x;
-    return area;
-  };
-
-  area.x0 = function(x) {
-    if (!arguments.length) return x0;
-    x0 = x;
-    return area;
-  };
-
-  area.x1 = function(x) {
-    if (!arguments.length) return x1;
-    x1 = x;
-    return area;
-  };
-
-  area.y = function(y) {
-    if (!arguments.length) return y1;
-    y0 = y1 = y;
-    return area;
-  };
-
-  area.y0 = function(y) {
-    if (!arguments.length) return y0;
-    y0 = y;
-    return area;
-  };
-
-  area.y1 = function(y) {
-    if (!arguments.length) return y1;
-    y1 = y;
-    return area;
-  };
-
-  area.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = x];
-    return area;
-  };
-
-  area.tension = function(x) {
-    if (!arguments.length) return tension;
-    tension = x;
-    return area;
-  };
-
-  return area;
-}
-
-d3.svg.area = function() {
-  return d3_svg_area(Object);
-};
-
-function d3_svg_areaX(points) {
-  return function(d, i) {
-    return points[i][0];
-  };
-}
-
-function d3_svg_areaY(points) {
-  return function(d, i) {
-    return points[i][1];
-  };
-}
-d3.svg.area.radial = function() {
-  var area = d3_svg_area(d3_svg_lineRadial);
-  area.radius = area.x, delete area.x;
-  area.innerRadius = area.x0, delete area.x0;
-  area.outerRadius = area.x1, delete area.x1;
-  area.angle = area.y, delete area.y;
-  area.startAngle = area.y0, delete area.y0;
-  area.endAngle = area.y1, delete area.y1;
-  return area;
-};
-d3.svg.chord = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      radius = d3_svg_chordRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  // TODO Allow control point to be customized.
-
-  function chord(d, i) {
-    var s = subgroup(this, source, d, i),
-        t = subgroup(this, target, d, i);
-    return "M" + s.p0
-      + arc(s.r, s.p1) + (equals(s, t)
-      ? curve(s.r, s.p1, s.r, s.p0)
-      : curve(s.r, s.p1, t.r, t.p0)
-      + arc(t.r, t.p1)
-      + curve(t.r, t.p1, s.r, s.p0))
-      + "Z";
-  }
-
-  function subgroup(self, f, d, i) {
-    var subgroup = f.call(self, d, i),
-        r = radius.call(self, subgroup, i),
-        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
-        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
-    return {
-      r: r,
-      a0: a0,
-      a1: a1,
-      p0: [r * Math.cos(a0), r * Math.sin(a0)],
-      p1: [r * Math.cos(a1), r * Math.sin(a1)]
-    };
-  }
-
-  function equals(a, b) {
-    return a.a0 == b.a0 && a.a1 == b.a1;
-  }
-
-  function arc(r, p) {
-    return "A" + r + "," + r + " 0 0,1 " + p;
-  }
-
-  function curve(r0, p0, r1, p1) {
-    return "Q 0,0 " + p1;
-  }
-
-  chord.radius = function(v) {
-    if (!arguments.length) return radius;
-    radius = d3.functor(v);
-    return chord;
-  };
-
-  chord.source = function(v) {
-    if (!arguments.length) return source;
-    source = d3.functor(v);
-    return chord;
-  };
-
-  chord.target = function(v) {
-    if (!arguments.length) return target;
-    target = d3.functor(v);
-    return chord;
-  };
-
-  chord.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return chord;
-  };
-
-  chord.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return chord;
-  };
-
-  return chord;
-};
-
-function d3_svg_chordSource(d) {
-  return d.source;
-}
-
-function d3_svg_chordTarget(d) {
-  return d.target;
-}
-
-function d3_svg_chordRadius(d) {
-  return d.radius;
-}
-
-function d3_svg_chordStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_chordEndAngle(d) {
-  return d.endAngle;
-}
-d3.svg.diagonal = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      projection = d3_svg_diagonalProjection;
-
-  function diagonal(d, i) {
-    var p0 = source.call(this, d, i),
-        p3 = target.call(this, d, i),
-        m = (p0.y + p3.y) / 2,
-        p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
-    p = p.map(projection);
-    return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
-  }
-
-  diagonal.source = function(x) {
-    if (!arguments.length) return source;
-    source = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.target = function(x) {
-    if (!arguments.length) return target;
-    target = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.projection = function(x) {
-    if (!arguments.length) return projection;
-    projection = x;
-    return diagonal;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalProjection(d) {
-  return [d.x, d.y];
-}
-d3.svg.diagonal.radial = function() {
-  var diagonal = d3.svg.diagonal(),
-      projection = d3_svg_diagonalProjection,
-      projection_ = diagonal.projection;
-
-  diagonal.projection = function(x) {
-    return arguments.length
-        ? projection_(d3_svg_diagonalRadialProjection(projection = x))
-        : projection;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalRadialProjection(projection) {
-  return function() {
-    var d = projection.apply(this, arguments),
-        r = d[0],
-        a = d[1] + d3_svg_arcOffset;
-    return [r * Math.cos(a), r * Math.sin(a)];
-  };
-}
-d3.svg.mouse = function(container) {
-  return d3_svg_mousePoint(container, d3.event);
-};
-
-// https://bugs.webkit.org/show_bug.cgi?id=44083
-var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
-
-function d3_svg_mousePoint(container, e) {
-  var point = (container.ownerSVGElement || container).createSVGPoint();
-  if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
-    var svg = d3.select(document.body)
-      .append("svg:svg")
-        .style("position", "absolute")
-        .style("top", 0)
-        .style("left", 0);
-    var ctm = svg[0][0].getScreenCTM();
-    d3_mouse_bug44083 = !(ctm.f || ctm.e);
-    svg.remove();
-  }
-  if (d3_mouse_bug44083) {
-    point.x = e.pageX;
-    point.y = e.pageY;
-  } else {
-    point.x = e.clientX;
-    point.y = e.clientY;
-  }
-  point = point.matrixTransform(container.getScreenCTM().inverse());
-  return [point.x, point.y];
-};
-d3.svg.touches = function(container) {
-  var touches = d3.event.touches;
-  return touches ? Array.prototype.map.call(touches, function(touch) {
-    var point = d3_svg_mousePoint(container, touch);
-    point.identifier = touch.identifier;
-    return point;
-  }) : [];
-};
-d3.svg.symbol = function() {
-  var type = d3_svg_symbolType,
-      size = d3_svg_symbolSize;
-
-  function symbol(d, i) {
-    return (d3_svg_symbols[type.call(this, d, i)]
-        || d3_svg_symbols.circle)
-        (size.call(this, d, i));
-  }
-
-  symbol.type = function(x) {
-    if (!arguments.length) return type;
-    type = d3.functor(x);
-    return symbol;
-  };
-
-  // size of symbol in square pixels
-  symbol.size = function(x) {
-    if (!arguments.length) return size;
-    size = d3.functor(x);
-    return symbol;
-  };
-
-  return symbol;
-};
-
-function d3_svg_symbolSize() {
-  return 64;
-}
-
-function d3_svg_symbolType() {
-  return "circle";
-}
-
-// TODO cross-diagonal?
-var d3_svg_symbols = {
-  "circle": function(size) {
-    var r = Math.sqrt(size / Math.PI);
-    return "M0," + r
-        + "A" + r + "," + r + " 0 1,1 0," + (-r)
-        + "A" + r + "," + r + " 0 1,1 0," + r
-        + "Z";
-  },
-  "cross": function(size) {
-    var r = Math.sqrt(size / 5) / 2;
-    return "M" + -3 * r + "," + -r
-        + "H" + -r
-        + "V" + -3 * r
-        + "H" + r
-        + "V" + -r
-        + "H" + 3 * r
-        + "V" + r
-        + "H" + r
-        + "V" + 3 * r
-        + "H" + -r
-        + "V" + r
-        + "H" + -3 * r
-        + "Z";
-  },
-  "diamond": function(size) {
-    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
-        rx = ry * d3_svg_symbolTan30;
-    return "M0," + -ry
-        + "L" + rx + ",0"
-        + " 0," + ry
-        + " " + -rx + ",0"
-        + "Z";
-  },
-  "square": function(size) {
-    var r = Math.sqrt(size) / 2;
-    return "M" + -r + "," + -r
-        + "L" + r + "," + -r
-        + " " + r + "," + r
-        + " " + -r + "," + r
-        + "Z";
-  },
-  "triangle-down": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + ry
-        + "L" + rx +"," + -ry
-        + " " + -rx + "," + -ry
-        + "Z";
-  },
-  "triangle-up": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + -ry
-        + "L" + rx +"," + ry
-        + " " + -rx + "," + ry
-        + "Z";
-  }
-};
-
-d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
-
-var d3_svg_symbolSqrt3 = Math.sqrt(3),
-    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
-d3.svg.axis = function() {
-  var scale = d3.scale.linear(),
-      orient = "bottom",
-      tickMajorSize = 6,
-      tickMinorSize = 6,
-      tickEndSize = 6,
-      tickPadding = 3,
-      tickArguments_ = [10],
-      tickFormat_,
-      tickSubdivide = 0;
-
-  function axis(selection) {
-    selection.each(function(d, i, j) {
-      var g = d3.select(this);
-
-      // Ticks.
-      var ticks = scale.ticks.apply(scale, tickArguments_),
-          tickFormat = tickFormat_ == null ? scale.tickFormat.apply(scale, tickArguments_) : tickFormat_;
-
-      // Minor ticks.
-      var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
-          subtick = g.selectAll(".minor").data(subticks, String),
-          subtickEnter = subtick.enter().insert("svg:line", "g").attr("class", "tick minor").style("opacity", 1e-6),
-          subtickExit = transition(subtick.exit()).style("opacity", 1e-6).remove(),
-          subtickUpdate = transition(subtick).style("opacity", 1);
-
-      // Major ticks.
-      var tick = g.selectAll("g").data(ticks, String),
-          tickEnter = tick.enter().insert("svg:g", "path").style("opacity", 1e-6),
-          tickExit = transition(tick.exit()).style("opacity", 1e-6).remove(),
-          tickUpdate = transition(tick).style("opacity", 1),
-          tickTransform;
-
-      // Domain.
-      var range = d3_scaleExtent(scale.range()),
-          path = g.selectAll(".domain").data([0]),
-          pathEnter = path.enter().append("svg:path").attr("class", "domain"),
-          pathUpdate = transition(path);
-
-      // Stash the new scale and grab the old scale.
-      var scale0 = this.__chart__ || scale;
-      this.__chart__ = scale.copy();
-
-      tickEnter.append("svg:line").attr("class", "tick");
-      tickEnter.append("svg:text");
-      tickUpdate.select("text").text(tickFormat);
-
-      switch (orient) {
-        case "bottom": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".71em").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", tickMajorSize);
-          tickUpdate.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
-          break;
-        }
-        case "top": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", -tickMinorSize);
-          tickEnter.select("text").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", -tickMajorSize);
-          tickUpdate.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
-          break;
-        }
-        case "left": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", -tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em").attr("text-anchor", "end");
-          tickUpdate.select("line").attr("x2", -tickMajorSize);
-          tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
-          break;
-        }
-        case "right": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em");
-          tickUpdate.select("line").attr("x2", tickMajorSize);
-          tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
-          break;
-        }
-      }
-
-      tickEnter.call(tickTransform, scale0);
-      tickUpdate.call(tickTransform, scale);
-      tickExit.call(tickTransform, scale);
-
-      subtickEnter.call(tickTransform, scale0);
-      subtickUpdate.call(tickTransform, scale);
-      subtickExit.call(tickTransform, scale);
-
-      function transition(o) {
-        return selection.delay ? o.transition()
-            .delay(selection[j][i].delay)
-            .duration(selection[j][i].duration)
-            .ease(selection.ease()) : o;
-      }
-    });
-  }
-
-  axis.scale = function(x) {
-    if (!arguments.length) return scale;
-    scale = x;
-    return axis;
-  };
-
-  axis.orient = function(x) {
-    if (!arguments.length) return orient;
-    orient = x;
-    return axis;
-  };
-
-  axis.ticks = function() {
-    if (!arguments.length) return tickArguments_;
-    tickArguments_ = arguments;
-    return axis;
-  };
-
-  axis.tickFormat = function(x) {
-    if (!arguments.length) return tickFormat_;
-    tickFormat_ = x;
-    return axis;
-  };
-
-  axis.tickSize = function(x, y, z) {
-    if (!arguments.length) return tickMajorSize;
-    var n = arguments.length - 1;
-    tickMajorSize = +x;
-    tickMinorSize = n > 1 ? +y : tickMajorSize;
-    tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
-    return axis;
-  };
-
-  axis.tickPadding = function(x) {
-    if (!arguments.length) return tickPadding;
-    tickPadding = +x;
-    return axis;
-  };
-
-  axis.tickSubdivide = function(x) {
-    if (!arguments.length) return tickSubdivide;
-    tickSubdivide = +x;
-    return axis;
-  };
-
-  return axis;
-};
-
-function d3_svg_axisX(selection, x) {
-  selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
-}
-
-function d3_svg_axisY(selection, y) {
-  selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; });
-}
-
-function d3_svg_axisSubdivide(scale, ticks, m) {
-  subticks = [];
-  if (m && ticks.length > 1) {
-    var extent = d3_scaleExtent(scale.domain()),
-        subticks,
-        i = -1,
-        n = ticks.length,
-        d = (ticks[1] - ticks[0]) / ++m,
-        j,
-        v;
-    while (++i < n) {
-      for (j = m; --j > 0;) {
-        if ((v = +ticks[i] - j * d) >= extent[0]) {
-          subticks.push(v);
-        }
-      }
-    }
-    for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) {
-      subticks.push(v);
-    }
-  }
-  return subticks;
-}
-d3.behavior = {};
-d3.behavior.drag = function() {
-  var event = d3.dispatch("drag", "dragstart", "dragend");
-
-  function drag() {
-    this
-        .on("mousedown.drag", mousedown)
-        .on("touchstart.drag", mousedown);
-
-    d3.select(window)
-        .on("mousemove.drag", d3_behavior_dragMove)
-        .on("touchmove.drag", d3_behavior_dragMove)
-        .on("mouseup.drag", d3_behavior_dragUp, true)
-        .on("touchend.drag", d3_behavior_dragUp, true)
-        .on("click.drag", d3_behavior_dragClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_dragEvent = event;
-    d3_behavior_dragOffset = d3_behavior_dragPoint((d3_behavior_dragTarget = this).parentNode);
-    d3_behavior_dragMoved = 0;
-    d3_behavior_dragArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_dragDispatch("dragstart");
-  }
-
-  drag.on = function(type, listener) {
-    event[type].add(listener);
-    return drag;
-  };
-
-  return drag;
-};
-
-var d3_behavior_dragEvent,
-    d3_behavior_dragTarget,
-    d3_behavior_dragArguments,
-    d3_behavior_dragOffset,
-    d3_behavior_dragMoved,
-    d3_behavior_dragStopClick;
-
-function d3_behavior_dragDispatch(type) {
-  var o = d3.event, p = d3_behavior_dragTarget.parentNode, dx = 0, dy = 0;
-
-  if (p) {
-    p = d3_behavior_dragPoint(p);
-    dx = p[0] - d3_behavior_dragOffset[0];
-    dy = p[1] - d3_behavior_dragOffset[1];
-    d3_behavior_dragOffset = p;
-    d3_behavior_dragMoved |= dx | dy;
-  }
-
-  try {
-    d3.event = {dx: dx, dy: dy};
-    d3_behavior_dragEvent[type].dispatch.apply(d3_behavior_dragTarget, d3_behavior_dragArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-
-function d3_behavior_dragPoint(container) {
-  return d3.event.touches
-      ? d3.svg.touches(container)[0]
-      : d3.svg.mouse(container);
-}
-
-function d3_behavior_dragMove() {
-  if (!d3_behavior_dragTarget) return;
-  var parent = d3_behavior_dragTarget.parentNode;
-
-  // O NOES! The drag element was removed from the DOM.
-  if (!parent) return d3_behavior_dragUp();
-
-  d3_behavior_dragDispatch("drag");
-  d3_behavior_dragCancel();
-}
-
-function d3_behavior_dragUp() {
-  if (!d3_behavior_dragTarget) return;
-  d3_behavior_dragDispatch("dragend");
-  d3_behavior_dragTarget = null;
-
-  // If the node was moved, prevent the mouseup from propagating.
-  // Also prevent the subsequent click from propagating (e.g., for anchors).
-  if (d3_behavior_dragMoved) {
-    d3_behavior_dragStopClick = true;
-    d3_behavior_dragCancel();
-  }
-}
-
-function d3_behavior_dragClick() {
-  if (d3_behavior_dragStopClick) {
-    d3_behavior_dragCancel();
-    d3_behavior_dragStopClick = false;
-  }
-}
-
-function d3_behavior_dragCancel() {
-  d3.event.stopPropagation();
-  d3.event.preventDefault();
-}
-// TODO unbind zoom behavior?
-// TODO unbind listener?
-d3.behavior.zoom = function() {
-  var xyz = [0, 0, 0],
-      event = d3.dispatch("zoom");
-
-  function zoom() {
-    this
-        .on("mousedown.zoom", mousedown)
-        .on("mousewheel.zoom", mousewheel)
-        .on("DOMMouseScroll.zoom", mousewheel)
-        .on("dblclick.zoom", dblclick)
-        .on("touchstart.zoom", touchstart);
-
-    d3.select(window)
-        .on("mousemove.zoom", d3_behavior_zoomMousemove)
-        .on("mouseup.zoom", d3_behavior_zoomMouseup)
-        .on("touchmove.zoom", d3_behavior_zoomTouchmove)
-        .on("touchend.zoom", d3_behavior_zoomTouchup)
-        .on("click.zoom", d3_behavior_zoomClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_zoomXyz = xyz;
-    d3_behavior_zoomDispatch = event.zoom.dispatch;
-    d3_behavior_zoomTarget = this;
-    d3_behavior_zoomArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomMoved = false;
-    d3.event.preventDefault();
-    window.focus();
-  }
-
-  // store starting mouse location
-  function mousewheel() {
-    start.apply(this, arguments);
-    if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming);
-  }
-
-  function dblclick() {
-    start.apply(this, arguments);
-    var mouse = d3.svg.mouse(d3_behavior_zoomTarget);
-    d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse));
-  }
-
-  // doubletap detection
-  function touchstart() {
-    start.apply(this, arguments);
-    var touches = d3_behavior_zoomTouchup(),
-        touch,
-        now = Date.now();
-    if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) {
-      d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]);
-    }
-    d3_behavior_zoomLast = now;
-  }
-
-  zoom.on = function(type, listener) {
-    event[type].add(listener);
-    return zoom;
-  };
-
-  return zoom;
-};
-
-var d3_behavior_zoomDiv,
-    d3_behavior_zoomPanning,
-    d3_behavior_zoomZooming,
-    d3_behavior_zoomLocations = {}, // identifier -> location
-    d3_behavior_zoomLast = 0,
-    d3_behavior_zoomXyz,
-    d3_behavior_zoomDispatch,
-    d3_behavior_zoomTarget,
-    d3_behavior_zoomArguments,
-    d3_behavior_zoomMoved,
-    d3_behavior_zoomStopClick;
-
-function d3_behavior_zoomLocation(point) {
-  return [
-    point[0] - d3_behavior_zoomXyz[0],
-    point[1] - d3_behavior_zoomXyz[1],
-    d3_behavior_zoomXyz[2]
-  ];
-}
-
-// detect the pixels that would be scrolled by this wheel event
-function d3_behavior_zoomDelta() {
-
-  // mousewheel events are totally broken!
-  // https://bugs.webkit.org/show_bug.cgi?id=40441
-  // not only that, but Chrome and Safari differ in re. to acceleration!
-  if (!d3_behavior_zoomDiv) {
-    d3_behavior_zoomDiv = d3.select("body").append("div")
-        .style("visibility", "hidden")
-        .style("top", 0)
-        .style("height", 0)
-        .style("width", 0)
-        .style("overflow-y", "scroll")
-      .append("div")
-        .style("height", "2000px")
-      .node().parentNode;
-  }
-
-  var e = d3.event, delta;
-  try {
-    d3_behavior_zoomDiv.scrollTop = 1000;
-    d3_behavior_zoomDiv.dispatchEvent(e);
-    delta = 1000 - d3_behavior_zoomDiv.scrollTop;
-  } catch (error) {
-    delta = e.wheelDelta || (-e.detail * 5);
-  }
-
-  return delta * .005;
-}
-
-// Note: Since we don't rotate, it's possible for the touches to become
-// slightly detached from their original positions. Thus, we recompute the
-// touch points on touchend as well as touchstart!
-function d3_behavior_zoomTouchup() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget),
-      i = -1,
-      n = touches.length,
-      touch;
-  while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch);
-  return touches;
-}
-
-function d3_behavior_zoomTouchmove() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget);
-  switch (touches.length) {
-
-    // single-touch pan
-    case 1: {
-      var touch = touches[0];
-      d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]);
-      break;
-    }
-
-    // double-touch pan + zoom
-    case 2: {
-      var p0 = touches[0],
-          p1 = touches[1],
-          p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2],
-          l0 = d3_behavior_zoomLocations[p0.identifier],
-          l1 = d3_behavior_zoomLocations[p1.identifier],
-          l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]];
-      d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2);
-      break;
-    }
-  }
-}
-
-function d3_behavior_zoomMousemove() {
-  d3_behavior_zoomZooming = null;
-  if (d3_behavior_zoomPanning) {
-    d3_behavior_zoomMoved = true;
-    d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
-  }
-}
-
-function d3_behavior_zoomMouseup() {
-  if (d3_behavior_zoomPanning) {
-    if (d3_behavior_zoomMoved) d3_behavior_zoomStopClick = true;
-    d3_behavior_zoomMousemove();
-    d3_behavior_zoomPanning = null;
-  }
-}
-
-function d3_behavior_zoomClick() {
-  if (d3_behavior_zoomStopClick) {
-    d3.event.stopPropagation();
-    d3.event.preventDefault();
-    d3_behavior_zoomStopClick = false;
-  }
-}
-
-function d3_behavior_zoomTo(z, x0, x1) {
-  var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]),
-      x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0],
-      y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1],
-      o = d3.event, // Events can be reentrant (e.g., focus).
-      k = Math.pow(2, z);
-
-  d3.event = {
-    scale: k,
-    translate: [x, y],
-    transform: function(sx, sy) {
-      if (sx) transform(sx, x);
-      if (sy) transform(sy, y);
-    }
-  };
-
-  function transform(scale, o) {
-    var domain = scale.__domain || (scale.__domain = scale.domain()),
-        range = scale.range().map(function(v) { return (v - o) / k; });
-    scale.domain(domain).domain(range.map(scale.invert));
-  }
-
-  try {
-    d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-})();
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.layout.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.layout.js
deleted file mode 100755
index 6cc1d7161677597ae7f718a4c0cafb90a240a56a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.layout.js
+++ /dev/null
@@ -1,1865 +0,0 @@
-(function(){d3.layout = {};
-// Implements hierarchical edge bundling using Holten's algorithm. For each
-// input link, a path is computed that travels through the tree, up the parent
-// hierarchy to the least common ancestor, and then back down to the destination
-// node. Each path is simply an array of nodes.
-d3.layout.bundle = function() {
-  return function(links) {
-    var paths = [],
-        i = -1,
-        n = links.length;
-    while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
-    return paths;
-  };
-};
-
-function d3_layout_bundlePath(link) {
-  var start = link.source,
-      end = link.target,
-      lca = d3_layout_bundleLeastCommonAncestor(start, end),
-      points = [start];
-  while (start !== lca) {
-    start = start.parent;
-    points.push(start);
-  }
-  var k = points.length;
-  while (end !== lca) {
-    points.splice(k, 0, end);
-    end = end.parent;
-  }
-  return points;
-}
-
-function d3_layout_bundleAncestors(node) {
-  var ancestors = [],
-      parent = node.parent;
-  while (parent != null) {
-    ancestors.push(node);
-    node = parent;
-    parent = parent.parent;
-  }
-  ancestors.push(node);
-  return ancestors;
-}
-
-function d3_layout_bundleLeastCommonAncestor(a, b) {
-  if (a === b) return a;
-  var aNodes = d3_layout_bundleAncestors(a),
-      bNodes = d3_layout_bundleAncestors(b),
-      aNode = aNodes.pop(),
-      bNode = bNodes.pop(),
-      sharedNode = null;
-  while (aNode === bNode) {
-    sharedNode = aNode;
-    aNode = aNodes.pop();
-    bNode = bNodes.pop();
-  }
-  return sharedNode;
-}
-d3.layout.chord = function() {
-  var chord = {},
-      chords,
-      groups,
-      matrix,
-      n,
-      padding = 0,
-      sortGroups,
-      sortSubgroups,
-      sortChords;
-
-  function relayout() {
-    var subgroups = {},
-        groupSums = [],
-        groupIndex = d3.range(n),
-        subgroupIndex = [],
-        k,
-        x,
-        x0,
-        i,
-        j;
-
-    chords = [];
-    groups = [];
-
-    // Compute the sum.
-    k = 0, i = -1; while (++i < n) {
-      x = 0, j = -1; while (++j < n) {
-        x += matrix[i][j];
-      }
-      groupSums.push(x);
-      subgroupIndex.push(d3.range(n));
-      k += x;
-    }
-
-    // Sort groups…
-    if (sortGroups) {
-      groupIndex.sort(function(a, b) {
-        return sortGroups(groupSums[a], groupSums[b]);
-      });
-    }
-
-    // Sort subgroups…
-    if (sortSubgroups) {
-      subgroupIndex.forEach(function(d, i) {
-        d.sort(function(a, b) {
-          return sortSubgroups(matrix[i][a], matrix[i][b]);
-        });
-      });
-    }
-
-    // Convert the sum to scaling factor for [0, 2pi].
-    // TODO Allow start and end angle to be specified.
-    // TODO Allow padding to be specified as percentage?
-    k = (2 * Math.PI - padding * n) / k;
-
-    // Compute the start and end angle for each group and subgroup.
-    x = 0, i = -1; while (++i < n) {
-      x0 = x, j = -1; while (++j < n) {
-        var di = groupIndex[i],
-            dj = subgroupIndex[i][j],
-            v = matrix[di][dj];
-        subgroups[di + "-" + dj] = {
-          index: di,
-          subindex: dj,
-          startAngle: x,
-          endAngle: x += v * k,
-          value: v
-        };
-      }
-      groups.push({
-        index: di,
-        startAngle: x0,
-        endAngle: x,
-        value: (x - x0) / k
-      });
-      x += padding;
-    }
-
-    // Generate chords for each (non-empty) subgroup-subgroup link.
-    i = -1; while (++i < n) {
-      j = i - 1; while (++j < n) {
-        var source = subgroups[i + "-" + j],
-            target = subgroups[j + "-" + i];
-        if (source.value || target.value) {
-          chords.push(source.value < target.value
-              ? {source: target, target: source}
-              : {source: source, target: target});
-        }
-      }
-    }
-
-    if (sortChords) resort();
-  }
-
-  function resort() {
-    chords.sort(function(a, b) {
-      return sortChords(a.target.value, b.target.value);
-    });
-  }
-
-  chord.matrix = function(x) {
-    if (!arguments.length) return matrix;
-    n = (matrix = x) && matrix.length;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.padding = function(x) {
-    if (!arguments.length) return padding;
-    padding = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortGroups = function(x) {
-    if (!arguments.length) return sortGroups;
-    sortGroups = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortSubgroups = function(x) {
-    if (!arguments.length) return sortSubgroups;
-    sortSubgroups = x;
-    chords = null;
-    return chord;
-  };
-
-  chord.sortChords = function(x) {
-    if (!arguments.length) return sortChords;
-    sortChords = x;
-    if (chords) resort();
-    return chord;
-  };
-
-  chord.chords = function() {
-    if (!chords) relayout();
-    return chords;
-  };
-
-  chord.groups = function() {
-    if (!groups) relayout();
-    return groups;
-  };
-
-  return chord;
-};
-// A rudimentary force layout using Gauss-Seidel.
-d3.layout.force = function() {
-  var force = {},
-      event = d3.dispatch("tick"),
-      size = [1, 1],
-      drag,
-      alpha,
-      friction = .9,
-      linkDistance = d3_layout_forceLinkDistance,
-      linkStrength = d3_layout_forceLinkStrength,
-      charge = -30,
-      gravity = .1,
-      theta = .8,
-      interval,
-      nodes = [],
-      links = [],
-      distances,
-      strengths;
-
-  function repulse(node, kc) {
-    return function(quad, x1, y1, x2, y2) {
-      if (quad.point !== node) {
-        var dx = quad.cx - node.x,
-            dy = quad.cy - node.y,
-            dn = 1 / Math.sqrt(dx * dx + dy * dy);
-
-        /* Barnes-Hut criterion. */
-        if ((x2 - x1) * dn < theta) {
-          var k = kc * quad.count * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-          return true;
-        }
-
-        if (quad.point && isFinite(dn)) {
-          var k = kc * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-        }
-      }
-    };
-  }
-
-  function tick() {
-    var n = nodes.length,
-        m = links.length,
-        q,
-        i, // current index
-        o, // current object
-        s, // current source
-        t, // current target
-        l, // current distance
-        k, // current force
-        x, // x-distance
-        y; // y-distance
-
-    // gauss-seidel relaxation for links
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      s = o.source;
-      t = o.target;
-      x = t.x - s.x;
-      y = t.y - s.y;
-      if (l = (x * x + y * y)) {
-        l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
-        x *= l;
-        y *= l;
-        t.x -= x * (k = s.weight / (t.weight + s.weight));
-        t.y -= y * k;
-        s.x += x * (k = 1 - k);
-        s.y += y * k;
-      }
-    }
-
-    // apply gravity forces
-    if (k = alpha * gravity) {
-      x = size[0] / 2;
-      y = size[1] / 2;
-      i = -1; if (k) while (++i < n) {
-        o = nodes[i];
-        o.x += (x - o.x) * k;
-        o.y += (y - o.y) * k;
-      }
-    }
-
-    // compute quadtree center of mass and apply charge forces
-    if (k = alpha * charge) {
-      d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes));
-      i = -1; while (++i < n) {
-        if (!(o = nodes[i]).fixed) {
-          q.visit(repulse(o, k));
-        }
-      }
-    }
-
-    // position verlet integration
-    i = -1; while (++i < n) {
-      o = nodes[i];
-      if (o.fixed) {
-        o.x = o.px;
-        o.y = o.py;
-      } else {
-        o.x -= (o.px - (o.px = o.x)) * friction;
-        o.y -= (o.py - (o.py = o.y)) * friction;
-      }
-    }
-
-    event.tick.dispatch({type: "tick", alpha: alpha});
-
-    // simulated annealing, basically
-    return (alpha *= .99) < .005;
-  }
-
-  force.on = function(type, listener) {
-    event[type].add(listener);
-    return force;
-  };
-
-  force.nodes = function(x) {
-    if (!arguments.length) return nodes;
-    nodes = x;
-    return force;
-  };
-
-  force.links = function(x) {
-    if (!arguments.length) return links;
-    links = x;
-    return force;
-  };
-
-  force.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return force;
-  };
-
-  force.linkDistance = function(x) {
-    if (!arguments.length) return linkDistance;
-    linkDistance = d3.functor(x);
-    return force;
-  };
-
-  // For backwards-compatibility.
-  force.distance = force.linkDistance;
-
-  force.linkStrength = function(x) {
-    if (!arguments.length) return linkStrength;
-    linkStrength = d3.functor(x);
-    return force;
-  };
-
-  force.friction = function(x) {
-    if (!arguments.length) return friction;
-    friction = x;
-    return force;
-  };
-
-  force.charge = function(x) {
-    if (!arguments.length) return charge;
-    charge = x;
-    return force;
-  };
-
-  force.gravity = function(x) {
-    if (!arguments.length) return gravity;
-    gravity = x;
-    return force;
-  };
-
-  force.theta = function(x) {
-    if (!arguments.length) return theta;
-    theta = x;
-    return force;
-  };
-
-  force.start = function() {
-    var i,
-        j,
-        n = nodes.length,
-        m = links.length,
-        w = size[0],
-        h = size[1],
-        neighbors,
-        o;
-
-    for (i = 0; i < n; ++i) {
-      (o = nodes[i]).index = i;
-      o.weight = 0;
-    }
-
-    distances = [];
-    strengths = [];
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      if (typeof o.source == "number") o.source = nodes[o.source];
-      if (typeof o.target == "number") o.target = nodes[o.target];
-      distances[i] = linkDistance.call(this, o, i);
-      strengths[i] = linkStrength.call(this, o, i);
-      ++o.source.weight;
-      ++o.target.weight;
-    }
-
-    for (i = 0; i < n; ++i) {
-      o = nodes[i];
-      if (isNaN(o.x)) o.x = position("x", w);
-      if (isNaN(o.y)) o.y = position("y", h);
-      if (isNaN(o.px)) o.px = o.x;
-      if (isNaN(o.py)) o.py = o.y;
-    }
-
-    // initialize node position based on first neighbor
-    function position(dimension, size) {
-      var neighbors = neighbor(i),
-          j = -1,
-          m = neighbors.length,
-          x;
-      while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
-      return Math.random() * size;
-    }
-
-    // initialize neighbors lazily
-    function neighbor() {
-      if (!neighbors) {
-        neighbors = [];
-        for (j = 0; j < n; ++j) {
-          neighbors[j] = [];
-        }
-        for (j = 0; j < m; ++j) {
-          var o = links[j];
-          neighbors[o.source.index].push(o.target);
-          neighbors[o.target.index].push(o.source);
-        }
-      }
-      return neighbors[i];
-    }
-
-    return force.resume();
-  };
-
-  force.resume = function() {
-    alpha = .1;
-    d3.timer(tick);
-    return force;
-  };
-
-  force.stop = function() {
-    alpha = 0;
-    return force;
-  };
-
-  // use `node.call(force.drag)` to make nodes draggable
-  force.drag = function() {
-    if (!drag) drag = d3.behavior.drag()
-        .on("dragstart", dragstart)
-        .on("drag", d3_layout_forceDrag)
-        .on("dragend", d3_layout_forceDragEnd);
-
-    this.on("mouseover.force", d3_layout_forceDragOver)
-        .on("mouseout.force", d3_layout_forceDragOut)
-        .call(drag);
-  };
-
-  function dragstart(d) {
-    d3_layout_forceDragOver(d3_layout_forceDragNode = d);
-    d3_layout_forceDragForce = force;
-  }
-
-  return force;
-};
-
-var d3_layout_forceDragForce,
-    d3_layout_forceDragNode;
-
-function d3_layout_forceDragOver(d) {
-  d.fixed |= 2;
-}
-
-function d3_layout_forceDragOut(d) {
-  if (d !== d3_layout_forceDragNode) d.fixed &= 1;
-}
-
-function d3_layout_forceDragEnd() {
-  d3_layout_forceDrag();
-  d3_layout_forceDragNode.fixed &= 1;
-  d3_layout_forceDragForce = d3_layout_forceDragNode = null;
-}
-
-function d3_layout_forceDrag() {
-  d3_layout_forceDragNode.px += d3.event.dx;
-  d3_layout_forceDragNode.py += d3.event.dy;
-  d3_layout_forceDragForce.resume(); // restart annealing
-}
-
-function d3_layout_forceAccumulate(quad) {
-  var cx = 0,
-      cy = 0;
-  quad.count = 0;
-  if (!quad.leaf) {
-    var nodes = quad.nodes,
-        n = nodes.length,
-        i = -1,
-        c;
-    while (++i < n) {
-      c = nodes[i];
-      if (c == null) continue;
-      d3_layout_forceAccumulate(c);
-      quad.count += c.count;
-      cx += c.count * c.cx;
-      cy += c.count * c.cy;
-    }
-  }
-  if (quad.point) {
-    // jitter internal nodes that are coincident
-    if (!quad.leaf) {
-      quad.point.x += Math.random() - .5;
-      quad.point.y += Math.random() - .5;
-    }
-    quad.count++;
-    cx += quad.point.x;
-    cy += quad.point.y;
-  }
-  quad.cx = cx / quad.count;
-  quad.cy = cy / quad.count;
-}
-
-function d3_layout_forceLinkDistance(link) {
-  return 20;
-}
-
-function d3_layout_forceLinkStrength(link) {
-  return 1;
-}
-d3.layout.partition = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      size = [1, 1]; // width, height
-
-  function position(node, x, dx, dy) {
-    var children = node.children;
-    node.x = x;
-    node.y = node.depth * dy;
-    node.dx = dx;
-    node.dy = dy;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          c,
-          d;
-      dx = node.value ? dx / node.value : 0;
-      while (++i < n) {
-        position(c = children[i], x, d = c.value * dx, dy);
-        x += d;
-      }
-    }
-  }
-
-  function depth(node) {
-    var children = node.children,
-        d = 0;
-    if (children) {
-      var i = -1,
-          n = children.length;
-      while (++i < n) d = Math.max(d, depth(children[i]));
-    }
-    return 1 + d;
-  }
-
-  function partition(d, i) {
-    var nodes = hierarchy.call(this, d, i);
-    position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
-    return nodes;
-  }
-
-  partition.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return partition;
-  };
-
-  return d3_layout_hierarchyRebind(partition, hierarchy);
-};
-d3.layout.pie = function() {
-  var value = Number,
-      sort = null,
-      startAngle = 0,
-      endAngle = 2 * Math.PI;
-
-  function pie(data, i) {
-
-    // Compute the start angle.
-    var a = +(typeof startAngle === "function"
-        ? startAngle.apply(this, arguments)
-        : startAngle);
-
-    // Compute the angular range (end - start).
-    var k = (typeof endAngle === "function"
-        ? endAngle.apply(this, arguments)
-        : endAngle) - startAngle;
-
-    // Optionally sort the data.
-    var index = d3.range(data.length);
-    if (sort != null) index.sort(function(i, j) {
-      return sort(data[i], data[j]);
-    });
-
-    // Compute the numeric values for each data element.
-    var values = data.map(value);
-
-    // Convert k into a scale factor from value to angle, using the sum.
-    k /= values.reduce(function(p, d) { return p + d; }, 0);
-
-    // Compute the arcs!
-    var arcs = index.map(function(i) {
-      return {
-        data: data[i],
-        value: d = values[i],
-        startAngle: a,
-        endAngle: a += d * k
-      };
-    });
-
-    // Return the arcs in the original data's order.
-    return data.map(function(d, i) {
-      return arcs[index[i]];
-    });
-  }
-
-  /**
-   * Specifies the value function *x*, which returns a nonnegative numeric value
-   * for each datum. The default value function is `Number`. The value function
-   * is passed two arguments: the current datum and the current index.
-   */
-  pie.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return pie;
-  };
-
-  /**
-   * Specifies a sort comparison operator *x*. The comparator is passed two data
-   * elements from the data array, a and b; it returns a negative value if a is
-   * less than b, a positive value if a is greater than b, and zero if a equals
-   * b.
-   */
-  pie.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall start angle of the pie chart. Defaults to 0. The
-   * start angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.startAngle = function(x) {
-    if (!arguments.length) return startAngle;
-    startAngle = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall end angle of the pie chart. Defaults to 2Ï€. The
-   * end angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.endAngle = function(x) {
-    if (!arguments.length) return endAngle;
-    endAngle = x;
-    return pie;
-  };
-
-  return pie;
-};
-// data is two-dimensional array of x,y; we populate y0
-d3.layout.stack = function() {
-  var values = Object,
-      order = d3_layout_stackOrders["default"],
-      offset = d3_layout_stackOffsets["zero"],
-      out = d3_layout_stackOut,
-      x = d3_layout_stackX,
-      y = d3_layout_stackY;
-
-  function stack(data, index) {
-
-    // Convert series to canonical two-dimensional representation.
-    var series = data.map(function(d, i) {
-      return values.call(stack, d, i);
-    });
-
-    // Convert each series to canonical [[x,y]] representation.
-    var points = series.map(function(d, i) {
-      return d.map(function(v, i) {
-        return [x.call(stack, v, i), y.call(stack, v, i)];
-      });
-    });
-
-    // Compute the order of series, and permute them.
-    var orders = order.call(stack, points, index);
-    series = d3.permute(series, orders);
-    points = d3.permute(points, orders);
-
-    // Compute the baseline…
-    var offsets = offset.call(stack, points, index);
-
-    // And propagate it to other series.
-    var n = series.length,
-        m = series[0].length,
-        i,
-        j,
-        o;
-    for (j = 0; j < m; ++j) {
-      out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
-      for (i = 1; i < n; ++i) {
-        out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
-      }
-    }
-
-    return data;
-  }
-
-  stack.values = function(x) {
-    if (!arguments.length) return values;
-    values = x;
-    return stack;
-  };
-
-  stack.order = function(x) {
-    if (!arguments.length) return order;
-    order = typeof x === "function" ? x : d3_layout_stackOrders[x];
-    return stack;
-  };
-
-  stack.offset = function(x) {
-    if (!arguments.length) return offset;
-    offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
-    return stack;
-  };
-
-  stack.x = function(z) {
-    if (!arguments.length) return x;
-    x = z;
-    return stack;
-  };
-
-  stack.y = function(z) {
-    if (!arguments.length) return y;
-    y = z;
-    return stack;
-  };
-
-  stack.out = function(z) {
-    if (!arguments.length) return out;
-    out = z;
-    return stack;
-  };
-
-  return stack;
-}
-
-function d3_layout_stackX(d) {
-  return d.x;
-}
-
-function d3_layout_stackY(d) {
-  return d.y;
-}
-
-function d3_layout_stackOut(d, y0, y) {
-  d.y0 = y0;
-  d.y = y;
-}
-
-var d3_layout_stackOrders = {
-
-  "inside-out": function(data) {
-    var n = data.length,
-        i,
-        j,
-        max = data.map(d3_layout_stackMaxIndex),
-        sums = data.map(d3_layout_stackReduceSum),
-        index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
-        top = 0,
-        bottom = 0,
-        tops = [],
-        bottoms = [];
-    for (i = 0; i < n; ++i) {
-      j = index[i];
-      if (top < bottom) {
-        top += sums[j];
-        tops.push(j);
-      } else {
-        bottom += sums[j];
-        bottoms.push(j);
-      }
-    }
-    return bottoms.reverse().concat(tops);
-  },
-
-  "reverse": function(data) {
-    return d3.range(data.length).reverse();
-  },
-
-  "default": function(data) {
-    return d3.range(data.length);
-  }
-
-};
-
-var d3_layout_stackOffsets = {
-
-  "silhouette": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        sums = [],
-        max = 0,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o > max) max = o;
-      sums.push(o);
-    }
-    for (j = 0; j < m; ++j) {
-      y0[j] = (max - sums[j]) / 2;
-    }
-    return y0;
-  },
-
-  "wiggle": function(data) {
-    var n = data.length,
-        x = data[0],
-        m = x.length,
-        max = 0,
-        i,
-        j,
-        k,
-        s1,
-        s2,
-        s3,
-        dx,
-        o,
-        o0,
-        y0 = [];
-    y0[0] = o = o0 = 0;
-    for (j = 1; j < m; ++j) {
-      for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
-      for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
-        for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
-          s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
-        }
-        s2 += s3 * data[i][j][1];
-      }
-      y0[j] = o -= s1 ? s2 / s1 * dx : 0;
-      if (o < o0) o0 = o;
-    }
-    for (j = 0; j < m; ++j) y0[j] -= o0;
-    return y0;
-  },
-
-  "expand": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        k = 1 / n,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
-      else for (i = 0; i < n; i++) data[i][j][1] = k;
-    }
-    for (j = 0; j < m; ++j) y0[j] = 0;
-    return y0;
-  },
-
-  "zero": function(data) {
-    var j = -1,
-        m = data[0].length,
-        y0 = [];
-    while (++j < m) y0[j] = 0;
-    return y0;
-  }
-
-};
-
-function d3_layout_stackMaxIndex(array) {
-  var i = 1,
-      j = 0,
-      v = array[0][1],
-      k,
-      n = array.length;
-  for (; i < n; ++i) {
-    if ((k = array[i][1]) > v) {
-      j = i;
-      v = k;
-    }
-  }
-  return j;
-}
-
-function d3_layout_stackReduceSum(d) {
-  return d.reduce(d3_layout_stackSum, 0);
-}
-
-function d3_layout_stackSum(p, d) {
-  return p + d[1];
-}
-d3.layout.histogram = function() {
-  var frequency = true,
-      valuer = Number,
-      ranger = d3_layout_histogramRange,
-      binner = d3_layout_histogramBinSturges;
-
-  function histogram(data, i) {
-    var bins = [],
-        values = data.map(valuer, this),
-        range = ranger.call(this, values, i),
-        thresholds = binner.call(this, range, values, i),
-        bin,
-        i = -1,
-        n = values.length,
-        m = thresholds.length - 1,
-        k = frequency ? 1 : 1 / n,
-        x;
-
-    // Initialize the bins.
-    while (++i < m) {
-      bin = bins[i] = [];
-      bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
-      bin.y = 0;
-    }
-
-    // Fill the bins, ignoring values outside the range.
-    i = -1; while(++i < n) {
-      x = values[i];
-      if ((x >= range[0]) && (x <= range[1])) {
-        bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
-        bin.y += k;
-        bin.push(data[i]);
-      }
-    }
-
-    return bins;
-  }
-
-  // Specifies how to extract a value from the associated data. The default
-  // value function is `Number`, which is equivalent to the identity function.
-  histogram.value = function(x) {
-    if (!arguments.length) return valuer;
-    valuer = x;
-    return histogram;
-  };
-
-  // Specifies the range of the histogram. Values outside the specified range
-  // will be ignored. The argument `x` may be specified either as a two-element
-  // array representing the minimum and maximum value of the range, or as a
-  // function that returns the range given the array of values and the current
-  // index `i`. The default range is the extent (minimum and maximum) of the
-  // values.
-  histogram.range = function(x) {
-    if (!arguments.length) return ranger;
-    ranger = d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies how to bin values in the histogram. The argument `x` may be
-  // specified as a number, in which case the range of values will be split
-  // uniformly into the given number of bins. Or, `x` may be an array of
-  // threshold values, defining the bins; the specified array must contain the
-  // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
-  // may be a function which is evaluated, being passed the range, the array of
-  // values, and the current index `i`, returning an array of thresholds. The
-  // default bin function will divide the values into uniform bins using
-  // Sturges' formula.
-  histogram.bins = function(x) {
-    if (!arguments.length) return binner;
-    binner = typeof x === "number"
-        ? function(range) { return d3_layout_histogramBinFixed(range, x); }
-        : d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies whether the histogram's `y` value is a count (frequency) or a
-  // probability (density). The default value is true.
-  histogram.frequency = function(x) {
-    if (!arguments.length) return frequency;
-    frequency = !!x;
-    return histogram;
-  };
-
-  return histogram;
-};
-
-function d3_layout_histogramBinSturges(range, values) {
-  return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
-}
-
-function d3_layout_histogramBinFixed(range, n) {
-  var x = -1,
-      b = +range[0],
-      m = (range[1] - b) / n,
-      f = [];
-  while (++x <= n) f[x] = m * x + b;
-  return f;
-}
-
-function d3_layout_histogramRange(values) {
-  return [d3.min(values), d3.max(values)];
-}
-d3.layout.hierarchy = function() {
-  var sort = d3_layout_hierarchySort,
-      children = d3_layout_hierarchyChildren,
-      value = d3_layout_hierarchyValue;
-
-  // Recursively compute the node depth and value.
-  // Also converts the data representation into a standard hierarchy structure.
-  function recurse(data, depth, nodes) {
-    var childs = children.call(hierarchy, data, depth),
-        node = d3_layout_hierarchyInline ? data : {data: data};
-    node.depth = depth;
-    nodes.push(node);
-    if (childs) {
-      var i = -1,
-          n = childs.length,
-          c = node.children = [],
-          v = 0,
-          j = depth + 1;
-      while (++i < n) {
-        d = recurse(childs[i], j, nodes);
-        d.parent = node;
-        c.push(d);
-        v += d.value;
-      }
-      if (sort) c.sort(sort);
-      if (value) node.value = v;
-    } else if (value) {
-      node.value = +value.call(hierarchy, data, depth) || 0;
-    }
-    return node;
-  }
-
-  // Recursively re-evaluates the node value.
-  function revalue(node, depth) {
-    var children = node.children,
-        v = 0;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          j = depth + 1;
-      while (++i < n) v += revalue(children[i], j);
-    } else if (value) {
-      v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0;
-    }
-    if (value) node.value = v;
-    return v;
-  }
-
-  function hierarchy(d) {
-    var nodes = [];
-    recurse(d, 0, nodes);
-    return nodes;
-  }
-
-  hierarchy.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return hierarchy;
-  };
-
-  hierarchy.children = function(x) {
-    if (!arguments.length) return children;
-    children = x;
-    return hierarchy;
-  };
-
-  hierarchy.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return hierarchy;
-  };
-
-  // Re-evaluates the `value` property for the specified hierarchy.
-  hierarchy.revalue = function(root) {
-    revalue(root, 0);
-    return root;
-  };
-
-  return hierarchy;
-};
-
-// A method assignment helper for hierarchy subclasses.
-function d3_layout_hierarchyRebind(object, hierarchy) {
-  object.sort = d3.rebind(object, hierarchy.sort);
-  object.children = d3.rebind(object, hierarchy.children);
-  object.links = d3_layout_hierarchyLinks;
-  object.value = d3.rebind(object, hierarchy.value);
-
-  // If the new API is used, enabling inlining.
-  object.nodes = function(d) {
-    d3_layout_hierarchyInline = true;
-    return (object.nodes = object)(d);
-  };
-
-  return object;
-}
-
-function d3_layout_hierarchyChildren(d) {
-  return d.children;
-}
-
-function d3_layout_hierarchyValue(d) {
-  return d.value;
-}
-
-function d3_layout_hierarchySort(a, b) {
-  return b.value - a.value;
-}
-
-// Returns an array source+target objects for the specified nodes.
-function d3_layout_hierarchyLinks(nodes) {
-  return d3.merge(nodes.map(function(parent) {
-    return (parent.children || []).map(function(child) {
-      return {source: parent, target: child};
-    });
-  }));
-}
-
-// For backwards-compatibility, don't enable inlining by default.
-var d3_layout_hierarchyInline = false;
-d3.layout.pack = function() {
-  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
-      size = [1, 1];
-
-  function pack(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    // Recursively compute the layout.
-    root.x = 0;
-    root.y = 0;
-    d3_layout_packTree(root);
-
-    // Scale the layout to fit the requested size.
-    var w = size[0],
-        h = size[1],
-        k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
-    d3_layout_packTransform(root, w / 2, h / 2, k);
-
-    return nodes;
-  }
-
-  pack.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return pack;
-  };
-
-  return d3_layout_hierarchyRebind(pack, hierarchy);
-};
-
-function d3_layout_packSort(a, b) {
-  return a.value - b.value;
-}
-
-function d3_layout_packInsert(a, b) {
-  var c = a._pack_next;
-  a._pack_next = b;
-  b._pack_prev = a;
-  b._pack_next = c;
-  c._pack_prev = b;
-}
-
-function d3_layout_packSplice(a, b) {
-  a._pack_next = b;
-  b._pack_prev = a;
-}
-
-function d3_layout_packIntersects(a, b) {
-  var dx = b.x - a.x,
-      dy = b.y - a.y,
-      dr = a.r + b.r;
-  return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
-}
-
-function d3_layout_packCircle(nodes) {
-  var xMin = Infinity,
-      xMax = -Infinity,
-      yMin = Infinity,
-      yMax = -Infinity,
-      n = nodes.length,
-      a, b, c, j, k;
-
-  function bound(node) {
-    xMin = Math.min(node.x - node.r, xMin);
-    xMax = Math.max(node.x + node.r, xMax);
-    yMin = Math.min(node.y - node.r, yMin);
-    yMax = Math.max(node.y + node.r, yMax);
-  }
-
-  // Create node links.
-  nodes.forEach(d3_layout_packLink);
-
-  // Create first node.
-  a = nodes[0];
-  a.x = -a.r;
-  a.y = 0;
-  bound(a);
-
-  // Create second node.
-  if (n > 1) {
-    b = nodes[1];
-    b.x = b.r;
-    b.y = 0;
-    bound(b);
-
-    // Create third node and build chain.
-    if (n > 2) {
-      c = nodes[2];
-      d3_layout_packPlace(a, b, c);
-      bound(c);
-      d3_layout_packInsert(a, c);
-      a._pack_prev = c;
-      d3_layout_packInsert(c, b);
-      b = a._pack_next;
-
-      // Now iterate through the rest.
-      for (var i = 3; i < n; i++) {
-        d3_layout_packPlace(a, b, c = nodes[i]);
-
-        // Search for the closest intersection.
-        var isect = 0, s1 = 1, s2 = 1;
-        for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
-          if (d3_layout_packIntersects(j, c)) {
-            isect = 1;
-            break;
-          }
-        }
-        if (isect == 1) {
-          for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
-            if (d3_layout_packIntersects(k, c)) {
-              if (s2 < s1) {
-                isect = -1;
-                j = k;
-              }
-              break;
-            }
-          }
-        }
-
-        // Update node chain.
-        if (isect == 0) {
-          d3_layout_packInsert(a, c);
-          b = c;
-          bound(c);
-        } else if (isect > 0) {
-          d3_layout_packSplice(a, j);
-          b = j;
-          i--;
-        } else { // isect < 0
-          d3_layout_packSplice(j, b);
-          a = j;
-          i--;
-        }
-      }
-    }
-  }
-
-  // Re-center the circles and return the encompassing radius.
-  var cx = (xMin + xMax) / 2,
-      cy = (yMin + yMax) / 2,
-      cr = 0;
-  for (var i = 0; i < n; i++) {
-    var node = nodes[i];
-    node.x -= cx;
-    node.y -= cy;
-    cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
-  }
-
-  // Remove node links.
-  nodes.forEach(d3_layout_packUnlink);
-
-  return cr;
-}
-
-function d3_layout_packLink(node) {
-  node._pack_next = node._pack_prev = node;
-}
-
-function d3_layout_packUnlink(node) {
-  delete node._pack_next;
-  delete node._pack_prev;
-}
-
-function d3_layout_packTree(node) {
-  var children = node.children;
-  if (children) {
-    children.forEach(d3_layout_packTree);
-    node.r = d3_layout_packCircle(children);
-  } else {
-    node.r = Math.sqrt(node.value);
-  }
-}
-
-function d3_layout_packTransform(node, x, y, k) {
-  var children = node.children;
-  node.x = (x += k * node.x);
-  node.y = (y += k * node.y);
-  node.r *= k;
-  if (children) {
-    var i = -1, n = children.length;
-    while (++i < n) d3_layout_packTransform(children[i], x, y, k);
-  }
-}
-
-function d3_layout_packPlace(a, b, c) {
-  var da = b.r + c.r,
-      db = a.r + c.r,
-      dx = b.x - a.x,
-      dy = b.y - a.y,
-      dc = Math.sqrt(dx * dx + dy * dy),
-      cos = (db * db + dc * dc - da * da) / (2 * db * dc),
-      theta = Math.acos(cos),
-      x = cos * db,
-      h = Math.sin(theta) * db;
-  dx /= dc;
-  dy /= dc;
-  c.x = a.x + x * dx + h * dy;
-  c.y = a.y + x * dy - h * dx;
-}
-// Implements a hierarchical layout using the cluster (or dendogram) algorithm.
-d3.layout.cluster = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function cluster(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0],
-        previousNode,
-        x = 0,
-        kx,
-        ky;
-
-    // First walk, computing the initial x & y values.
-    d3_layout_treeVisitAfter(root, function(node) {
-      if (node.children) {
-        node.x = d3_layout_clusterX(node.children);
-        node.y = d3_layout_clusterY(node.children);
-      } else {
-        node.x = previousNode ? x += separation(node, previousNode) : 0;
-        node.y = 0;
-        previousNode = node;
-      }
-    });
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_clusterLeft(root),
-        right = d3_layout_clusterRight(root),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2;
-
-    // Second walk, normalizing x & y to the desired size.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = (1 - node.y / root.y) * size[1];
-    });
-
-    return nodes;
-  }
-
-  cluster.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return cluster;
-  };
-
-  cluster.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return cluster;
-  };
-
-  return d3_layout_hierarchyRebind(cluster, hierarchy);
-};
-
-function d3_layout_clusterY(children) {
-  return 1 + d3.max(children, function(child) {
-    return child.y;
-  });
-}
-
-function d3_layout_clusterX(children) {
-  return children.reduce(function(x, child) {
-    return x + child.x;
-  }, 0) / children.length;
-}
-
-function d3_layout_clusterLeft(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterLeft(children[0]) : node;
-}
-
-function d3_layout_clusterRight(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterRight(children[children.length - 1]) : node;
-}
-// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
-d3.layout.tree = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function tree(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    function firstWalk(node, previousSibling) {
-      var children = node.children,
-          layout = node._tree;
-      if (children && (n = children.length)) {
-        var n,
-            firstChild = children[0],
-            previousChild,
-            ancestor = firstChild,
-            child,
-            i = -1;
-        while (++i < n) {
-          child = children[i];
-          firstWalk(child, previousChild);
-          ancestor = apportion(child, previousChild, ancestor);
-          previousChild = child;
-        }
-        d3_layout_treeShift(node);
-        var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-          layout.mod = layout.prelim - midpoint;
-        } else {
-          layout.prelim = midpoint;
-        }
-      } else {
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-        }
-      }
-    }
-
-    function secondWalk(node, x) {
-      node.x = node._tree.prelim + x;
-      var children = node.children;
-      if (children) {
-        var i = -1,
-            n = children.length;
-        x += node._tree.mod;
-        while (++i < n) {
-          secondWalk(children[i], x);
-        }
-      }
-    }
-
-    function apportion(node, previousSibling, ancestor) {
-      if (previousSibling) {
-        var vip = node,
-            vop = node,
-            vim = previousSibling,
-            vom = node.parent.children[0],
-            sip = vip._tree.mod,
-            sop = vop._tree.mod,
-            sim = vim._tree.mod,
-            som = vom._tree.mod,
-            shift;
-        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
-          vom = d3_layout_treeLeft(vom);
-          vop = d3_layout_treeRight(vop);
-          vop._tree.ancestor = node;
-          shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
-          if (shift > 0) {
-            d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
-            sip += shift;
-            sop += shift;
-          }
-          sim += vim._tree.mod;
-          sip += vip._tree.mod;
-          som += vom._tree.mod;
-          sop += vop._tree.mod;
-        }
-        if (vim && !d3_layout_treeRight(vop)) {
-          vop._tree.thread = vim;
-          vop._tree.mod += sim - sop;
-        }
-        if (vip && !d3_layout_treeLeft(vom)) {
-          vom._tree.thread = vip;
-          vom._tree.mod += sip - som;
-          ancestor = node;
-        }
-      }
-      return ancestor;
-    }
-
-    // Initialize temporary layout variables.
-    d3_layout_treeVisitAfter(root, function(node, previousSibling) {
-      node._tree = {
-        ancestor: node,
-        prelim: 0,
-        mod: 0,
-        change: 0,
-        shift: 0,
-        number: previousSibling ? previousSibling._tree.number + 1 : 0
-      };
-    });
-
-    // Compute the layout using Buchheim et al.'s algorithm.
-    firstWalk(root);
-    secondWalk(root, -root._tree.prelim);
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
-        right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
-        deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2,
-        y1 = deep.depth || 1;
-
-    // Clear temporary layout variables; transform x and y.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = node.depth / y1 * size[1];
-      delete node._tree;
-    });
-
-    return nodes;
-  }
-
-  tree.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return tree;
-  };
-
-  tree.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return tree;
-  };
-
-  return d3_layout_hierarchyRebind(tree, hierarchy);
-};
-
-function d3_layout_treeSeparation(a, b) {
-  return a.parent == b.parent ? 1 : 2;
-}
-
-// function d3_layout_treeSeparationRadial(a, b) {
-//   return (a.parent == b.parent ? 1 : 2) / a.depth;
-// }
-
-function d3_layout_treeLeft(node) {
-  return node.children ? node.children[0] : node._tree.thread;
-}
-
-function d3_layout_treeRight(node) {
-  return node.children ? node.children[node.children.length - 1] : node._tree.thread;
-}
-
-function d3_layout_treeSearch(node, compare) {
-  var children = node.children;
-  if (children) {
-    var child,
-        n = children.length,
-        i = -1;
-    while (++i < n) {
-      if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
-        node = child;
-      }
-    }
-  }
-  return node;
-}
-
-function d3_layout_treeRightmost(a, b) {
-  return a.x - b.x;
-}
-
-function d3_layout_treeLeftmost(a, b) {
-  return b.x - a.x;
-}
-
-function d3_layout_treeDeepest(a, b) {
-  return a.depth - b.depth;
-}
-
-function d3_layout_treeVisitAfter(node, callback) {
-  function visit(node, previousSibling) {
-    var children = node.children;
-    if (children) {
-      var child,
-          previousChild = null,
-          i = -1,
-          n = children.length;
-      while (++i < n) {
-        child = children[i];
-        visit(child, previousChild);
-        previousChild = child;
-      }
-    }
-    callback(node, previousSibling);
-  }
-  visit(node, null);
-}
-
-function d3_layout_treeShift(node) {
-  var shift = 0,
-      change = 0,
-      children = node.children,
-      i = children.length,
-      child;
-  while (--i >= 0) {
-    child = children[i]._tree;
-    child.prelim += shift;
-    child.mod += shift;
-    shift += child.shift + (change += child.change);
-  }
-}
-
-function d3_layout_treeMove(ancestor, node, shift) {
-  ancestor = ancestor._tree;
-  node = node._tree;
-  var change = shift / (node.number - ancestor.number);
-  ancestor.change += change;
-  node.change -= change;
-  node.shift += shift;
-  node.prelim += shift;
-  node.mod += shift;
-}
-
-function d3_layout_treeAncestor(vim, node, ancestor) {
-  return vim._tree.ancestor.parent == node.parent
-      ? vim._tree.ancestor
-      : ancestor;
-}
-// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
-// Modified to support a target aspect ratio by Jeff Heer
-d3.layout.treemap = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      round = Math.round,
-      size = [1, 1], // width, height
-      padding = null,
-      pad = d3_layout_treemapPadNull,
-      sticky = false,
-      stickies,
-      ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
-
-  // Compute the area for each child based on value & scale.
-  function scale(children, k) {
-    var i = -1,
-        n = children.length,
-        child,
-        area;
-    while (++i < n) {
-      area = (child = children[i]).value * (k < 0 ? 0 : k);
-      child.area = isNaN(area) || area <= 0 ? 0 : area;
-    }
-  }
-
-  // Recursively arranges the specified node's children into squarified rows.
-  function squarify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        row = [],
-        children = node.children.slice(), // copy-on-write
-        child,
-        best = Infinity, // the best row score so far
-        score, // the current row score
-        u = Math.min(rect.dx, rect.dy), // initial orientation
-        n;
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while ((n = children.length) > 0) {
-      row.push(child = children[n - 1]);
-      row.area += child.area;
-      if ((score = worst(row, u)) <= best) { // continue with this orientation
-        children.pop();
-        best = score;
-      } else { // abort, and try a different orientation
-        row.area -= row.pop().area;
-        position(row, u, rect, false);
-        u = Math.min(rect.dx, rect.dy);
-        row.length = row.area = 0;
-        best = Infinity;
-      }
-    }
-    if (row.length) {
-      position(row, u, rect, true);
-      row.length = row.area = 0;
-    }
-    node.children.forEach(squarify);
-  }
-
-  // Recursively resizes the specified node's children into existing rows.
-  // Preserves the existing layout!
-  function stickify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        children = node.children.slice(), // copy-on-write
-        child,
-        row = [];
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while (child = children.pop()) {
-      row.push(child);
-      row.area += child.area;
-      if (child.z != null) {
-        position(row, child.z ? rect.dx : rect.dy, rect, !children.length);
-        row.length = row.area = 0;
-      }
-    }
-    node.children.forEach(stickify);
-  }
-
-  // Computes the score for the specified row, as the worst aspect ratio.
-  function worst(row, u) {
-    var s = row.area,
-        r,
-        rmax = 0,
-        rmin = Infinity,
-        i = -1,
-        n = row.length;
-    while (++i < n) {
-      if (!(r = row[i].area)) continue;
-      if (r < rmin) rmin = r;
-      if (r > rmax) rmax = r;
-    }
-    s *= s;
-    u *= u;
-    return s
-        ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
-        : Infinity;
-  }
-
-  // Positions the specified row of nodes. Modifies `rect`.
-  function position(row, u, rect, flush) {
-    var i = -1,
-        n = row.length,
-        x = rect.x,
-        y = rect.y,
-        v = u ? round(row.area / u) : 0,
-        o;
-    if (u == rect.dx) { // horizontal subdivision
-      if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dy = v;
-        x += o.dx = v ? round(o.area / v) : 0;
-      }
-      o.z = true;
-      o.dx += rect.x + rect.dx - x; // rounding error
-      rect.y += v;
-      rect.dy -= v;
-    } else { // vertical subdivision
-      if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dx = v;
-        y += o.dy = v ? round(o.area / v) : 0;
-      }
-      o.z = false;
-      o.dy += rect.y + rect.dy - y; // rounding error
-      rect.x += v;
-      rect.dx -= v;
-    }
-  }
-
-  function treemap(d) {
-    var nodes = stickies || hierarchy(d),
-        root = nodes[0];
-    root.x = 0;
-    root.y = 0;
-    root.dx = size[0];
-    root.dy = size[1];
-    if (stickies) hierarchy.revalue(root);
-    scale([root], root.dx * root.dy / root.value);
-    (stickies ? stickify : squarify)(root);
-    if (sticky) stickies = nodes;
-    return nodes;
-  }
-
-  treemap.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return treemap;
-  };
-
-  treemap.padding = function(x) {
-    if (!arguments.length) return padding;
-
-    function padFunction(node) {
-      var p = x.call(treemap, node, node.depth);
-      return p == null
-          ? d3_layout_treemapPadNull(node)
-          : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
-    }
-
-    function padConstant(node) {
-      return d3_layout_treemapPad(node, x);
-    }
-
-    var type;
-    pad = (padding = x) == null ? d3_layout_treemapPadNull
-        : (type = typeof x) === "function" ? padFunction
-        : type === "number" ? (x = [x, x, x, x], padConstant)
-        : padConstant;
-    return treemap;
-  };
-
-  treemap.round = function(x) {
-    if (!arguments.length) return round != Number;
-    round = x ? Math.round : Number;
-    return treemap;
-  };
-
-  treemap.sticky = function(x) {
-    if (!arguments.length) return sticky;
-    sticky = x;
-    stickies = null;
-    return treemap;
-  };
-
-  treemap.ratio = function(x) {
-    if (!arguments.length) return ratio;
-    ratio = x;
-    return treemap;
-  };
-
-  return d3_layout_hierarchyRebind(treemap, hierarchy);
-};
-
-function d3_layout_treemapPadNull(node) {
-  return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
-}
-
-function d3_layout_treemapPad(node, padding) {
-  var x = node.x + padding[3],
-      y = node.y + padding[0],
-      dx = node.dx - padding[1] - padding[3],
-      dy = node.dy - padding[0] - padding[2];
-  if (dx < 0) { x += dx / 2; dx = 0; }
-  if (dy < 0) { y += dy / 2; dy = 0; }
-  return {x: x, y: y, dx: dx, dy: dy};
-}
-})();
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.time.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.time.js
deleted file mode 100644
index e1c0831c88e2984fbabc189a5347238bde72abb2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.time.js
+++ /dev/null
@@ -1,692 +0,0 @@
-(function(){d3.time = {};
-
-var d3_time = Date;
-d3.time.format = function(template) {
-  var n = template.length;
-
-  function format(date) {
-    var string = [],
-        i = -1,
-        j = 0,
-        c,
-        f;
-    while (++i < n) {
-      if (template.charCodeAt(i) == 37) {
-        string.push(
-            template.substring(j, i),
-            (f = d3_time_formats[c = template.charAt(++i)])
-            ? f(date) : c);
-        j = i + 1;
-      }
-    }
-    string.push(template.substring(j, i));
-    return string.join("");
-  }
-
-  format.parse = function(string) {
-    var date = new d3_time(1900, 0, 1),
-        i = d3_time_parse(date, template, string, 0);
-    if (i != string.length) return null;
-    if (date.hour12) {
-      var hours = date.getHours() % 12;
-      date.setHours(date.hour12pm ? hours + 12 : hours);
-    }
-    delete date.hour12;
-    delete date.hour12pm;
-    return date;
-  };
-
-  format.toString = function() {
-    return template;
-  };
-
-  return format;
-};
-
-function d3_time_parse(date, template, string, j) {
-  var c,
-      p,
-      i = 0,
-      n = template.length,
-      m = string.length;
-  while (i < n) {
-    if (j >= m) return -1;
-    c = template.charCodeAt(i++);
-    if (c == 37) {
-      p = d3_time_parsers[template.charAt(i++)];
-      if (!p || ((j = p(date, string, j)) < 0)) return -1;
-    } else if (c != string.charCodeAt(j++)) {
-      return -1;
-    }
-  }
-  return j;
-}
-
-var d3_time_zfill2 = d3.format("02d"),
-    d3_time_zfill3 = d3.format("03d"),
-    d3_time_zfill4 = d3.format("04d"),
-    d3_time_sfill2 = d3.format("2d");
-
-var d3_time_formats = {
-  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
-  A: function(d) { return d3_time_weekdays[d.getDay()]; },
-  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
-  B: function(d) { return d3_time_months[d.getMonth()]; },
-  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
-  d: function(d) { return d3_time_zfill2(d.getDate()); },
-  e: function(d) { return d3_time_sfill2(d.getDate()); },
-  H: function(d) { return d3_time_zfill2(d.getHours()); },
-  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
-  j: d3_time_dayOfYear,
-  L: function(d) { return d3_time_zfill3(d.getMilliseconds()); },
-  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
-  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
-  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
-  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
-  U: d3_time_weekNumberSunday,
-  w: function(d) { return d.getDay(); },
-  W: d3_time_weekNumberMonday,
-  x: d3.time.format("%m/%d/%y"),
-  X: d3.time.format("%H:%M:%S"),
-  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
-  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
-  Z: d3_time_zone,
-  "%": function(d) { return "%"; }
-};
-
-var d3_time_parsers = {
-  a: d3_time_parseWeekdayAbbrev,
-  A: d3_time_parseWeekday,
-  b: d3_time_parseMonthAbbrev,
-  B: d3_time_parseMonth,
-  c: d3_time_parseLocaleFull,
-  d: d3_time_parseDay,
-  e: d3_time_parseDay,
-  H: d3_time_parseHour24,
-  I: d3_time_parseHour12,
-  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
-  L: d3_time_parseMilliseconds,
-  m: d3_time_parseMonthNumber,
-  M: d3_time_parseMinutes,
-  p: d3_time_parseAmPm,
-  S: d3_time_parseSeconds,
-  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
-  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
-  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
-  x: d3_time_parseLocaleDate,
-  X: d3_time_parseLocaleTime,
-  y: d3_time_parseYear,
-  Y: d3_time_parseFullYear
-  // ,
-  // Z: function(d, s, i) { /*TODO time zone */ return i; },
-  // "%": function(d, s, i) { /*TODO literal % */ return i; }
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekdayAbbrev(date, string, i) {
-  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
-}
-
-var d3_time_weekdayAbbrevLookup = {
-  sun: 3,
-  mon: 3,
-  tue: 3,
-  wed: 3,
-  thu: 3,
-  fri: 3,
-  sat: 3
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekday(date, string, i) {
-  d3_time_weekdayRe.lastIndex = 0;
-  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
-  return n ? i += n[0].length : -1;
-}
-
-var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
-
-var d3_time_weekdays = [
-  "Sunday",
-  "Monday",
-  "Tuesday",
-  "Wednesday",
-  "Thursday",
-  "Friday",
-  "Saturday"
-];
-
-function d3_time_parseMonthAbbrev(date, string, i) {
-  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
-  return n == null ? -1 : (date.setMonth(n), i);
-}
-
-var d3_time_monthAbbrevLookup = {
-  jan: 0,
-  feb: 1,
-  mar: 2,
-  apr: 3,
-  may: 4,
-  jun: 5,
-  jul: 6,
-  aug: 7,
-  sep: 8,
-  oct: 9,
-  nov: 10,
-  dec: 11
-};
-
-function d3_time_parseMonth(date, string, i) {
-  d3_time_monthRe.lastIndex = 0;
-  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
-  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
-}
-
-var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
-
-var d3_time_monthLookup = {
-  january: 0,
-  february: 1,
-  march: 2,
-  april: 3,
-  may: 4,
-  june: 5,
-  july: 6,
-  august: 7,
-  september: 8,
-  october: 9,
-  november: 10,
-  december: 11
-};
-
-var d3_time_months = [
-  "January",
-  "February",
-  "March",
-  "April",
-  "May",
-  "June",
-  "July",
-  "August",
-  "September",
-  "October",
-  "November",
-  "December"
-];
-
-function d3_time_parseLocaleFull(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
-}
-
-function d3_time_parseLocaleDate(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
-}
-
-function d3_time_parseLocaleTime(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
-}
-
-function d3_time_parseFullYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
-  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_century() {
-  return ~~(new Date().getFullYear() / 1000) * 1000;
-}
-
-function d3_time_parseMonthNumber(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
-}
-
-function d3_time_parseDay(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [0,23].
-function d3_time_parseHour24(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [1,12].
-function d3_time_parseHour12(date, string, i) {
-  date.hour12 = true;
-  return d3_time_parseHour24(date, string, i);
-}
-
-function d3_time_parseMinutes(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseSeconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseMilliseconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 3));
-  return n ? (date.setMilliseconds(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't look at the next directive.
-var d3_time_numberRe = /\s*\d+/;
-
-function d3_time_parseAmPm(date, string, i) {
-  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
-  return n == null ? -1 : (date.hour12pm = n, i);
-}
-
-var d3_time_amPmLookup = {
-  am: 0,
-  pm: 1
-};
-
-function d3_time_year(d) {
-  return new d3_time(d.getFullYear(), 0, 1);
-}
-
-function d3_time_daysElapsed(d0, d1) {
-  return ~~((d1 - d0) / 864e5 - (d1.getTimezoneOffset() - d0.getTimezoneOffset()) / 1440);
-}
-
-function d3_time_dayOfYear(d) {
-  return d3_time_zfill3(1 + d3_time_daysElapsed(d3_time_year(d), d));
-}
-
-function d3_time_weekNumberSunday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + d0.getDay()) / 7));
-}
-
-function d3_time_weekNumberMonday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + (d0.getDay() + 6) % 7) / 7));
-}
-
-// TODO table of time zone offset names?
-function d3_time_zone(d) {
-  var z = d.getTimezoneOffset(),
-      zs = z > 0 ? "-" : "+",
-      zh = ~~(Math.abs(z) / 60),
-      zm = Math.abs(z) % 60;
-  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
-}
-d3.time.format.utc = function(template) {
-  var local = d3.time.format(template);
-
-  function format(date) {
-    try {
-      d3_time = d3_time_format_utc;
-      var utc = new d3_time();
-      utc._ = date;
-      return local(utc);
-    } finally {
-      d3_time = Date;
-    }
-  }
-
-  format.parse = function(string) {
-    try {
-      d3_time = d3_time_format_utc;
-      var date = local.parse(string);
-      return date && date._;
-    } finally {
-      d3_time = Date;
-    }
-  };
-
-  format.toString = local.toString;
-
-  return format;
-};
-
-function d3_time_format_utc() {
-  this._ = new Date(Date.UTC.apply(this, arguments));
-}
-
-d3_time_format_utc.prototype = {
-  getDate: function() { return this._.getUTCDate(); },
-  getDay: function() { return this._.getUTCDay(); },
-  getFullYear: function() { return this._.getUTCFullYear(); },
-  getHours: function() { return this._.getUTCHours(); },
-  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
-  getMinutes: function() { return this._.getUTCMinutes(); },
-  getMonth: function() { return this._.getUTCMonth(); },
-  getSeconds: function() { return this._.getUTCSeconds(); },
-  getTimezoneOffset: function() { return 0; },
-  valueOf: function() { return this._.getTime(); },
-  setDate: function(x) { this._.setUTCDate(x); },
-  setDay: function(x) { this._.setUTCDay(x); },
-  setFullYear: function(x) { this._.setUTCFullYear(x); },
-  setHours: function(x) { this._.setUTCHours(x); },
-  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
-  setMinutes: function(x) { this._.setUTCMinutes(x); },
-  setMonth: function(x) { this._.setUTCMonth(x); },
-  setSeconds: function(x) { this._.setUTCSeconds(x); }
-};
-var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
-
-d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso;
-
-function d3_time_formatIsoNative(date) {
-  return date.toISOString();
-}
-
-d3_time_formatIsoNative.parse = function(string) {
-  return new Date(string);
-};
-
-d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
-function d3_time_range(floor, step, number) {
-  return function(t0, t1, dt) {
-    var time = floor(t0), times = [];
-    if (time < t0) step(time);
-    if (dt > 1) {
-      while (time < t1) {
-        var date = new Date(+time);
-        if (!(number(date) % dt)) times.push(date);
-        step(time);
-      }
-    } else {
-      while (time < t1) times.push(new Date(+time)), step(time);
-    }
-    return times;
-  };
-}
-d3.time.second = function(date) {
-  return new Date(~~(date / 1e3) * 1e3);
-};
-
-d3.time.second.utc = d3.time.second;
-d3.time.seconds = d3_time_range(d3.time.second, function(date) {
-  date.setTime(date.getTime() + 1e3);
-}, function(date) {
-  return date.getSeconds();
-});
-
-d3.time.seconds.utc = d3.time.seconds;
-d3.time.minute = function(date) {
-  return new Date(~~(date / 6e4) * 6e4);
-};
-
-d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getMinutes();
-});
-
-d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getUTCMinutes();
-});
-
-function d3_time_minutesStep(date) {
-  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
-}
-d3.time.hour = function(date) {
-  var offset = date.getTimezoneOffset() / 60;
-  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
-};
-
-d3.time.hour.utc = function(date) {
-  return new Date(~~(date / 36e5) * 36e5);
-};
-d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
-  return date.getHours();
-});
-
-d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
-  return date.getUTCHours();
-});
-
-function d3_time_hoursStep(date) {
-  date.setTime(date.getTime() + 36e5);
-}
-d3.time.day = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
-};
-
-d3.time.day.utc = function(date) {
-  return new Date(~~(date / 864e5) * 864e5);
-};
-d3.time.days = d3_time_range(d3.time.day, function(date) {
-  date.setDate(date.getDate() + 1);
-}, function(date) {
-  return date.getDate() - 1;
-});
-
-d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 1);
-}, function(date) {
-  return date.getUTCDate() - 1;
-});
-d3.time.week = function(date) {
-  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
-  return date;
-};
-
-d3.time.week.utc = function(date) {
-  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
-  return date;
-};
-d3.time.weeks = d3_time_range(d3.time.week, function(date) {
-  date.setDate(date.getDate() + 7);
-}, function(date) {
-  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
-});
-
-d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 7);
-}, function(date) {
-  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
-});
-d3.time.month = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), 1);
-};
-
-d3.time.month.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
-};
-d3.time.months = d3_time_range(d3.time.month, function(date) {
-  date.setMonth(date.getMonth() + 1);
-}, function(date) {
-  return date.getMonth();
-});
-
-d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
-  date.setUTCMonth(date.getUTCMonth() + 1);
-}, function(date) {
-  return date.getUTCMonth();
-});
-d3.time.year = function(date) {
-  return new Date(date.getFullYear(), 0, 1);
-};
-
-d3.time.year.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
-};
-d3.time.years = d3_time_range(d3.time.year, function(date) {
-  date.setFullYear(date.getFullYear() + 1);
-}, function(date) {
-  return date.getFullYear();
-});
-
-d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
-  date.setUTCFullYear(date.getUTCFullYear() + 1);
-}, function(date) {
-  return date.getUTCFullYear();
-});
-// TODO nice
-function d3_time_scale(linear, methods, format) {
-
-  function scale(x) {
-    return linear(x);
-  }
-
-  scale.invert = function(x) {
-    return d3_time_scaleDate(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
-    linear.domain(x);
-    return scale;
-  };
-
-  scale.ticks = function(m, k) {
-    var extent = d3_time_scaleExtent(scale.domain());
-    if (typeof m !== "function") {
-      var span = extent[1] - extent[0],
-          target = span / m,
-          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
-      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
-      m = methods[i];
-      k = m[1];
-      m = m[0];
-    }
-    return m(extent[0], extent[1], k);
-  };
-
-  scale.tickFormat = function() {
-    return format;
-  };
-
-  scale.copy = function() {
-    return d3_time_scale(linear.copy(), methods, format);
-  };
-
-  // TOOD expose d3_scale_linear_rebind?
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-
-  return scale;
-}
-
-// TODO expose d3_scaleExtent?
-function d3_time_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-
-function d3_time_scaleDate(t) {
-  return new Date(t);
-}
-
-function d3_time_scaleFormat(formats) {
-  return function(date) {
-    var i = formats.length - 1, f = formats[i];
-    while (!f[1](date)) f = formats[--i];
-    return f[0](date);
-  };
-}
-
-var d3_time_scaleSteps = [
-  1e3,    // 1-second
-  5e3,    // 5-second
-  15e3,   // 15-second
-  3e4,    // 30-second
-  6e4,    // 1-minute
-  3e5,    // 5-minute
-  9e5,    // 15-minute
-  18e5,   // 30-minute
-  36e5,   // 1-hour
-  108e5,  // 3-hour
-  216e5,  // 6-hour
-  432e5,  // 12-hour
-  864e5,  // 1-day
-  1728e5, // 2-day
-  6048e5, // 1-week
-  1728e6, // 1-month
-  7776e6, // 3-month
-  31536e6 // 1-year
-];
-
-var d3_time_scaleLocalMethods = [
-  [d3.time.seconds, 1],
-  [d3.time.seconds, 5],
-  [d3.time.seconds, 15],
-  [d3.time.seconds, 30],
-  [d3.time.minutes, 1],
-  [d3.time.minutes, 5],
-  [d3.time.minutes, 15],
-  [d3.time.minutes, 30],
-  [d3.time.hours, 1],
-  [d3.time.hours, 3],
-  [d3.time.hours, 6],
-  [d3.time.hours, 12],
-  [d3.time.days, 1],
-  [d3.time.days, 2],
-  [d3.time.weeks, 1],
-  [d3.time.months, 1],
-  [d3.time.months, 3],
-  [d3.time.years, 1]
-];
-
-var d3_time_scaleLocalFormats = [
-  [d3.time.format("%Y"), function(d) { return true; }],
-  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
-  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
-  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
-  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
-  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
-  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
-];
-
-var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
-
-d3.time.scale = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
-};
-var d3_time_scaleUTCMethods = [
-  [d3.time.seconds.utc, 1],
-  [d3.time.seconds.utc, 5],
-  [d3.time.seconds.utc, 15],
-  [d3.time.seconds.utc, 30],
-  [d3.time.minutes.utc, 1],
-  [d3.time.minutes.utc, 5],
-  [d3.time.minutes.utc, 15],
-  [d3.time.minutes.utc, 30],
-  [d3.time.hours.utc, 1],
-  [d3.time.hours.utc, 3],
-  [d3.time.hours.utc, 6],
-  [d3.time.hours.utc, 12],
-  [d3.time.days.utc, 1],
-  [d3.time.days.utc, 2],
-  [d3.time.weeks.utc, 1],
-  [d3.time.months.utc, 1],
-  [d3.time.months.utc, 3],
-  [d3.time.years.utc, 1]
-];
-
-var d3_time_scaleUTCFormats = [
-  [d3.time.format.utc("%Y"), function(d) { return true; }],
-  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
-  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
-  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
-  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
-];
-
-var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
-
-d3.time.scale.utc = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
-};
-})();
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.tsv.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.tsv.js
deleted file mode 100644
index 8d9a5e4f7038bfe558e2cca878854d234b770b8d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/d3.tsv.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * TSV Parser from:
- *   https://github.com/vlandham/d3.tsv
- */
-(function(){d3.tsv = function(url, callback) {
-  d3.text(url, "text/tab-separated-values", function(text) {
-    callback(text && d3.tsv.parse(text, "\t"));
-  });
-};
-
-d3.tsv.version = "0.0.2"
-d3.tsv.parse = function(text, separator) {
-  var header;
-  return separator && d3.tsv.parseRows(text, separator, function(row, i) {
-    if (i) {
-      var o = {}, j = -1, m = header.length;
-      while (++j < m) o[header[j]] = row[j];
-      return o;
-    } else {
-      header = row;
-      return null;
-    }
-  });
-};
-
-d3.tsv.parseRows = function(text, separator, f) {
-  var EOL = {}, // sentinel value for end-of-line
-      EOF = {}, // sentinel value for end-of-file
-      rows = [], // output rows
-      re = new RegExp("\r\n|[" + separator + "\r\n]", "g"), // field separator regex
-      separatorCode = separator.charCodeAt(0), // code to match separator with
-      n = 0, // the current line number
-      t, // the current token
-      eol; // is the current token followed by EOL?
-
-  re.lastIndex = 0; // work-around bug in FF 3.6
-
-  /** @private Returns the next token. */
-  function token() {
-    if (re.lastIndex >= text.length) return EOF; // special case: end of file
-    if (eol) { eol = false; return EOL; } // special case: end of line
-
-    // special case: quotes
-    var j = re.lastIndex;
-    if (text.charCodeAt(j) === 34) {
-      var i = j;
-      while (i++ < text.length) {
-        if (text.charCodeAt(i) === 34) {
-          if (text.charCodeAt(i + 1) !== 34) break;
-          i++;
-        }
-      }
-      re.lastIndex = i + 2;
-      var c = text.charCodeAt(i + 1);
-      if (c === 13) {
-        eol = true;
-        if (text.charCodeAt(i + 2) === 10) re.lastIndex++;
-      } else if (c === 10) {
-        eol = true;
-      }
-      return text.substring(j + 1, i).replace(/""/g, "\"");
-    }
-
-    // common case
-    var m = re.exec(text);
-    if (m) {
-      eol = m[0].charCodeAt(0) !== separatorCode;
-      return text.substring(j, m.index);
-    }
-    re.lastIndex = text.length;
-    return text.substring(j);
-  }
-
-  while ((t = token()) !== EOF) {
-    var a = [];
-    while ((t !== EOL) && (t !== EOF)) {
-      a.push(t);
-      t = token();
-    }
-    if (f && !(a = f(a, n++))) continue;
-    rows.push(a);
-  }
-
-  return rows;
-};
-d3.tsv.format = function(rows) {
-  return rows.map(function (row) {
-    return d3_formatRow(row, "\t");
-  }).join("\n");
-};
-
-function d3_formatRow(row, separator) {
-  return row.map(d3_formatValue).join(separator);
-}
-
-function d3_formatValue(text) {
-  return /[",\n]/.test(text)
-      ? "\"" + text.replace(/\"/g, "\"\"") + "\""
-      : text;
-}
-})();
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/enzyme-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/enzyme-body-style.css
deleted file mode 100644
index 4b5724f05f824ef8e60e327320f35bac8d758941..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/enzyme-body-style.css
+++ /dev/null
@@ -1,130 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E0E0E0;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.enzyme-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#enzyme-table tr:nth-child(odd) td{
- background-color:#E0E0E0;
-}
-
-
-#enzyme-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#enzyme-table tr.enzyme-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#enzyme-table td{
-
-padding:5px;
-}
-
-#enzyme-table tr.enzyme-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#A8A8A8;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/enzyme-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/enzyme-browser.html
deleted file mode 100644
index 570fe2f3d4000852e8f8679db0b7819ac1511237..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/enzyme-browser.html
+++ /dev/null
@@ -1,784 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>enzyme Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="enzyme-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> ENZYMES </div>
-	<div id ="sectionsContainer"><div>
-
-	
-<!-- 		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">enzyme Name</td><td> <input style="width: 200px" id="enzymeName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
--->		
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table id="enzyme-table" style="float: left">
-			  <tr class="enzyme-table-header"><th>Code</th><th>Name</th><th>Supplier</th><th>Art. Number</th><th>Kit Including</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All enzymes
-var enzymes = null;
-
-/// The enzymes that are currently being inspected
-var inspectedenzymes = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    enzyme = objectOrId;
-  } else {
-  	enzyme = enzymesById[objectOrId];
-  }
-  
-  return enzyme;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the enzymes variable */
-function initializeenzymes(result)
-{
-      // Construct a map of all enzymes by id
-  enzymesById = {};
-
-	// Split the enzymes into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpenzymes = [], otherenzymes = [];
-	var frpRegex = /^FRE[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        enzymesById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the enzymesById map
-	    theSample = enzymesById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpenzymes.push(theSample);
-		} else {
-			otherenzymes.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherenzymes.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpenzymes.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(4));
-		var frpNumberB = parseInt(b.code.substring(4));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of enzymes
-	enzymes = frpenzymes.concat(otherenzymes);
-}
-
-
-
-/** Set the size of the enzyme-table based on whether or not inspectors are visible */
-function resizeenzymeTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var enzymeTableTransition = d3.selectAll('div.enzyme-table-data-cell');
-	enzymeTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectenzyme(enzyme)
-{
-	if (inspectedenzymes.indexOf(enzyme) < 0) {
-		inspectedenzymes.push(enzyme);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var enzymeToSend = $.extend({}, enzyme);
-		delete enzymeToSend.parents;
-		delete enzymeToSend.children;
-		openbisServer.listDataSetsForSample(enzymeToSend, true, dataset.curry(enzyme));
-	}
-	resizeenzymeTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(enzyme)
-{
-	var index = inspectedenzymes.indexOf(enzyme);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedenzymes.splice(index, 1);
-	resizeenzymeTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedenzymes, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectenzyme(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectenzyme(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeenzymes(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (enzymes.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#enzyme-table").selectAll("tr.enzyme-table-data").data(enzymes);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "enzyme-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectenzyme)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.SUPPLIER, sample.properties.ARTICLE_NUMBER, sample.properties.KIT]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "enzyme-table-data-cell")
-			.text(String)
-
-}
-
-function enzymeFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, enzymeNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (enzymeNameFilterText == undefined) 
-	{
-		enzymeNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedenzymes = enzymes.filter(enzymeFilter.curry(ownerFilterText, "OWNER"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(enzymeNameFilterText, "ENZYME_NAME"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#enzyme-table").selectAll("tr.enzyme-table-data").data(enzymes);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedenzymes) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "ENZYME" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#enzymeName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/general_protocol-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/general_protocol-body-style.css
deleted file mode 100644
index 45d44aa3c478a9518da19bf69dc196478df40633..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/general_protocol-body-style.css
+++ /dev/null
@@ -1,131 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E5FFCC;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color:#B2B2B2;;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.protocol-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#protocol-table tr:nth-child(odd) td{
-  background-color:#E5FFCC;
-}
-
-
-#protocol-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#protocol-table tr.protocol-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#protocol-table td{
-
-padding:5px;
-}
-
-#protocol-table tr.protocol-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:black;
-  background-color:	#CCFFCC;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/general_protocol-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/general_protocol-browser.html
deleted file mode 100644
index 0c4e147b4a3481d6f3e525beda041d5fce01eed5..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/general_protocol-browser.html
+++ /dev/null
@@ -1,1049 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Genereal Protocol Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="general_protocol-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> GENERAL PROTOCOLS </div>
-		<div id ="sectionsContainer"><div>	
-
-				
-
-<!--  
-		<div id="filter-button"	style="padding-left:400px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 400px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 400px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 400px">Antibody Name</td><td> <input style="width: 200px" id="antibodyName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 400px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 400px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 400px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-	-->	
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px; height: 500px; top: 100px; overflow: auto">
-		  <table id="protocol-table" style="float: left">
-			  <tr class="protocol-table-header"><th>Code</th><th>Name</th><th>For What</th><th>Protocol Type</th><th>Publication</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All protocol
-var protocols = null;
-
-/// The protocol that are currently being inspected
-var inspectedprotocols = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				
-			}	  
-			
-			   
-}								
-	
-	
-		var protocolValue = sample.properties.GENERAL_PROTOCOL;
-  	sample.properties.GENERAL_PROTOCOL_PARENTS = [];
-	
-		if (!xmlValueRegex.test(protocolValue))
-		return;
-
- 	  globalValue =protocolValue;
-		var protocolXml = xmlParser.parseFromString(protocolValue, "text/xml");
-	
-	
-		for (i=1; i < protocolXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = protocolXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("quantity") != null)  {
-	 	  				 var quantity = sampleNode.attributes.getNamedItem("quantity").value;
-						}	 		   		
-						else{
-								var quantity = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var GENERAL_PROTOCOL_PARENTS = null;
-			
-				
-				GENERAL_PROTOCOL_PARENTS = "\n\n    " +code  +  "(" + name + ")" + quantity ;
-				
-				
-				
-				sample.properties.GENERAL_PROTOCOL_PARENTS.push(GENERAL_PROTOCOL_PARENTS);
-				
-				
-			}	  
-			
-			   
-}									
-	
-
-	
-};
-
-function reformatString(sample)
-{
-
-
-  		sample.properties.WHAT_FOR = [];
-  		console.log(sample.properties.FOR_WHAT)
- 	
-			if (sample.properties.FOR_WHAT != "undefined") {
-				newArray = sample.properties.FOR_WHAT.split(/\d/);
-				for(i=0; i<newArray.length; i++) {
-   				WHAT_FOR = i+' '+newArray[i]+ "\n";
-   				sample.properties.WHAT_FOR.push(WHAT_FOR)
-   				
-				}
-				
-			console.log(sample.properties.WHAT_FOR)
-			//sample.properties.WHAT_FOR.push(sample.properties.WHAT_FOR)
-			}
-			
-			
-
-}
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION", "MATERIALS", "ORGANISM"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["PROCEDURE",  "PROTOCOL_EVALUATION", "DETAILS", "COMMENTS", "PUBLICATION"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS", "GENERAL_PROTOCOL_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","SUGGESTIONS", "PROTOCOL_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    protocol = objectOrId;
-  } else {
-  	protocol = protocolsById[objectOrId];
-  }
-  
-  return protocol;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the protocols variable */
-function initializeprotocols(result)
-{
-      // Construct a map of all protocols by id
-  protocolsById = {};
-
-	// Split the protocols into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpprotocols = [], otherprotocols = [];
-	var frpRegex = /^FRPROT[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        protocolsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the protocolsById map
-	    theSample = protocolsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpprotocols.push(theSample);
-		} else {
-			otherprotocols.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		reformatString(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherprotocols.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpprotocols.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(6));
-		var frpNumberB = parseInt(b.code.substring(6));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of protocols
-	protocols = frpprotocols.concat(otherprotocols);
-}
-
-
-
-
-/** Set the size of the protocol-table based on whether or not inspectors are visible */
-function resizeprotocolTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var protocolTableTransition = d3.selectAll('div.protocol-table-data-cell');
-	protocolTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectprotocol(protocol)
-{
-	if (inspectedprotocols.indexOf(protocol) < 0) {
-		inspectedprotocols.push(protocol);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var protocolToSend = $.extend({}, protocol);
-		delete protocolToSend.parents;
-		delete protocolToSend.children;
-	
-	}
-	resizeprotocolTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(protocol)
-{
-	var index = inspectedprotocols.indexOf(protocol);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedprotocols.splice(index, 1);
-	resizeprotocolTable();
-	updateInspectors(1000);
-}
-
-
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedprotocols, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectprotocol(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectprotocol(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeprotocols(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (protocols.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#protocol-table").selectAll("tr.protocol-table-data").data(protocols);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "protocol-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectprotocol)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.WHAT_FOR, sample.properties.PROTOCOL_TYPE, sample.properties.PUBLICATION]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "protocol-table-data-cell")
-			.text(String)
-
-}
-
-function protocolFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#protocol-table").selectAll("tr.protocol-table-data").data(protocols);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedprotocols) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "GENERAL_PROTOCOL" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.png b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.png
deleted file mode 100644
index 87ae5e81899908f3968ea230205322dc19ff4ee5..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.png and /dev/null differ
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.svg b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.svg
deleted file mode 100644
index 70ac6c77f2774a5a5e8f6875e3c8ae1acb8e952a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="400.023px" height="174.566px" viewBox="0 0 400.023 174.566" enable-background="new 0 0 400.023 174.566"
-	 xml:space="preserve">
-<g id="Layer_1">
-	<g>
-		<text transform="matrix(1 0 0 1 46.4854 154.2764)"><tspan x="0" y="0" fill="#010101" font-family="'HelveticaNeue-Bold'" font-size="93.505" letter-spacing="-4">open</tspan><tspan x="204.679" y="0" fill="#231F20" font-family="'HelveticaNeue'" font-size="93.505">BIS</tspan></text>
-		<rect x="204.234" y="158.748" fill="none" width="192.64" height="14.936"/>
-		<text transform="matrix(1 0 0 1 204.2329 169.876)" fill="#010101" font-family="'HelveticaNeue'" font-size="15.5842">Biology Information System</text>
-		<g>
-			<g>
-				<g>
-					<g>
-						<polygon fill="#068172" points="125.213,81.967 141.416,98.167 147.252,92.333 131.053,76.132 125.213,76.132 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#068172" points="120.206,81.967 104.005,98.167 98.168,92.333 114.368,76.132 120.206,76.132 							"/>
-						</g>
-						<g>
-							<polygon fill="#068172" points="120.206,65.286 104.005,49.084 98.168,54.92 114.368,71.12 120.206,71.12 							"/>
-						</g>
-					</g>
-				</g>
-				<g>
-					<polygon fill="#068172" points="125.213,65.286 141.416,49.084 147.252,54.92 131.053,71.12 125.213,71.12 					"/>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#A4A4A4" points="76.131,16.201 92.331,0 98.168,5.836 81.969,22.036 76.13,22.036 					"/>
-				</g>
-				<g>
-					<g>
-						<polygon fill="#ADACAF" points="76.131,32.882 92.331,49.084 98.168,43.247 81.969,27.048 76.13,27.048 						"/>
-					</g>
-					<g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,32.882 54.921,49.084 49.084,43.247 65.283,27.048 71.123,27.048 							"/>
-						</g>
-						<g>
-							<polygon fill="#ADACAF" points="71.122,16.201 54.921,0 49.084,5.836 65.283,22.036 71.123,22.036 							"/>
-						</g>
-					</g>
-				</g>
-			</g>
-			<g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,65.286 43.247,49.084 49.083,54.92 32.884,71.12 27.045,71.12 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="27.046,81.967 43.247,98.167 49.083,92.333 32.884,76.132 27.045,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,81.967 5.837,98.167 0,92.333 16.199,76.132 22.038,76.132 					"/>
-				</g>
-				<g>
-					<polygon fill="#ADACAF" points="22.038,65.286 5.837,49.084 0,54.92 16.199,71.12 22.038,71.12 					"/>
-				</g>
-			</g>
-		</g>
-	</g>
-</g>
-<g id="Layer_2">
-</g>
-</svg>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/index.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/index.html
deleted file mode 100644
index c4354285a057bcb690a8c36ad5e7be58136dd2b2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
-<head>
-	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-	<meta HTTP-EQUIV="REFRESH" content="0; url=search-browser.html">
-</head>
-<body>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/infra.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/infra.js
deleted file mode 100644
index c292b17ec147d3eeddc2f649802a0b0d64f18148..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/infra.js
+++ /dev/null
@@ -1,70 +0,0 @@
-if (!Array.prototype.filter)
-{
-  Array.prototype.filter = function(fun /*, thisp*/)
-  {
-    var len = this.length;
-    if (typeof fun != "function")
-      throw new TypeError();
-
-    var res = new Array();
-    var thisp = arguments[1];
-    for (var i = 0; i < len; i++)
-    {
-      if (i in this)
-      {
-        var val = this[i]; // in case fun mutates this
-        if (fun.call(thisp, val, i, this))
-          res.push(val);
-      }
-    }
-
-    return res;
-  };
-}
-
-if (!Array.prototype.search)
-{
-  Array.prototype.search = function(fun /*, thisp*/)
-  {
-    var len2 = this.length;
-    if (typeof fun != "function")
-      throw new TypeError();
-
-    var res2 = new Array();
-    var thisp = arguments[1];
-    for (var i = 0; i < len2; i++)
-    {
-      if (i in this)
-      {
-        var val2 = this[i]; // in case fun mutates this
-        if (fun.call(thisp, val2, i, this))
-          res2.push(val2);
-      }
-    }
-
-    return res2;
-  };
-}
-
-if (!Function.prototype.curry) 
-{ 
-	(function () 
-	{
-		var slice = Array.prototype.slice;
-		Function.prototype.curry = function () 
-		{
-			var target = this; 
-			var args = slice.call(arguments);
-			return function () 
-			{
-				var allArgs = args;
-				if (arguments.length > 0) 
-				{ 
-					allArgs = args.concat(slice.call(arguments));
-				}
-				return target.apply(this, allArgs); 
-			};
-		}; 
-	}())
-};
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/jquery.dataTables.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/jquery.dataTables.js
deleted file mode 100644
index ae5d1750d90c90f197ff742d72c3ce5da3efa0b0..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/jquery.dataTables.js
+++ /dev/null
@@ -1,11863 +0,0 @@
-/**
- * @summary     DataTables
- * @description Paginate, search and sort HTML tables
- * @version     1.9.2
- * @file        jquery.dataTables.js
- * @author      Allan Jardine (www.sprymedia.co.uk)
- * @contact     www.sprymedia.co.uk/contact
- *
- * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved.
- *
- * This source file is free software, under either the GPL v2 license or a
- * BSD style license, available at:
- *   http://datatables.net/license_gpl2
- *   http://datatables.net/license_bsd
- * 
- * This source file 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 license files for details.
- * 
- * For details please refer to: http://www.datatables.net
- */
-
-/*jslint evil: true, undef: true, browser: true */
-/*globals $, jQuery,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros*/
-
-(/** @lends <global> */function($, window, document, undefined) {
-	/** 
-	 * DataTables is a plug-in for the jQuery Javascript library. It is a 
-	 * highly flexible tool, based upon the foundations of progressive 
-	 * enhancement, which will add advanced interaction controls to any 
-	 * HTML table. For a full list of features please refer to
-	 * <a href="http://datatables.net">DataTables.net</a>.
-	 *
-	 * Note that the <i>DataTable</i> object is not a global variable but is
-	 * aliased to <i>jQuery.fn.DataTable</i> and <i>jQuery.fn.dataTable</i> through which 
-	 * it may be  accessed.
-	 *
-	 *  @class
-	 *  @param {object} [oInit={}] Configuration object for DataTables. Options
-	 *    are defined by {@link DataTable.defaults}
-	 *  @requires jQuery 1.3+
-	 * 
-	 *  @example
-	 *    // Basic initialisation
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable();
-	 *    } );
-	 *  
-	 *  @example
-	 *    // Initialisation with configuration options - in this case, disable
-	 *    // pagination and sorting.
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable( {
-	 *        "bPaginate": false,
-	 *        "bSort": false 
-	 *      } );
-	 *    } );
-	 */
-	var DataTable = function( oInit )
-	{
-		
-		
-		/**
-		 * Add a column to the list used for the table with default values
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} nTh The th element for this column
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAddColumn( oSettings, nTh )
-		{
-			var oDefaults = DataTable.defaults.columns;
-			var iCol = oSettings.aoColumns.length;
-			var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {
-				"sSortingClass": oSettings.oClasses.sSortable,
-				"sSortingClassJUI": oSettings.oClasses.sSortJUI,
-				"nTh": nTh ? nTh : document.createElement('th'),
-				"sTitle":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',
-				"aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
-				"mDataProp": oDefaults.mDataProp ? oDefaults.oDefaults : iCol
-			} );
-			oSettings.aoColumns.push( oCol );
-			
-			/* Add a column specific filter */
-			if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null )
-			{
-				oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch );
-			}
-			else
-			{
-				var oPre = oSettings.aoPreSearchCols[ iCol ];
-				
-				/* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */
-				if ( oPre.bRegex === undefined )
-				{
-					oPre.bRegex = true;
-				}
-				
-				if ( oPre.bSmart === undefined )
-				{
-					oPre.bSmart = true;
-				}
-				
-				if ( oPre.bCaseInsensitive === undefined )
-				{
-					oPre.bCaseInsensitive = true;
-				}
-			}
-			
-			/* Use the column options function to initialise classes etc */
-			_fnColumnOptions( oSettings, iCol, null );
-		}
-		
-		
-		/**
-		 * Apply options for a column
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iCol column index to consider
-		 *  @param {object} oOptions object with sType, bVisible and bSearchable
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnColumnOptions( oSettings, iCol, oOptions )
-		{
-			var oCol = oSettings.aoColumns[ iCol ];
-			
-			/* User specified column options */
-			if ( oOptions !== undefined && oOptions !== null )
-			{
-				if ( oOptions.sType !== undefined )
-				{
-					oCol.sType = oOptions.sType;
-					oCol._bAutoType = false;
-				}
-				
-				$.extend( oCol, oOptions );
-				_fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
-		
-				/* iDataSort to be applied (backwards compatibility), but aDataSort will take
-				 * priority if defined
-				 */
-				if ( oOptions.iDataSort !== undefined )
-				{
-					oCol.aDataSort = [ oOptions.iDataSort ];
-				}
-				_fnMap( oCol, oOptions, "aDataSort" );
-			}
-		
-			/* Cache the data get and set functions for speed */
-			oCol.fnGetData = _fnGetObjectDataFn( oCol.mDataProp );
-			oCol.fnSetData = _fnSetObjectDataFn( oCol.mDataProp );
-			
-			/* Feature sorting overrides column specific when off */
-			if ( !oSettings.oFeatures.bSort )
-			{
-				oCol.bSortable = false;
-			}
-			
-			/* Check that the class assignment is correct for sorting */
-			if ( !oCol.bSortable ||
-				 ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
-			{
-				oCol.sSortingClass = oSettings.oClasses.sSortableNone;
-				oCol.sSortingClassJUI = "";
-			}
-			else if ( oCol.bSortable ||
-			          ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
-			{
-			  oCol.sSortingClass = oSettings.oClasses.sSortable;
-			  oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI;
-			}
-			else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 )
-			{
-				oCol.sSortingClass = oSettings.oClasses.sSortableAsc;
-				oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed;
-			}
-			else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 )
-			{
-				oCol.sSortingClass = oSettings.oClasses.sSortableDesc;
-				oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed;
-			}
-		}
-		
-		
-		/**
-		 * Adjust the table column widths for new data. Note: you would probably want to 
-		 * do a redraw after calling this function!
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAdjustColumnSizing ( oSettings )
-		{
-			/* Not interested in doing column width calculation if autowidth is disabled */
-			if ( oSettings.oFeatures.bAutoWidth === false )
-			{
-				return false;
-			}
-			
-			_fnCalculateColumnWidths( oSettings );
-			for ( var i=0 , iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oSettings.aoColumns[i].nTh.style.width = oSettings.aoColumns[i].sWidth;
-			}
-		}
-		
-		
-		/**
-		 * Covert the index of a visible column to the index in the data array (take account
-		 * of hidden columns)
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iMatch Visible column index to lookup
-		 *  @returns {int} i the data index
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnVisibleToColumnIndex( oSettings, iMatch )
-		{
-			var iColumn = -1;
-			
-			for ( var i=0 ; i<oSettings.aoColumns.length ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible === true )
-				{
-					iColumn++;
-				}
-				
-				if ( iColumn == iMatch )
-				{
-					return i;
-				}
-			}
-			
-			return null;
-		}
-		
-		
-		/**
-		 * Covert the index of an index in the data array and convert it to the visible
-		 *   column index (take account of hidden columns)
-		 *  @param {int} iMatch Column index to lookup
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {int} i the data index
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnColumnIndexToVisible( oSettings, iMatch )
-		{
-			var iVisible = -1;
-			for ( var i=0 ; i<oSettings.aoColumns.length ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible === true )
-				{
-					iVisible++;
-				}
-				
-				if ( i == iMatch )
-				{
-					return oSettings.aoColumns[i].bVisible === true ? iVisible : null;
-				}
-			}
-			
-			return null;
-		}
-		
-		
-		/**
-		 * Get the number of visible columns
-		 *  @returns {int} i the number of visible columns
-		 *  @param {object} oS dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnVisbleColumns( oS )
-		{
-			var iVis = 0;
-			for ( var i=0 ; i<oS.aoColumns.length ; i++ )
-			{
-				if ( oS.aoColumns[i].bVisible === true )
-				{
-					iVis++;
-				}
-			}
-			return iVis;
-		}
-		
-		
-		/**
-		 * Get the sort type based on an input string
-		 *  @param {string} sData data we wish to know the type of
-		 *  @returns {string} type (defaults to 'string' if no type can be detected)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDetectType( sData )
-		{
-			var aTypes = DataTable.ext.aTypes;
-			var iLen = aTypes.length;
-			
-			for ( var i=0 ; i<iLen ; i++ )
-			{
-				var sType = aTypes[i]( sData );
-				if ( sType !== null )
-				{
-					return sType;
-				}
-			}
-			
-			return 'string';
-		}
-		
-		
-		/**
-		 * Figure out how to reorder a display list
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns array {int} aiReturn index list for reordering
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnReOrderIndex ( oSettings, sColumns )
-		{
-			var aColumns = sColumns.split(',');
-			var aiReturn = [];
-			
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				for ( var j=0 ; j<iLen ; j++ )
-				{
-					if ( oSettings.aoColumns[i].sName == aColumns[j] )
-					{
-						aiReturn.push( j );
-						break;
-					}
-				}
-			}
-			
-			return aiReturn;
-		}
-		
-		
-		/**
-		 * Get the column ordering that DataTables expects
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {string} comma separated list of names
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnColumnOrdering ( oSettings )
-		{
-			var sNames = '';
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				sNames += oSettings.aoColumns[i].sName+',';
-			}
-			if ( sNames.length == iLen )
-			{
-				return "";
-			}
-			return sNames.slice(0, -1);
-		}
-		
-		
-		/**
-		 * Take the column definitions and static columns arrays and calculate how
-		 * they relate to column indexes. The callback function will then apply the
-		 * definition found for a column to a suitable configuration object.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {array} aoColDefs The aoColumnDefs array that is to be applied
-		 *  @param {array} aoCols The aoColumns array that defines columns individually
-		 *  @param {function} fn Callback function - takes two parameters, the calculated
-		 *    column index and the definition for that column.
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
-		{
-			var i, iLen, j, jLen, k, kLen;
-		
-			// Column definitions with aTargets
-			if ( aoColDefs )
-			{
-				/* Loop over the definitions array - loop in reverse so first instance has priority */
-				for ( i=aoColDefs.length-1 ; i>=0 ; i-- )
-				{
-					/* Each definition can target multiple columns, as it is an array */
-					var aTargets = aoColDefs[i].aTargets;
-					if ( !$.isArray( aTargets ) )
-					{
-						_fnLog( oSettings, 1, 'aTargets must be an array of targets, not a '+(typeof aTargets) );
-					}
-		
-					for ( j=0, jLen=aTargets.length ; j<jLen ; j++ )
-					{
-						if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )
-						{
-							/* Add columns that we don't yet know about */
-							while( oSettings.aoColumns.length <= aTargets[j] )
-							{
-								_fnAddColumn( oSettings );
-							}
-		
-							/* Integer, basic index */
-							fn( aTargets[j], aoColDefs[i] );
-						}
-						else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )
-						{
-							/* Negative integer, right to left column counting */
-							fn( oSettings.aoColumns.length+aTargets[j], aoColDefs[i] );
-						}
-						else if ( typeof aTargets[j] === 'string' )
-						{
-							/* Class name matching on TH element */
-							for ( k=0, kLen=oSettings.aoColumns.length ; k<kLen ; k++ )
-							{
-								if ( aTargets[j] == "_all" ||
-								     $(oSettings.aoColumns[k].nTh).hasClass( aTargets[j] ) )
-								{
-									fn( k, aoColDefs[i] );
-								}
-							}
-						}
-					}
-				}
-			}
-		
-			// Statically defined columns array
-			if ( aoCols )
-			{
-				for ( i=0, iLen=aoCols.length ; i<iLen ; i++ )
-				{
-					fn( i, aoCols[i] );
-				}
-			}
-		}
-		
-		
-		
-		/**
-		 * Add a data array to the table, creating DOM node etc. This is the parallel to 
-		 * _fnGatherData, but for adding rows from a Javascript source, rather than a
-		 * DOM source.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {array} aData data array to be added
-		 *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAddData ( oSettings, aDataSupplied )
-		{
-			var oCol;
-			
-			/* Take an independent copy of the data source so we can bash it about as we wish */
-			var aDataIn = ($.isArray(aDataSupplied)) ?
-				aDataSupplied.slice() :
-				$.extend( true, {}, aDataSupplied );
-			
-			/* Create the object for storing information about this new row */
-			var iRow = oSettings.aoData.length;
-			var oData = $.extend( true, {}, DataTable.models.oRow );
-			oData._aData = aDataIn;
-			oSettings.aoData.push( oData );
-		
-			/* Create the cells */
-			var nTd, sThisType;
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oCol = oSettings.aoColumns[i];
-		
-				/* Use rendered data for filtering/sorting */
-				if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mDataProp !== null )
-				{
-					_fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) );
-				}
-				else
-				{
-					_fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );
-				}
-				
-				/* See if we should auto-detect the column type */
-				if ( oCol._bAutoType && oCol.sType != 'string' )
-				{
-					/* Attempt to auto detect the type - same as _fnGatherData() */
-					var sVarType = _fnGetCellData( oSettings, iRow, i, 'type' );
-					if ( sVarType !== null && sVarType !== '' )
-					{
-						sThisType = _fnDetectType( sVarType );
-						if ( oCol.sType === null )
-						{
-							oCol.sType = sThisType;
-						}
-						else if ( oCol.sType != sThisType && oCol.sType != "html" )
-						{
-							/* String is always the 'fallback' option */
-							oCol.sType = 'string';
-						}
-					}
-				}
-			}
-			
-			/* Add to the display array */
-			oSettings.aiDisplayMaster.push( iRow );
-		
-			/* Create the DOM imformation */
-			if ( !oSettings.oFeatures.bDeferRender )
-			{
-				_fnCreateTr( oSettings, iRow );
-			}
-		
-			return iRow;
-		}
-		
-		
-		/**
-		 * Read in the data from the target table from the DOM
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGatherData( oSettings )
-		{
-			var iLoop, i, iLen, j, jLen, jInner,
-			 	nTds, nTrs, nTd, aLocalData, iThisIndex,
-				iRow, iRows, iColumn, iColumns, sNodeName,
-				oCol, oData;
-			
-			/*
-			 * Process by row first
-			 * Add the data object for the whole table - storing the tr node. Note - no point in getting
-			 * DOM based data if we are going to go and replace it with Ajax source data.
-			 */
-			if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null )
-			{
-				nTrs = oSettings.nTBody.childNodes;
-				for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-				{
-					if ( nTrs[i].nodeName.toUpperCase() == "TR" )
-					{
-						iThisIndex = oSettings.aoData.length;
-						nTrs[i]._DT_RowIndex = iThisIndex;
-						oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, {
-							"nTr": nTrs[i]
-						} ) );
-						
-						oSettings.aiDisplayMaster.push( iThisIndex );
-						nTds = nTrs[i].childNodes;
-						jInner = 0;
-						
-						for ( j=0, jLen=nTds.length ; j<jLen ; j++ )
-						{
-							sNodeName = nTds[j].nodeName.toUpperCase();
-							if ( sNodeName == "TD" || sNodeName == "TH" )
-							{
-								_fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTds[j].innerHTML) );
-								jInner++;
-							}
-						}
-					}
-				}
-			}
-			
-			/* Gather in the TD elements of the Table - note that this is basically the same as
-			 * fnGetTdNodes, but that function takes account of hidden columns, which we haven't yet
-			 * setup!
-			 */
-			nTrs = _fnGetTrNodes( oSettings );
-			nTds = [];
-			for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-			{
-				for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ )
-				{
-					nTd = nTrs[i].childNodes[j];
-					sNodeName = nTd.nodeName.toUpperCase();
-					if ( sNodeName == "TD" || sNodeName == "TH" )
-					{
-						nTds.push( nTd );
-					}
-				}
-			}
-			
-			/* Now process by column */
-			for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ )
-			{
-				oCol = oSettings.aoColumns[iColumn];
-		
-				/* Get the title of the column - unless there is a user set one */
-				if ( oCol.sTitle === null )
-				{
-					oCol.sTitle = oCol.nTh.innerHTML;
-				}
-				
-				var
-					bAutoType = oCol._bAutoType,
-					bRender = typeof oCol.fnRender === 'function',
-					bClass = oCol.sClass !== null,
-					bVisible = oCol.bVisible,
-					nCell, sThisType, sRendered, sValType;
-				
-				/* A single loop to rule them all (and be more efficient) */
-				if ( bAutoType || bRender || bClass || !bVisible )
-				{
-					for ( iRow=0, iRows=oSettings.aoData.length ; iRow<iRows ; iRow++ )
-					{
-						oData = oSettings.aoData[iRow];
-						nCell = nTds[ (iRow*iColumns) + iColumn ];
-						
-						/* Type detection */
-						if ( bAutoType && oCol.sType != 'string' )
-						{
-							sValType = _fnGetCellData( oSettings, iRow, iColumn, 'type' );
-							if ( sValType !== '' )
-							{
-								sThisType = _fnDetectType( sValType );
-								if ( oCol.sType === null )
-								{
-									oCol.sType = sThisType;
-								}
-								else if ( oCol.sType != sThisType && 
-								          oCol.sType != "html" )
-								{
-									/* String is always the 'fallback' option */
-									oCol.sType = 'string';
-								}
-							}
-						}
-		
-						if ( typeof oCol.mDataProp === 'function' )
-						{
-							nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
-						}
-						
-						/* Rendering */
-						if ( bRender )
-						{
-							sRendered = _fnRender( oSettings, iRow, iColumn );
-							nCell.innerHTML = sRendered;
-							if ( oCol.bUseRendered )
-							{
-								/* Use the rendered data for filtering/sorting */
-								_fnSetCellData( oSettings, iRow, iColumn, sRendered );
-							}
-						}
-						
-						/* Classes */
-						if ( bClass )
-						{
-							nCell.className += ' '+oCol.sClass;
-						}
-						
-						/* Column visability */
-						if ( !bVisible )
-						{
-							oData._anHidden[iColumn] = nCell;
-							nCell.parentNode.removeChild( nCell );
-						}
-						else
-						{
-							oData._anHidden[iColumn] = null;
-						}
-		
-						if ( oCol.fnCreatedCell )
-						{
-							oCol.fnCreatedCell.call( oSettings.oInstance,
-								nCell, _fnGetCellData( oSettings, iRow, iColumn, 'display' ), oData._aData, iRow, iColumn
-							);
-						}
-					}
-				}
-			}
-		
-			/* Row created callbacks */
-			if ( oSettings.aoRowCreatedCallback.length !== 0 )
-			{
-				for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
-				{
-					oData = oSettings.aoData[i];
-					_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, i] );
-				}
-			}
-		}
-		
-		
-		/**
-		 * Take a TR element and convert it to an index in aoData
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} n the TR element to find
-		 *  @returns {int} index if the node is found, null if not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnNodeToDataIndex( oSettings, n )
-		{
-			return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;
-		}
-		
-		
-		/**
-		 * Take a TD element and convert it into a column data index (not the visible index)
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow The row number the TD/TH can be found in
-		 *  @param {node} n The TD/TH element to find
-		 *  @returns {int} index if the node is found, -1 if not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnNodeToColumnIndex( oSettings, iRow, n )
-		{
-			var anCells = _fnGetTdNodes( oSettings, iRow );
-		
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				if ( anCells[i] === n )
-				{
-					return i;
-				}
-			}
-			return -1;
-		}
-		
-		
-		/**
-		 * Get an array of data for a given row from the internal data cache
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData row id
-		 *  @param {string} sSpecific data get type ('type' 'filter' 'sort')
-		 *  @returns {array} Data array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetRowData( oSettings, iRow, sSpecific )
-		{
-			var out = [];
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				out.push( _fnGetCellData( oSettings, iRow, i, sSpecific ) );
-			}
-			return out;
-		}
-		
-		
-		/**
-		 * Get the data for a given cell from the internal cache, taking into account data mapping
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData row id
-		 *  @param {int} iCol Column index
-		 *  @param {string} sSpecific data get type ('display', 'type' 'filter' 'sort')
-		 *  @returns {*} Cell data
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetCellData( oSettings, iRow, iCol, sSpecific )
-		{
-			var sData;
-			var oCol = oSettings.aoColumns[iCol];
-			var oData = oSettings.aoData[iRow]._aData;
-		
-			if ( (sData=oCol.fnGetData( oData, sSpecific )) === undefined )
-			{
-				if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null )
-				{
-					_fnLog( oSettings, 0, "Requested unknown parameter "+
-						(typeof oCol.mDataProp=='function' ? '{mDataprop function}' : "'"+oCol.mDataProp+"'")+
-						" from the data source for row "+iRow );
-					oSettings.iDrawError = oSettings.iDraw;
-				}
-				return oCol.sDefaultContent;
-			}
-		
-			/* When the data source is null, we can use default column data */
-			if ( sData === null && oCol.sDefaultContent !== null )
-			{
-				sData = oCol.sDefaultContent;
-			}
-			else if ( typeof sData === 'function' )
-			{
-				/* If the data source is a function, then we run it and use the return */
-				return sData();
-			}
-		
-			if ( sSpecific == 'display' && sData === null )
-			{
-				return '';
-			}
-			return sData;
-		}
-		
-		
-		/**
-		 * Set the value for a specific cell, into the internal data cache
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData row id
-		 *  @param {int} iCol Column index
-		 *  @param {*} val Value to set
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSetCellData( oSettings, iRow, iCol, val )
-		{
-			var oCol = oSettings.aoColumns[iCol];
-			var oData = oSettings.aoData[iRow]._aData;
-		
-			oCol.fnSetData( oData, val );
-		}
-		
-		
-		/**
-		 * Return a function that can be used to get data from a source object, taking
-		 * into account the ability to use nested objects as a source
-		 *  @param {string|int|function} mSource The data source for the object
-		 *  @returns {function} Data get function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetObjectDataFn( mSource )
-		{
-			if ( mSource === null )
-			{
-				/* Give an empty string for rendering / sorting etc */
-				return function (data, type) {
-					return null;
-				};
-			}
-			else if ( typeof mSource === 'function' )
-			{
-				return function (data, type) {
-					return mSource( data, type );
-				};
-			}
-			else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 )
-			{
-				/* If there is a . in the source string then the data source is in a 
-				 * nested object so we loop over the data for each level to get the next
-				 * level down. On each loop we test for undefined, and if found immediatly
-				 * return. This allows entire objects to be missing and sDefaultContent to
-				 * be used if defined, rather than throwing an error
-				 */
-				var a = mSource.split('.');
-				return function (data, type) {
-					for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-					{
-						data = data[ a[i] ];
-						if ( data === undefined )
-						{
-							return undefined;
-						}
-					}
-					return data;
-				};
-			}
-			else
-			{
-				/* Array or flat object mapping */
-				return function (data, type) {
-					return data[mSource];	
-				};
-			}
-		}
-		
-		
-		/**
-		 * Return a function that can be used to set data from a source object, taking
-		 * into account the ability to use nested objects as a source
-		 *  @param {string|int|function} mSource The data source for the object
-		 *  @returns {function} Data set function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSetObjectDataFn( mSource )
-		{
-			if ( mSource === null )
-			{
-				/* Nothing to do when the data source is null */
-				return function (data, val) {};
-			}
-			else if ( typeof mSource === 'function' )
-			{
-				return function (data, val) {
-					mSource( data, 'set', val );
-				};
-			}
-			else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 )
-			{
-				/* Like the get, we need to get data from a nested object.  */
-				var a = mSource.split('.');
-				return function (data, val) {
-					for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
-					{
-						// If the nested object doesn't currently exist - since we are
-						// trying to set the value - create it
-						if ( data[ a[i] ] === undefined )
-						{
-							data[ a[i] ] = {};
-						}
-						data = data[ a[i] ];
-					}
-					data[ a[a.length-1] ] = val;
-				};
-			}
-			else
-			{
-				/* Array or flat object mapping */
-				return function (data, val) {
-					data[mSource] = val;	
-				};
-			}
-		}
-		
-		
-		/**
-		 * Return an array with the full table data
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns array {array} aData Master data array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetDataMaster ( oSettings )
-		{
-			var aData = [];
-			var iLen = oSettings.aoData.length;
-			for ( var i=0 ; i<iLen; i++ )
-			{
-				aData.push( oSettings.aoData[i]._aData );
-			}
-			return aData;
-		}
-		
-		
-		/**
-		 * Nuke the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnClearTable( oSettings )
-		{
-			oSettings.aoData.splice( 0, oSettings.aoData.length );
-			oSettings.aiDisplayMaster.splice( 0, oSettings.aiDisplayMaster.length );
-			oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length );
-			_fnCalculateEnd( oSettings );
-		}
-		
-		
-		 /**
-		 * Take an array of integers (index array) and remove a target integer (value - not 
-		 * the key!)
-		 *  @param {array} a Index array to target
-		 *  @param {int} iTarget value to find
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDeleteIndex( a, iTarget )
-		{
-			var iTargetIndex = -1;
-			
-			for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-			{
-				if ( a[i] == iTarget )
-				{
-					iTargetIndex = i;
-				}
-				else if ( a[i] > iTarget )
-				{
-					a[i]--;
-				}
-			}
-			
-			if ( iTargetIndex != -1 )
-			{
-				a.splice( iTargetIndex, 1 );
-			}
-		}
-		
-		
-		 /**
-		 * Call the developer defined fnRender function for a given cell (row/column) with
-		 * the required parameters and return the result.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData index for the row
-		 *  @param {int} iCol aoColumns index for the column
-		 *  @returns {*} Return of the developer's fnRender function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnRender( oSettings, iRow, iCol )
-		{
-			var oCol = oSettings.aoColumns[iCol];
-		
-			return oCol.fnRender( {
-				"iDataRow":    iRow,
-				"iDataColumn": iCol,
-				"oSettings":   oSettings,
-				"aData":       oSettings.aoData[iRow]._aData,
-				"mDataProp":   oCol.mDataProp
-			}, _fnGetCellData(oSettings, iRow, iCol, 'display') );
-		}
-		
-		/**
-		 * Create a new TR element (and it's TD children) for a row
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow Row to consider
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCreateTr ( oSettings, iRow )
-		{
-			var oData = oSettings.aoData[iRow];
-			var nTd;
-		
-			if ( oData.nTr === null )
-			{
-				oData.nTr = document.createElement('tr');
-		
-				/* Use a private property on the node to allow reserve mapping from the node
-				 * to the aoData array for fast look up
-				 */
-				oData.nTr._DT_RowIndex = iRow;
-		
-				/* Special parameters can be given by the data source to be used on the row */
-				if ( oData._aData.DT_RowId )
-				{
-					oData.nTr.id = oData._aData.DT_RowId;
-				}
-		
-				if ( oData._aData.DT_RowClass )
-				{
-					$(oData.nTr).addClass( oData._aData.DT_RowClass );
-				}
-		
-				/* Process each column */
-				for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					var oCol = oSettings.aoColumns[i];
-					nTd = document.createElement( oCol.sCellType );
-		
-					/* Render if needed - if bUseRendered is true then we already have the rendered
-					 * value in the data source - so can just use that
-					 */
-					nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mDataProp === null)) ?
-						_fnRender( oSettings, iRow, i ) :
-						_fnGetCellData( oSettings, iRow, i, 'display' );
-				
-					/* Add user defined class */
-					if ( oCol.sClass !== null )
-					{
-						nTd.className = oCol.sClass;
-					}
-					
-					if ( oCol.bVisible )
-					{
-						oData.nTr.appendChild( nTd );
-						oData._anHidden[i] = null;
-					}
-					else
-					{
-						oData._anHidden[i] = nTd;
-					}
-		
-					if ( oCol.fnCreatedCell )
-					{
-						oCol.fnCreatedCell.call( oSettings.oInstance,
-							nTd, _fnGetCellData( oSettings, iRow, i, 'display' ), oData._aData, iRow, i
-						);
-					}
-				}
-		
-				_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, iRow] );
-			}
-		}
-		
-		
-		/**
-		 * Create the HTML header for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBuildHead( oSettings )
-		{
-			var i, nTh, iLen, j, jLen;
-			var iThs = oSettings.nTHead.getElementsByTagName('th').length;
-			var iCorrector = 0;
-			var jqChildren;
-			
-			/* If there is a header in place - then use it - otherwise it's going to get nuked... */
-			if ( iThs !== 0 )
-			{
-				/* We've got a thead from the DOM, so remove hidden columns and apply width to vis cols */
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					nTh = oSettings.aoColumns[i].nTh;
-					nTh.setAttribute('role', 'columnheader');
-					if ( oSettings.aoColumns[i].bSortable )
-					{
-						nTh.setAttribute('tabindex', oSettings.iTabIndex);
-						nTh.setAttribute('aria-controls', oSettings.sTableId);
-					}
-		
-					if ( oSettings.aoColumns[i].sClass !== null )
-					{
-						$(nTh).addClass( oSettings.aoColumns[i].sClass );
-					}
-					
-					/* Set the title of the column if it is user defined (not what was auto detected) */
-					if ( oSettings.aoColumns[i].sTitle != nTh.innerHTML )
-					{
-						nTh.innerHTML = oSettings.aoColumns[i].sTitle;
-					}
-				}
-			}
-			else
-			{
-				/* We don't have a header in the DOM - so we are going to have to create one */
-				var nTr = document.createElement( "tr" );
-				
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					nTh = oSettings.aoColumns[i].nTh;
-					nTh.innerHTML = oSettings.aoColumns[i].sTitle;
-					nTh.setAttribute('tabindex', '0');
-					
-					if ( oSettings.aoColumns[i].sClass !== null )
-					{
-						$(nTh).addClass( oSettings.aoColumns[i].sClass );
-					}
-					
-					nTr.appendChild( nTh );
-				}
-				$(oSettings.nTHead).html( '' )[0].appendChild( nTr );
-				_fnDetectHeader( oSettings.aoHeader, oSettings.nTHead );
-			}
-			
-			/* ARIA role for the rows */	
-			$(oSettings.nTHead).children('tr').attr('role', 'row');
-			
-			/* Add the extra markup needed by jQuery UI's themes */
-			if ( oSettings.bJUI )
-			{
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					nTh = oSettings.aoColumns[i].nTh;
-					
-					var nDiv = document.createElement('div');
-					nDiv.className = oSettings.oClasses.sSortJUIWrapper;
-					$(nTh).contents().appendTo(nDiv);
-					
-					var nSpan = document.createElement('span');
-					nSpan.className = oSettings.oClasses.sSortIcon;
-					nDiv.appendChild( nSpan );
-					nTh.appendChild( nDiv );
-				}
-			}
-			
-			if ( oSettings.oFeatures.bSort )
-			{
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					if ( oSettings.aoColumns[i].bSortable !== false )
-					{
-						_fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );
-					}
-					else
-					{
-						$(oSettings.aoColumns[i].nTh).addClass( oSettings.oClasses.sSortableNone );
-					}
-				}
-			}
-			
-			/* Deal with the footer - add classes if required */
-			if ( oSettings.oClasses.sFooterTH !== "" )
-			{
-				$(oSettings.nTFoot).children('tr').children('th').addClass( oSettings.oClasses.sFooterTH );
-			}
-			
-			/* Cache the footer elements */
-			if ( oSettings.nTFoot !== null )
-			{
-				var anCells = _fnGetUniqueThs( oSettings, null, oSettings.aoFooter );
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					if ( anCells[i] )
-					{
-						oSettings.aoColumns[i].nTf = anCells[i];
-						if ( oSettings.aoColumns[i].sClass )
-						{
-							$(anCells[i]).addClass( oSettings.aoColumns[i].sClass );
-						}
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Draw the header (or footer) element based on the column visibility states. The
-		 * methodology here is to use the layout array from _fnDetectHeader, modified for
-		 * the instantaneous column visibility, to construct the new layout. The grid is
-		 * traversed over cell at a time in a rows x columns grid fashion, although each 
-		 * cell insert can cover multiple elements in the grid - which is tracks using the
-		 * aApplied array. Cell inserts in the grid will only occur where there isn't
-		 * already a cell in that position.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param array {objects} aoSource Layout array from _fnDetectHeader
-		 *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc, 
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
-		{
-			var i, iLen, j, jLen, k, kLen, n, nLocalTr;
-			var aoLocal = [];
-			var aApplied = [];
-			var iColumns = oSettings.aoColumns.length;
-			var iRowspan, iColspan;
-		
-			if (  bIncludeHidden === undefined )
-			{
-				bIncludeHidden = false;
-			}
-		
-			/* Make a copy of the master layout array, but without the visible columns in it */
-			for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
-			{
-				aoLocal[i] = aoSource[i].slice();
-				aoLocal[i].nTr = aoSource[i].nTr;
-		
-				/* Remove any columns which are currently hidden */
-				for ( j=iColumns-1 ; j>=0 ; j-- )
-				{
-					if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )
-					{
-						aoLocal[i].splice( j, 1 );
-					}
-				}
-		
-				/* Prep the applied array - it needs an element for each row */
-				aApplied.push( [] );
-			}
-		
-			for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
-			{
-				nLocalTr = aoLocal[i].nTr;
-				
-				/* All cells are going to be replaced, so empty out the row */
-				if ( nLocalTr )
-				{
-					while( (n = nLocalTr.firstChild) )
-					{
-						nLocalTr.removeChild( n );
-					}
-				}
-		
-				for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
-				{
-					iRowspan = 1;
-					iColspan = 1;
-		
-					/* Check to see if there is already a cell (row/colspan) covering our target
-					 * insert point. If there is, then there is nothing to do.
-					 */
-					if ( aApplied[i][j] === undefined )
-					{
-						nLocalTr.appendChild( aoLocal[i][j].cell );
-						aApplied[i][j] = 1;
-		
-						/* Expand the cell to cover as many rows as needed */
-						while ( aoLocal[i+iRowspan] !== undefined &&
-						        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )
-						{
-							aApplied[i+iRowspan][j] = 1;
-							iRowspan++;
-						}
-		
-						/* Expand the cell to cover as many columns as needed */
-						while ( aoLocal[i][j+iColspan] !== undefined &&
-						        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )
-						{
-							/* Must update the applied array over the rows for the columns */
-							for ( k=0 ; k<iRowspan ; k++ )
-							{
-								aApplied[i+k][j+iColspan] = 1;
-							}
-							iColspan++;
-						}
-		
-						/* Do the actual expansion in the DOM */
-						aoLocal[i][j].cell.rowSpan = iRowspan;
-						aoLocal[i][j].cell.colSpan = iColspan;
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Insert the required TR nodes into the table for display
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDraw( oSettings )
-		{
-			/* Provide a pre-callback function which can be used to cancel the draw is false is returned */
-			var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
-			if ( $.inArray( false, aPreDraw ) !== -1 )
-			{
-				_fnProcessingDisplay( oSettings, false );
-				return;
-			}
-			
-			var i, iLen, n;
-			var anRows = [];
-			var iRowCount = 0;
-			var iStripes = oSettings.asStripeClasses.length;
-			var iOpenRows = oSettings.aoOpenRows.length;
-			
-			oSettings.bDrawing = true;
-			
-			/* Check and see if we have an initial draw position from state saving */
-			if ( oSettings.iInitDisplayStart !== undefined && oSettings.iInitDisplayStart != -1 )
-			{
-				if ( oSettings.oFeatures.bServerSide )
-				{
-					oSettings._iDisplayStart = oSettings.iInitDisplayStart;
-				}
-				else
-				{
-					oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ?
-						0 : oSettings.iInitDisplayStart;
-				}
-				oSettings.iInitDisplayStart = -1;
-				_fnCalculateEnd( oSettings );
-			}
-			
-			/* Server-side processing draw intercept */
-			if ( oSettings.bDeferLoading )
-			{
-				oSettings.bDeferLoading = false;
-				oSettings.iDraw++;
-			}
-			else if ( !oSettings.oFeatures.bServerSide )
-			{
-				oSettings.iDraw++;
-			}
-			else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )
-			{
-				return;
-			}
-			
-			if ( oSettings.aiDisplay.length !== 0 )
-			{
-				var iStart = oSettings._iDisplayStart;
-				var iEnd = oSettings._iDisplayEnd;
-				
-				if ( oSettings.oFeatures.bServerSide )
-				{
-					iStart = 0;
-					iEnd = oSettings.aoData.length;
-				}
-				
-				for ( var j=iStart ; j<iEnd ; j++ )
-				{
-					var aoData = oSettings.aoData[ oSettings.aiDisplay[j] ];
-					if ( aoData.nTr === null )
-					{
-						_fnCreateTr( oSettings, oSettings.aiDisplay[j] );
-					}
-		
-					var nRow = aoData.nTr;
-					
-					/* Remove the old striping classes and then add the new one */
-					if ( iStripes !== 0 )
-					{
-						var sStripe = oSettings.asStripeClasses[ iRowCount % iStripes ];
-						if ( aoData._sRowStripe != sStripe )
-						{
-							$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );
-							aoData._sRowStripe = sStripe;
-						}
-					}
-					
-					/* Row callback functions - might want to manipule the row */
-					_fnCallbackFire( oSettings, 'aoRowCallback', null, 
-						[nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] );
-					
-					anRows.push( nRow );
-					iRowCount++;
-					
-					/* If there is an open row - and it is attached to this parent - attach it on redraw */
-					if ( iOpenRows !== 0 )
-					{
-						for ( var k=0 ; k<iOpenRows ; k++ )
-						{
-							if ( nRow == oSettings.aoOpenRows[k].nParent )
-							{
-								anRows.push( oSettings.aoOpenRows[k].nTr );
-								break;
-							}
-						}
-					}
-				}
-			}
-			else
-			{
-				/* Table is empty - create a row with an empty message in it */
-				anRows[ 0 ] = document.createElement( 'tr' );
-				
-				if ( oSettings.asStripeClasses[0] )
-				{
-					anRows[ 0 ].className = oSettings.asStripeClasses[0];
-				}
-		
-				var oLang = oSettings.oLanguage;
-				var sZero = oLang.sZeroRecords;
-				if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
-				{
-					sZero = oLang.sLoadingRecords;
-				}
-				else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )
-				{
-					sZero = oLang.sEmptyTable;
-				}
-		
-				var nTd = document.createElement( 'td' );
-				nTd.setAttribute( 'valign', "top" );
-				nTd.colSpan = _fnVisbleColumns( oSettings );
-				nTd.className = oSettings.oClasses.sRowEmpty;
-				nTd.innerHTML = _fnInfoMacros( oSettings, sZero );
-				
-				anRows[ iRowCount ].appendChild( nTd );
-			}
-			
-			/* Header and footer callbacks */
-			_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0], 
-				_fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] );
-			
-			_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0], 
-				_fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] );
-			
-			/* 
-			 * Need to remove any old row from the display - note we can't just empty the tbody using
-			 * $().html('') since this will unbind the jQuery event handlers (even although the node 
-			 * still exists!) - equally we can't use innerHTML, since IE throws an exception.
-			 */
-			var
-				nAddFrag = document.createDocumentFragment(),
-				nRemoveFrag = document.createDocumentFragment(),
-				nBodyPar, nTrs;
-			
-			if ( oSettings.nTBody )
-			{
-				nBodyPar = oSettings.nTBody.parentNode;
-				nRemoveFrag.appendChild( oSettings.nTBody );
-				
-				/* When doing infinite scrolling, only remove child rows when sorting, filtering or start
-				 * up. When not infinite scroll, always do it.
-				 */
-				if ( !oSettings.oScroll.bInfinite || !oSettings._bInitComplete ||
-				 	oSettings.bSorted || oSettings.bFiltered )
-				{
-					while( (n = oSettings.nTBody.firstChild) )
-					{
-						oSettings.nTBody.removeChild( n );
-					}
-				}
-				
-				/* Put the draw table into the dom */
-				for ( i=0, iLen=anRows.length ; i<iLen ; i++ )
-				{
-					nAddFrag.appendChild( anRows[i] );
-				}
-				
-				oSettings.nTBody.appendChild( nAddFrag );
-				if ( nBodyPar !== null )
-				{
-					nBodyPar.appendChild( oSettings.nTBody );
-				}
-			}
-			
-			/* Call all required callback functions for the end of a draw */
-			_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );
-			
-			/* Draw is complete, sorting and filtering must be as well */
-			oSettings.bSorted = false;
-			oSettings.bFiltered = false;
-			oSettings.bDrawing = false;
-			
-			if ( oSettings.oFeatures.bServerSide )
-			{
-				_fnProcessingDisplay( oSettings, false );
-				if ( !oSettings._bInitComplete )
-				{
-					_fnInitComplete( oSettings );
-				}
-			}
-		}
-		
-		
-		/**
-		 * Redraw the table - taking account of the various features which are enabled
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnReDraw( oSettings )
-		{
-			if ( oSettings.oFeatures.bSort )
-			{
-				/* Sorting will refilter and draw for us */
-				_fnSort( oSettings, oSettings.oPreviousSearch );
-			}
-			else if ( oSettings.oFeatures.bFilter )
-			{
-				/* Filtering will redraw for us */
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch );
-			}
-			else
-			{
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-		}
-		
-		
-		/**
-		 * Add the options to the page HTML for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAddOptionsHtml ( oSettings )
-		{
-			/*
-			 * Create a temporary, empty, div which we can later on replace with what we have generated
-			 * we do it this way to rendering the 'options' html offline - speed :-)
-			 */
-			var nHolding = $('<div></div>')[0];
-			oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable );
-			
-			/* 
-			 * All DataTables are wrapped in a div
-			 */
-			oSettings.nTableWrapper = $('<div id="'+oSettings.sTableId+'_wrapper" class="'+oSettings.oClasses.sWrapper+'" role="grid"></div>')[0];
-			oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
-		
-			/* Track where we want to insert the option */
-			var nInsertNode = oSettings.nTableWrapper;
-			
-			/* Loop over the user set positioning and place the elements as needed */
-			var aDom = oSettings.sDom.split('');
-			var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j;
-			for ( var i=0 ; i<aDom.length ; i++ )
-			{
-				iPushFeature = 0;
-				cOption = aDom[i];
-				
-				if ( cOption == '<' )
-				{
-					/* New container div */
-					nNewNode = $('<div></div>')[0];
-					
-					/* Check to see if we should append an id and/or a class name to the container */
-					cNext = aDom[i+1];
-					if ( cNext == "'" || cNext == '"' )
-					{
-						sAttr = "";
-						j = 2;
-						while ( aDom[i+j] != cNext )
-						{
-							sAttr += aDom[i+j];
-							j++;
-						}
-						
-						/* Replace jQuery UI constants */
-						if ( sAttr == "H" )
-						{
-							sAttr = oSettings.oClasses.sJUIHeader;
-						}
-						else if ( sAttr == "F" )
-						{
-							sAttr = oSettings.oClasses.sJUIFooter;
-						}
-						
-						/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
-						 * breaks the string into parts and applies them as needed
-						 */
-						if ( sAttr.indexOf('.') != -1 )
-						{
-							var aSplit = sAttr.split('.');
-							nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
-							nNewNode.className = aSplit[1];
-						}
-						else if ( sAttr.charAt(0) == "#" )
-						{
-							nNewNode.id = sAttr.substr(1, sAttr.length-1);
-						}
-						else
-						{
-							nNewNode.className = sAttr;
-						}
-						
-						i += j; /* Move along the position array */
-					}
-					
-					nInsertNode.appendChild( nNewNode );
-					nInsertNode = nNewNode;
-				}
-				else if ( cOption == '>' )
-				{
-					/* End container div */
-					nInsertNode = nInsertNode.parentNode;
-				}
-				else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange )
-				{
-					/* Length */
-					nTmp = _fnFeatureHtmlLength( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 'f' && oSettings.oFeatures.bFilter )
-				{
-					/* Filter */
-					nTmp = _fnFeatureHtmlFilter( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 'r' && oSettings.oFeatures.bProcessing )
-				{
-					/* pRocessing */
-					nTmp = _fnFeatureHtmlProcessing( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 't' )
-				{
-					/* Table */
-					nTmp = _fnFeatureHtmlTable( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption ==  'i' && oSettings.oFeatures.bInfo )
-				{
-					/* Info */
-					nTmp = _fnFeatureHtmlInfo( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 'p' && oSettings.oFeatures.bPaginate )
-				{
-					/* Pagination */
-					nTmp = _fnFeatureHtmlPaginate( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( DataTable.ext.aoFeatures.length !== 0 )
-				{
-					/* Plug-in features */
-					var aoFeatures = DataTable.ext.aoFeatures;
-					for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
-					{
-						if ( cOption == aoFeatures[k].cFeature )
-						{
-							nTmp = aoFeatures[k].fnInit( oSettings );
-							if ( nTmp )
-							{
-								iPushFeature = 1;
-							}
-							break;
-						}
-					}
-				}
-				
-				/* Add to the 2D features array */
-				if ( iPushFeature == 1 && nTmp !== null )
-				{
-					if ( typeof oSettings.aanFeatures[cOption] !== 'object' )
-					{
-						oSettings.aanFeatures[cOption] = [];
-					}
-					oSettings.aanFeatures[cOption].push( nTmp );
-					nInsertNode.appendChild( nTmp );
-				}
-			}
-			
-			/* Built our DOM structure - replace the holding div with what we want */
-			nHolding.parentNode.replaceChild( oSettings.nTableWrapper, nHolding );
-		}
-		
-		
-		/**
-		 * Use the DOM source to create up an array of header cells. The idea here is to
-		 * create a layout grid (array) of rows x columns, which contains a reference
-		 * to the cell that that point in the grid (regardless of col/rowspan), such that
-		 * any column / row could be removed and the new grid constructed
-		 *  @param array {object} aLayout Array to store the calculated layout in
-		 *  @param {node} nThead The header/footer element for the table
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDetectHeader ( aLayout, nThead )
-		{
-			var nTrs = $(nThead).children('tr');
-			var nCell;
-			var i, j, k, l, iLen, jLen, iColShifted;
-			var fnShiftCol = function ( a, i, j ) {
-				while ( a[i][j] ) {
-					j++;
-				}
-				return j;
-			};
-		
-			aLayout.splice( 0, aLayout.length );
-			
-			/* We know how many rows there are in the layout - so prep it */
-			for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-			{
-				aLayout.push( [] );
-			}
-			
-			/* Calculate a layout array */
-			for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-			{
-				var iColumn = 0;
-				
-				/* For every cell in the row... */
-				for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ )
-				{
-					nCell = nTrs[i].childNodes[j];
-		
-					if ( nCell.nodeName.toUpperCase() == "TD" ||
-					     nCell.nodeName.toUpperCase() == "TH" )
-					{
-						/* Get the col and rowspan attributes from the DOM and sanitise them */
-						var iColspan = nCell.getAttribute('colspan') * 1;
-						var iRowspan = nCell.getAttribute('rowspan') * 1;
-						iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
-						iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
-		
-						/* There might be colspan cells already in this row, so shift our target 
-						 * accordingly
-						 */
-						iColShifted = fnShiftCol( aLayout, i, iColumn );
-						
-						/* If there is col / rowspan, copy the information into the layout grid */
-						for ( l=0 ; l<iColspan ; l++ )
-						{
-							for ( k=0 ; k<iRowspan ; k++ )
-							{
-								aLayout[i+k][iColShifted+l] = {
-									"cell": nCell,
-									"unique": iColspan == 1 ? true : false
-								};
-								aLayout[i+k].nTr = nTrs[i];
-							}
-						}
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Get an array of unique th elements, one for each column
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} nHeader automatically detect the layout from this node - optional
-		 *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
-		 *  @returns array {node} aReturn list of unique ths
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
-		{
-			var aReturn = [];
-			if ( !aLayout )
-			{
-				aLayout = oSettings.aoHeader;
-				if ( nHeader )
-				{
-					aLayout = [];
-					_fnDetectHeader( aLayout, nHeader );
-				}
-			}
-		
-			for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )
-			{
-				for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )
-				{
-					if ( aLayout[i][j].unique && 
-						 (!aReturn[j] || !oSettings.bSortCellsTop) )
-					{
-						aReturn[j] = aLayout[i][j].cell;
-					}
-				}
-			}
-			
-			return aReturn;
-		}
-		
-		
-		
-		/**
-		 * Update the table using an Ajax call
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {boolean} Block the table drawing or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAjaxUpdate( oSettings )
-		{
-			if ( oSettings.bAjaxDataGet )
-			{
-				oSettings.iDraw++;
-				_fnProcessingDisplay( oSettings, true );
-				var iColumns = oSettings.aoColumns.length;
-				var aoData = _fnAjaxParameters( oSettings );
-				_fnServerParams( oSettings, aoData );
-				
-				oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData,
-					function(json) {
-						_fnAjaxUpdateDraw( oSettings, json );
-					}, oSettings );
-				return false;
-			}
-			else
-			{
-				return true;
-			}
-		}
-		
-		
-		/**
-		 * Build up the parameters in an object needed for a server-side processing request
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {bool} block the table drawing or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAjaxParameters( oSettings )
-		{
-			var iColumns = oSettings.aoColumns.length;
-			var aoData = [], mDataProp, aaSort, aDataSort;
-			var i, j;
-			
-			aoData.push( { "name": "sEcho",          "value": oSettings.iDraw } );
-			aoData.push( { "name": "iColumns",       "value": iColumns } );
-			aoData.push( { "name": "sColumns",       "value": _fnColumnOrdering(oSettings) } );
-			aoData.push( { "name": "iDisplayStart",  "value": oSettings._iDisplayStart } );
-			aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ?
-				oSettings._iDisplayLength : -1 } );
-				
-			for ( i=0 ; i<iColumns ; i++ )
-			{
-			  mDataProp = oSettings.aoColumns[i].mDataProp;
-				aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } );
-			}
-			
-			/* Filtering */
-			if ( oSettings.oFeatures.bFilter !== false )
-			{
-				aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } );
-				aoData.push( { "name": "bRegex",  "value": oSettings.oPreviousSearch.bRegex } );
-				for ( i=0 ; i<iColumns ; i++ )
-				{
-					aoData.push( { "name": "sSearch_"+i,     "value": oSettings.aoPreSearchCols[i].sSearch } );
-					aoData.push( { "name": "bRegex_"+i,      "value": oSettings.aoPreSearchCols[i].bRegex } );
-					aoData.push( { "name": "bSearchable_"+i, "value": oSettings.aoColumns[i].bSearchable } );
-				}
-			}
-			
-			/* Sorting */
-			if ( oSettings.oFeatures.bSort !== false )
-			{
-				var iCounter = 0;
-		
-				aaSort = ( oSettings.aaSortingFixed !== null ) ?
-					oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
-					oSettings.aaSorting.slice();
-				
-				for ( i=0 ; i<aaSort.length ; i++ )
-				{
-					aDataSort = oSettings.aoColumns[ aaSort[i][0] ].aDataSort;
-					
-					for ( j=0 ; j<aDataSort.length ; j++ )
-					{
-						aoData.push( { "name": "iSortCol_"+iCounter,  "value": aDataSort[j] } );
-						aoData.push( { "name": "sSortDir_"+iCounter,  "value": aaSort[i][1] } );
-						iCounter++;
-					}
-				}
-				aoData.push( { "name": "iSortingCols",   "value": iCounter } );
-				
-				for ( i=0 ; i<iColumns ; i++ )
-				{
-					aoData.push( { "name": "bSortable_"+i,  "value": oSettings.aoColumns[i].bSortable } );
-				}
-			}
-			
-			return aoData;
-		}
-		
-		
-		/**
-		 * Add Ajax parameters from plugins
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param array {objects} aoData name/value pairs to send to the server
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnServerParams( oSettings, aoData )
-		{
-			_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [aoData] );
-		}
-		
-		
-		/**
-		 * Data the data from the server (nuking the old) and redraw the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} json json data return from the server.
-		 *  @param {string} json.sEcho Tracking flag for DataTables to match requests
-		 *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
-		 *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
-		 *  @param {array} json.aaData The data to display on this page
-		 *  @param {string} [json.sColumns] Column ordering (sName, comma separated)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAjaxUpdateDraw ( oSettings, json )
-		{
-			if ( json.sEcho !== undefined )
-			{
-				/* Protect against old returns over-writing a new one. Possible when you get
-				 * very fast interaction, and later queires are completed much faster
-				 */
-				if ( json.sEcho*1 < oSettings.iDraw )
-				{
-					return;
-				}
-				else
-				{
-					oSettings.iDraw = json.sEcho * 1;
-				}
-			}
-			
-			if ( !oSettings.oScroll.bInfinite ||
-				   (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered)) )
-			{
-				_fnClearTable( oSettings );
-			}
-			oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10);
-			oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10);
-			
-			/* Determine if reordering is required */
-			var sOrdering = _fnColumnOrdering(oSettings);
-			var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering );
-			var aiIndex;
-			if ( bReOrder )
-			{
-				aiIndex = _fnReOrderIndex( oSettings, json.sColumns );
-			}
-			
-			var aData = _fnGetObjectDataFn( oSettings.sAjaxDataProp )( json );
-			for ( var i=0, iLen=aData.length ; i<iLen ; i++ )
-			{
-				if ( bReOrder )
-				{
-					/* If we need to re-order, then create a new array with the correct order and add it */
-					var aDataSorted = [];
-					for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ )
-					{
-						aDataSorted.push( aData[i][ aiIndex[j] ] );
-					}
-					_fnAddData( oSettings, aDataSorted );
-				}
-				else
-				{
-					/* No re-order required, sever got it "right" - just straight add */
-					_fnAddData( oSettings, aData[i] );
-				}
-			}
-			oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-			oSettings.bAjaxDataGet = false;
-			_fnDraw( oSettings );
-			oSettings.bAjaxDataGet = true;
-			_fnProcessingDisplay( oSettings, false );
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for filtering text
-		 *  @returns {node} Filter control element
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlFilter ( oSettings )
-		{
-			var oPreviousSearch = oSettings.oPreviousSearch;
-			
-			var sSearchStr = oSettings.oLanguage.sSearch;
-			sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ?
-			  sSearchStr.replace('_INPUT_', '<input type="text" />') :
-			  sSearchStr==="" ? '<input type="text" />' : sSearchStr+' <input type="text" />';
-			
-			var nFilter = document.createElement( 'div' );
-			nFilter.className = oSettings.oClasses.sFilter;
-			nFilter.innerHTML = '<label>'+sSearchStr+'</label>';
-			if ( !oSettings.aanFeatures.f )
-			{
-				nFilter.id = oSettings.sTableId+'_filter';
-			}
-			
-			var jqFilter = $('input[type="text"]', nFilter);
-		
-			// Store a reference to the input element, so other input elements could be
-			// added to the filter wrapper if needed (submit button for example)
-			nFilter._DT_Input = jqFilter[0];
-		
-			jqFilter.val( oPreviousSearch.sSearch.replace('"','&quot;') );
-			jqFilter.bind( 'keyup.DT', function(e) {
-				/* Update all other filter input elements for the new display */
-				var n = oSettings.aanFeatures.f;
-				var val = this.value==="" ? "" : this.value; // mental IE8 fix :-(
-		
-				for ( var i=0, iLen=n.length ; i<iLen ; i++ )
-				{
-					if ( n[i] != $(this).parents('div.dataTables_filter')[0] )
-					{
-						$(n[i]._DT_Input).val( val );
-					}
-				}
-				
-				/* Now do the filter */
-				if ( val != oPreviousSearch.sSearch )
-				{
-					_fnFilterComplete( oSettings, { 
-						"sSearch": val, 
-						"bRegex": oPreviousSearch.bRegex,
-						"bSmart": oPreviousSearch.bSmart ,
-						"bCaseInsensitive": oPreviousSearch.bCaseInsensitive 
-					} );
-				}
-			} );
-		
-			jqFilter
-				.attr('aria-controls', oSettings.sTableId)
-				.bind( 'keypress.DT', function(e) {
-					/* Prevent form submission */
-					if ( e.keyCode == 13 )
-					{
-						return false;
-					}
-				}
-			);
-			
-			return nFilter;
-		}
-		
-		
-		/**
-		 * Filter the table using both the global filter and column based filtering
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} oSearch search information
-		 *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterComplete ( oSettings, oInput, iForce )
-		{
-			var oPrevSearch = oSettings.oPreviousSearch;
-			var aoPrevSearch = oSettings.aoPreSearchCols;
-			var fnSaveFilter = function ( oFilter ) {
-				/* Save the filtering values */
-				oPrevSearch.sSearch = oFilter.sSearch;
-				oPrevSearch.bRegex = oFilter.bRegex;
-				oPrevSearch.bSmart = oFilter.bSmart;
-				oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
-			};
-		
-			/* In server-side processing all filtering is done by the server, so no point hanging around here */
-			if ( !oSettings.oFeatures.bServerSide )
-			{
-				/* Global filter */
-				_fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive );
-				fnSaveFilter( oInput );
-		
-				/* Now do the individual column filter */
-				for ( var i=0 ; i<oSettings.aoPreSearchCols.length ; i++ )
-				{
-					_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex, 
-						aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
-				}
-				
-				/* Custom filtering */
-				_fnFilterCustom( oSettings );
-			}
-			else
-			{
-				fnSaveFilter( oInput );
-			}
-			
-			/* Tell the draw function we have been filtering */
-			oSettings.bFiltered = true;
-			$(oSettings.oInstance).trigger('filter', oSettings);
-			
-			/* Redraw the table */
-			oSettings._iDisplayStart = 0;
-			_fnCalculateEnd( oSettings );
-			_fnDraw( oSettings );
-			
-			/* Rebuild search array 'offline' */
-			_fnBuildSearchArray( oSettings, 0 );
-		}
-		
-		
-		/**
-		 * Apply custom filtering functions
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterCustom( oSettings )
-		{
-			var afnFilters = DataTable.ext.afnFiltering;
-			for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ )
-			{
-				var iCorrector = 0;
-				for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ )
-				{
-					var iDisIndex = oSettings.aiDisplay[j-iCorrector];
-					
-					/* Check if we should use this row based on the filtering function */
-					if ( !afnFilters[i]( oSettings, _fnGetRowData( oSettings, iDisIndex, 'filter' ), iDisIndex ) )
-					{
-						oSettings.aiDisplay.splice( j-iCorrector, 1 );
-						iCorrector++;
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Filter the table on a per-column basis
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sInput string to filter on
-		 *  @param {int} iColumn column to filter
-		 *  @param {bool} bRegex treat search string as a regular expression or not
-		 *  @param {bool} bSmart use smart filtering or not
-		 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterColumn ( oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive )
-		{
-			if ( sInput === "" )
-			{
-				return;
-			}
-			
-			var iIndexCorrector = 0;
-			var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive );
-			
-			for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- )
-			{
-				var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ),
-					oSettings.aoColumns[iColumn].sType );
-				if ( ! rpSearch.test( sData ) )
-				{
-					oSettings.aiDisplay.splice( i, 1 );
-					iIndexCorrector++;
-				}
-			}
-		}
-		
-		
-		/**
-		 * Filter the data table based on user input and draw the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sInput string to filter on
-		 *  @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0)
-		 *  @param {bool} bRegex treat as a regular expression or not
-		 *  @param {bool} bSmart perform smart filtering or not
-		 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive )
-		{
-			var i;
-			var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive );
-			var oPrevSearch = oSettings.oPreviousSearch;
-			
-			/* Check if we are forcing or not - optional parameter */
-			if ( !iForce )
-			{
-				iForce = 0;
-			}
-			
-			/* Need to take account of custom filtering functions - always filter */
-			if ( DataTable.ext.afnFiltering.length !== 0 )
-			{
-				iForce = 1;
-			}
-			
-			/*
-			 * If the input is blank - we want the full data set
-			 */
-			if ( sInput.length <= 0 )
-			{
-				oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			}
-			else
-			{
-				/*
-				 * We are starting a new search or the new search string is smaller 
-				 * then the old one (i.e. delete). Search from the master array
-			 	 */
-				if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length ||
-					   oPrevSearch.sSearch.length > sInput.length || iForce == 1 ||
-					   sInput.indexOf(oPrevSearch.sSearch) !== 0 )
-				{
-					/* Nuke the old display array - we are going to rebuild it */
-					oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
-					
-					/* Force a rebuild of the search array */
-					_fnBuildSearchArray( oSettings, 1 );
-					
-					/* Search through all records to populate the search array
-					 * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1 
-					 * mapping
-					 */
-					for ( i=0 ; i<oSettings.aiDisplayMaster.length ; i++ )
-					{
-						if ( rpSearch.test(oSettings.asDataSearch[i]) )
-						{
-							oSettings.aiDisplay.push( oSettings.aiDisplayMaster[i] );
-						}
-					}
-			  }
-			  else
-				{
-			  	/* Using old search array - refine it - do it this way for speed
-			  	 * Don't have to search the whole master array again
-					 */
-			  	var iIndexCorrector = 0;
-			  	
-			  	/* Search the current results */
-			  	for ( i=0 ; i<oSettings.asDataSearch.length ; i++ )
-					{
-			  		if ( ! rpSearch.test(oSettings.asDataSearch[i]) )
-						{
-			  			oSettings.aiDisplay.splice( i-iIndexCorrector, 1 );
-			  			iIndexCorrector++;
-			  		}
-			  	}
-			  }
-			}
-		}
-		
-		
-		/**
-		 * Create an array which can be quickly search through
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iMaster use the master data array - optional
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBuildSearchArray ( oSettings, iMaster )
-		{
-			if ( !oSettings.oFeatures.bServerSide )
-			{
-				/* Clear out the old data */
-				oSettings.asDataSearch.splice( 0, oSettings.asDataSearch.length );
-				
-				var aArray = (iMaster && iMaster===1) ?
-				 	oSettings.aiDisplayMaster : oSettings.aiDisplay;
-				
-				for ( var i=0, iLen=aArray.length ; i<iLen ; i++ )
-				{
-					oSettings.asDataSearch[i] = _fnBuildSearchRow( oSettings,
-						_fnGetRowData( oSettings, aArray[i], 'filter' ) );
-				}
-			}
-		}
-		
-		
-		/**
-		 * Create a searchable string from a single data row
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {array} aData Row data array to use for the data to search
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBuildSearchRow( oSettings, aData )
-		{
-			var sSearch = '';
-			if ( oSettings.__nTmpFilter === undefined )
-			{
-				oSettings.__nTmpFilter = document.createElement('div');
-			}
-			var nTmp = oSettings.__nTmpFilter;
-			
-			for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ )
-			{
-				if ( oSettings.aoColumns[j].bSearchable )
-				{
-					var sData = aData[j];
-					sSearch += _fnDataToSearch( sData, oSettings.aoColumns[j].sType )+'  ';
-				}
-			}
-			
-			/* If it looks like there is an HTML entity in the string, attempt to decode it */
-			if ( sSearch.indexOf('&') !== -1 )
-			{
-				nTmp.innerHTML = sSearch;
-				sSearch = nTmp.textContent ? nTmp.textContent : nTmp.innerText;
-				
-				/* IE and Opera appear to put an newline where there is a <br> tag - remove it */
-				sSearch = sSearch.replace(/\n/g," ").replace(/\r/g,"");
-			}
-			
-			return sSearch;
-		}
-		
-		/**
-		 * Build a regular expression object suitable for searching a table
-		 *  @param {string} sSearch string to search for
-		 *  @param {bool} bRegex treat as a regular expression or not
-		 *  @param {bool} bSmart perform smart filtering or not
-		 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-		 *  @returns {RegExp} constructed object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive )
-		{
-			var asSearch, sRegExpString;
-			
-			if ( bSmart )
-			{
-				/* Generate the regular expression to use. Something along the lines of:
-				 * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$
-				 */
-				asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' );
-				sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$';
-				return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" );
-			}
-			else
-			{
-				sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch );
-				return new RegExp( sSearch, bCaseInsensitive ? "i" : "" );
-			}
-		}
-		
-		
-		/**
-		 * Convert raw data into something that the user can search on
-		 *  @param {string} sData data to be modified
-		 *  @param {string} sType data type
-		 *  @returns {string} search string
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDataToSearch ( sData, sType )
-		{
-			if ( typeof DataTable.ext.ofnSearch[sType] === "function" )
-			{
-				return DataTable.ext.ofnSearch[sType]( sData );
-			}
-			else if ( sData === null )
-			{
-				return '';
-			}
-			else if ( sType == "html" )
-			{
-				return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" );
-			}
-			else if ( typeof sData === "string" )
-			{
-				return sData.replace(/[\r\n]/g," ");
-			}
-			return sData;
-		}
-		
-		
-		/**
-		 * scape a string stuch that it can be used in a regular expression
-		 *  @param {string} sVal string to escape
-		 *  @returns {string} escaped string
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnEscapeRegex ( sVal )
-		{
-			var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ];
-			var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' );
-			return sVal.replace(reReplace, '\\$1');
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for the info display
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Information element
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlInfo ( oSettings )
-		{
-			var nInfo = document.createElement( 'div' );
-			nInfo.className = oSettings.oClasses.sInfo;
-			
-			/* Actions that are to be taken once only for this feature */
-			if ( !oSettings.aanFeatures.i )
-			{
-				/* Add draw callback */
-				oSettings.aoDrawCallback.push( {
-					"fn": _fnUpdateInfo,
-					"sName": "information"
-				} );
-				
-				/* Add id */
-				nInfo.id = oSettings.sTableId+'_info';
-			}
-			oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' );
-			
-			return nInfo;
-		}
-		
-		
-		/**
-		 * Update the information elements in the display
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnUpdateInfo ( oSettings )
-		{
-			/* Show information about the table */
-			if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 )
-			{
-				return;
-			}
-			
-			var
-				oLang = oSettings.oLanguage,
-				iStart = oSettings._iDisplayStart+1,
-				iEnd = oSettings.fnDisplayEnd(),
-				iMax = oSettings.fnRecordsTotal(),
-				iTotal = oSettings.fnRecordsDisplay(),
-				sOut;
-			
-			if ( iTotal === 0 && iTotal == iMax )
-			{
-				/* Empty record set */
-				sOut = oLang.sInfoEmpty;
-			}
-			else if ( iTotal === 0 )
-			{
-				/* Empty record set after filtering */
-				sOut = oLang.sInfoEmpty +' '+ oLang.sInfoFiltered;
-			}
-			else if ( iTotal == iMax )
-			{
-				/* Normal record set */
-				sOut = oLang.sInfo;
-			}
-			else
-			{
-				/* Record set after filtering */
-				sOut = oLang.sInfo +' '+ oLang.sInfoFiltered;
-			}
-		
-			// Convert the macros
-			sOut += oLang.sInfoPostFix;
-			sOut = _fnInfoMacros( oSettings, sOut );
-			
-			if ( oLang.fnInfoCallback !== null )
-			{
-				sOut = oLang.fnInfoCallback.call( oSettings.oInstance, 
-					oSettings, iStart, iEnd, iMax, iTotal, sOut );
-			}
-			
-			var n = oSettings.aanFeatures.i;
-			for ( var i=0, iLen=n.length ; i<iLen ; i++ )
-			{
-				$(n[i]).html( sOut );
-			}
-		}
-		
-		
-		function _fnInfoMacros ( oSettings, str )
-		{
-			var
-				iStart = oSettings._iDisplayStart+1,
-				sStart = oSettings.fnFormatNumber( iStart ),
-				iEnd = oSettings.fnDisplayEnd(),
-				sEnd = oSettings.fnFormatNumber( iEnd ),
-				iTotal = oSettings.fnRecordsDisplay(),
-				sTotal = oSettings.fnFormatNumber( iTotal ),
-				iMax = oSettings.fnRecordsTotal(),
-				sMax = oSettings.fnFormatNumber( iMax );
-		
-			// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
-			// internally
-			if ( oSettings.oScroll.bInfinite )
-			{
-				sStart = oSettings.fnFormatNumber( 1 );
-			}
-		
-			return str.
-				replace('_START_', sStart).
-				replace('_END_',   sEnd).
-				replace('_TOTAL_', sTotal).
-				replace('_MAX_',   sMax);
-		}
-		
-		
-		
-		/**
-		 * Draw the table for the first time, adding all required features
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnInitialise ( oSettings )
-		{
-			var i, iLen, iAjaxStart=oSettings.iInitDisplayStart;
-			
-			/* Ensure that the table data is fully initialised */
-			if ( oSettings.bInitialised === false )
-			{
-				setTimeout( function(){ _fnInitialise( oSettings ); }, 200 );
-				return;
-			}
-			
-			/* Show the display HTML options */
-			_fnAddOptionsHtml( oSettings );
-			
-			/* Build and draw the header / footer for the table */
-			_fnBuildHead( oSettings );
-			_fnDrawHead( oSettings, oSettings.aoHeader );
-			if ( oSettings.nTFoot )
-			{
-				_fnDrawHead( oSettings, oSettings.aoFooter );
-			}
-		
-			/* Okay to show that something is going on now */
-			_fnProcessingDisplay( oSettings, true );
-			
-			/* Calculate sizes for columns */
-			if ( oSettings.oFeatures.bAutoWidth )
-			{
-				_fnCalculateColumnWidths( oSettings );
-			}
-			
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoColumns[i].sWidth !== null )
-				{
-					oSettings.aoColumns[i].nTh.style.width = _fnStringToCss( oSettings.aoColumns[i].sWidth );
-				}
-			}
-			
-			/* If there is default sorting required - let's do it. The sort function will do the
-			 * drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows
-			 * the table to look initialised for Ajax sourcing data (show 'loading' message possibly)
-			 */
-			if ( oSettings.oFeatures.bSort )
-			{
-				_fnSort( oSettings );
-			}
-			else if ( oSettings.oFeatures.bFilter )
-			{
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch );
-			}
-			else
-			{
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-			
-			/* if there is an ajax source load the data */
-			if ( oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
-			{
-				var aoData = [];
-				_fnServerParams( oSettings, aoData );
-				oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) {
-					var aData = (oSettings.sAjaxDataProp !== "") ?
-					 	_fnGetObjectDataFn( oSettings.sAjaxDataProp )(json) : json;
-		
-					/* Got the data - add it to the table */
-					for ( i=0 ; i<aData.length ; i++ )
-					{
-						_fnAddData( oSettings, aData[i] );
-					}
-					
-					/* Reset the init display for cookie saving. We've already done a filter, and
-					 * therefore cleared it before. So we need to make it appear 'fresh'
-					 */
-					oSettings.iInitDisplayStart = iAjaxStart;
-					
-					if ( oSettings.oFeatures.bSort )
-					{
-						_fnSort( oSettings );
-					}
-					else
-					{
-						oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-						_fnCalculateEnd( oSettings );
-						_fnDraw( oSettings );
-					}
-					
-					_fnProcessingDisplay( oSettings, false );
-					_fnInitComplete( oSettings, json );
-				}, oSettings );
-				return;
-			}
-			
-			/* Server-side processing initialisation complete is done at the end of _fnDraw */
-			if ( !oSettings.oFeatures.bServerSide )
-			{
-				_fnProcessingDisplay( oSettings, false );
-				_fnInitComplete( oSettings );
-			}
-		}
-		
-		
-		/**
-		 * Draw the table for the first time, adding all required features
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} [json] JSON from the server that completed the table, if using Ajax source
-		 *    with client-side processing (optional)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnInitComplete ( oSettings, json )
-		{
-			oSettings._bInitComplete = true;
-			_fnCallbackFire( oSettings, 'aoInitComplete', 'init', [oSettings, json] );
-		}
-		
-		
-		/**
-		 * Language compatibility - when certain options are given, and others aren't, we
-		 * need to duplicate the values over, in order to provide backwards compatibility
-		 * with older language files.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnLanguageCompat( oLanguage )
-		{
-			var oDefaults = DataTable.defaults.oLanguage;
-		
-			/* Backwards compatibility - if there is no sEmptyTable given, then use the same as
-			 * sZeroRecords - assuming that is given.
-			 */
-			if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords &&
-				oDefaults.sEmptyTable === "No data available in table" )
-			{
-				_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' );
-			}
-		
-			/* Likewise with loading records */
-			if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords &&
-				oDefaults.sLoadingRecords === "Loading..." )
-			{
-				_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' );
-			}
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for user display length changing
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Display length feature node
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlLength ( oSettings )
-		{
-			if ( oSettings.oScroll.bInfinite )
-			{
-				return null;
-			}
-			
-			/* This can be overruled by not using the _MENU_ var/macro in the language variable */
-			var sName = 'name="'+oSettings.sTableId+'_length"';
-			var sStdMenu = '<select size="1" '+sName+'>';
-			var i, iLen;
-			var aLengthMenu = oSettings.aLengthMenu;
-			
-			if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && 
-					typeof aLengthMenu[1] === 'object' )
-			{
-				for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ )
-				{
-					sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>';
-				}
-			}
-			else
-			{
-				for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ )
-				{
-					sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>';
-				}
-			}
-			sStdMenu += '</select>';
-			
-			var nLength = document.createElement( 'div' );
-			if ( !oSettings.aanFeatures.l )
-			{
-				nLength.id = oSettings.sTableId+'_length';
-			}
-			nLength.className = oSettings.oClasses.sLength;
-			nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>';
-			
-			/*
-			 * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
-			 * and Stefan Skopnik for fixing the fix!
-			 */
-			$('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true);
-			
-			$('select', nLength).bind( 'change.DT', function(e) {
-				var iVal = $(this).val();
-				
-				/* Update all other length options for the new display */
-				var n = oSettings.aanFeatures.l;
-				for ( i=0, iLen=n.length ; i<iLen ; i++ )
-				{
-					if ( n[i] != this.parentNode )
-					{
-						$('select', n[i]).val( iVal );
-					}
-				}
-				
-				/* Redraw the table */
-				oSettings._iDisplayLength = parseInt(iVal, 10);
-				_fnCalculateEnd( oSettings );
-				
-				/* If we have space to show extra rows (backing up from the end point - then do so */
-				if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() )
-				{
-					oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
-					if ( oSettings._iDisplayStart < 0 )
-					{
-						oSettings._iDisplayStart = 0;
-					}
-				}
-				
-				if ( oSettings._iDisplayLength == -1 )
-				{
-					oSettings._iDisplayStart = 0;
-				}
-				
-				_fnDraw( oSettings );
-			} );
-		
-		
-			$('select', nLength).attr('aria-controls', oSettings.sTableId);
-			
-			return nLength;
-		}
-		
-		
-		/**
-		 * Rcalculate the end point based on the start point
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCalculateEnd( oSettings )
-		{
-			if ( oSettings.oFeatures.bPaginate === false )
-			{
-				oSettings._iDisplayEnd = oSettings.aiDisplay.length;
-			}
-			else
-			{
-				/* Set the end point of the display - based on how many elements there are
-				 * still to display
-				 */
-				if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length ||
-					   oSettings._iDisplayLength == -1 )
-				{
-					oSettings._iDisplayEnd = oSettings.aiDisplay.length;
-				}
-				else
-				{
-					oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
-				}
-			}
-		}
-		
-		
-		
-		/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-		 * Note that most of the paging logic is done in 
-		 * DataTable.ext.oPagination
-		 */
-		
-		/**
-		 * Generate the node required for default pagination
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Pagination feature node
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlPaginate ( oSettings )
-		{
-			if ( oSettings.oScroll.bInfinite )
-			{
-				return null;
-			}
-			
-			var nPaginate = document.createElement( 'div' );
-			nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType;
-			
-			DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate, 
-				function( oSettings ) {
-					_fnCalculateEnd( oSettings );
-					_fnDraw( oSettings );
-				}
-			);
-			
-			/* Add a draw callback for the pagination on first instance, to update the paging display */
-			if ( !oSettings.aanFeatures.p )
-			{
-				oSettings.aoDrawCallback.push( {
-					"fn": function( oSettings ) {
-						DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) {
-							_fnCalculateEnd( oSettings );
-							_fnDraw( oSettings );
-						} );
-					},
-					"sName": "pagination"
-				} );
-			}
-			return nPaginate;
-		}
-		
-		
-		/**
-		 * Alter the display settings to change the page
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
-		 *    or page number to jump to (integer)
-		 *  @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnPageChange ( oSettings, mAction )
-		{
-			var iOldStart = oSettings._iDisplayStart;
-			
-			if ( typeof mAction === "number" )
-			{
-				oSettings._iDisplayStart = mAction * oSettings._iDisplayLength;
-				if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() )
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			else if ( mAction == "first" )
-			{
-				oSettings._iDisplayStart = 0;
-			}
-			else if ( mAction == "previous" )
-			{
-				oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ?
-					oSettings._iDisplayStart - oSettings._iDisplayLength :
-					0;
-				
-				/* Correct for underrun */
-				if ( oSettings._iDisplayStart < 0 )
-				{
-				  oSettings._iDisplayStart = 0;
-				}
-			}
-			else if ( mAction == "next" )
-			{
-				if ( oSettings._iDisplayLength >= 0 )
-				{
-					/* Make sure we are not over running the display array */
-					if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )
-					{
-						oSettings._iDisplayStart += oSettings._iDisplayLength;
-					}
-				}
-				else
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			else if ( mAction == "last" )
-			{
-				if ( oSettings._iDisplayLength >= 0 )
-				{
-					var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1;
-					oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength;
-				}
-				else
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			else
-			{
-				_fnLog( oSettings, 0, "Unknown paging action: "+mAction );
-			}
-			$(oSettings.oInstance).trigger('page', oSettings);
-			
-			return iOldStart != oSettings._iDisplayStart;
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for the processing node
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Processing element
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlProcessing ( oSettings )
-		{
-			var nProcessing = document.createElement( 'div' );
-			
-			if ( !oSettings.aanFeatures.r )
-			{
-				nProcessing.id = oSettings.sTableId+'_processing';
-			}
-			nProcessing.innerHTML = oSettings.oLanguage.sProcessing;
-			nProcessing.className = oSettings.oClasses.sProcessing;
-			oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable );
-			
-			return nProcessing;
-		}
-		
-		
-		/**
-		 * Display or hide the processing indicator
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {bool} bShow Show the processing indicator (true) or not (false)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnProcessingDisplay ( oSettings, bShow )
-		{
-			if ( oSettings.oFeatures.bProcessing )
-			{
-				var an = oSettings.aanFeatures.r;
-				for ( var i=0, iLen=an.length ; i<iLen ; i++ )
-				{
-					an[i].style.visibility = bShow ? "visible" : "hidden";
-				}
-			}
-		
-			$(oSettings.oInstance).trigger('processing', [oSettings, bShow]);
-		}
-		
-		
-		
-		/**
-		 * Add any control elements for the table - specifically scrolling
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Node to add to the DOM
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlTable ( oSettings )
-		{
-			/* Check if scrolling is enabled or not - if not then leave the DOM unaltered */
-			if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" )
-			{
-				return oSettings.nTable;
-			}
-			
-			/*
-			 * The HTML structure that we want to generate in this function is:
-			 *  div - nScroller
-			 *    div - nScrollHead
-			 *      div - nScrollHeadInner
-			 *        table - nScrollHeadTable
-			 *          thead - nThead
-			 *    div - nScrollBody
-			 *      table - oSettings.nTable
-			 *        thead - nTheadSize
-			 *        tbody - nTbody
-			 *    div - nScrollFoot
-			 *      div - nScrollFootInner
-			 *        table - nScrollFootTable
-			 *          tfoot - nTfoot
-			 */
-			var
-			 	nScroller = document.createElement('div'),
-			 	nScrollHead = document.createElement('div'),
-			 	nScrollHeadInner = document.createElement('div'),
-			 	nScrollBody = document.createElement('div'),
-			 	nScrollFoot = document.createElement('div'),
-			 	nScrollFootInner = document.createElement('div'),
-			 	nScrollHeadTable = oSettings.nTable.cloneNode(false),
-			 	nScrollFootTable = oSettings.nTable.cloneNode(false),
-				nThead = oSettings.nTable.getElementsByTagName('thead')[0],
-			 	nTfoot = oSettings.nTable.getElementsByTagName('tfoot').length === 0 ? null : 
-					oSettings.nTable.getElementsByTagName('tfoot')[0],
-				oClasses = oSettings.oClasses;
-			
-			nScrollHead.appendChild( nScrollHeadInner );
-			nScrollFoot.appendChild( nScrollFootInner );
-			nScrollBody.appendChild( oSettings.nTable );
-			nScroller.appendChild( nScrollHead );
-			nScroller.appendChild( nScrollBody );
-			nScrollHeadInner.appendChild( nScrollHeadTable );
-			nScrollHeadTable.appendChild( nThead );
-			if ( nTfoot !== null )
-			{
-				nScroller.appendChild( nScrollFoot );
-				nScrollFootInner.appendChild( nScrollFootTable );
-				nScrollFootTable.appendChild( nTfoot );
-			}
-			
-			nScroller.className = oClasses.sScrollWrapper;
-			nScrollHead.className = oClasses.sScrollHead;
-			nScrollHeadInner.className = oClasses.sScrollHeadInner;
-			nScrollBody.className = oClasses.sScrollBody;
-			nScrollFoot.className = oClasses.sScrollFoot;
-			nScrollFootInner.className = oClasses.sScrollFootInner;
-			
-			if ( oSettings.oScroll.bAutoCss )
-			{
-				nScrollHead.style.overflow = "hidden";
-				nScrollHead.style.position = "relative";
-				nScrollFoot.style.overflow = "hidden";
-				nScrollBody.style.overflow = "auto";
-			}
-			
-			nScrollHead.style.border = "0";
-			nScrollHead.style.width = "100%";
-			nScrollFoot.style.border = "0";
-			nScrollHeadInner.style.width = oSettings.oScroll.sXInner !== "" ?
-				oSettings.oScroll.sXInner : "100%"; /* will be overwritten */
-			
-			/* Modify attributes to respect the clones */
-			nScrollHeadTable.removeAttribute('id');
-			nScrollHeadTable.style.marginLeft = "0";
-			oSettings.nTable.style.marginLeft = "0";
-			if ( nTfoot !== null )
-			{
-				nScrollFootTable.removeAttribute('id');
-				nScrollFootTable.style.marginLeft = "0";
-			}
-			
-			/* Move caption elements from the body to the header, footer or leave where it is
-			 * depending on the configuration. Note that the DTD says there can be only one caption */
-			var nCaption = $(oSettings.nTable).children('caption');
-			if ( nCaption.length > 0 )
-			{
-				nCaption = nCaption[0];
-				if ( nCaption._captionSide === "top" )
-				{
-					nScrollHeadTable.appendChild( nCaption );
-				}
-				else if ( nCaption._captionSide === "bottom" && nTfoot )
-				{
-					nScrollFootTable.appendChild( nCaption );
-				}
-			}
-			
-			/*
-			 * Sizing
-			 */
-			/* When xscrolling add the width and a scroller to move the header with the body */
-			if ( oSettings.oScroll.sX !== "" )
-			{
-				nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX );
-				nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX );
-				
-				if ( nTfoot !== null )
-				{
-					nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX );	
-				}
-				
-				/* When the body is scrolled, then we also want to scroll the headers */
-				$(nScrollBody).scroll( function (e) {
-					nScrollHead.scrollLeft = this.scrollLeft;
-					
-					if ( nTfoot !== null )
-					{
-						nScrollFoot.scrollLeft = this.scrollLeft;
-					}
-				} );
-			}
-			
-			/* When yscrolling, add the height */
-			if ( oSettings.oScroll.sY !== "" )
-			{
-				nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY );
-			}
-			
-			/* Redraw - align columns across the tables */
-			oSettings.aoDrawCallback.push( {
-				"fn": _fnScrollDraw,
-				"sName": "scrolling"
-			} );
-			
-			/* Infinite scrolling event handlers */
-			if ( oSettings.oScroll.bInfinite )
-			{
-				$(nScrollBody).scroll( function() {
-					/* Use a blocker to stop scrolling from loading more data while other data is still loading */
-					if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 )
-					{
-						/* Check if we should load the next data set */
-						if ( $(this).scrollTop() + $(this).height() > 
-							$(oSettings.nTable).height() - oSettings.oScroll.iLoadGap )
-						{
-							/* Only do the redraw if we have to - we might be at the end of the data */
-							if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() )
-							{
-								_fnPageChange( oSettings, 'next' );
-								_fnCalculateEnd( oSettings );
-								_fnDraw( oSettings );
-							}
-						}
-					}
-				} );
-			}
-			
-			oSettings.nScrollHead = nScrollHead;
-			oSettings.nScrollFoot = nScrollFoot;
-			
-			return nScroller;
-		}
-		
-		
-		/**
-		 * Update the various tables for resizing. It's a bit of a pig this function, but
-		 * basically the idea to:
-		 *   1. Re-create the table inside the scrolling div
-		 *   2. Take live measurements from the DOM
-		 *   3. Apply the measurements
-		 *   4. Clean up
-		 *  @param {object} o dataTables settings object
-		 *  @returns {node} Node to add to the DOM
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnScrollDraw ( o )
-		{
-			var
-				nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0],
-				nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
-				nScrollBody = o.nTable.parentNode,
-				i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis,
-				nTheadSize, nTfootSize,
-				iWidth, aApplied=[], iSanityWidth,
-				nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null,
-				nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null,
-				ie67 = $.browser.msie && $.browser.version <= 7;
-			
-			/*
-			 * 1. Re-create the table inside the scrolling div
-			 */
-			
-			/* Remove the old minimised thead and tfoot elements in the inner table */
-			$(o.nTable).children('thead, tfoot').remove();
-		
-			/* Clone the current header and footer elements and then place it into the inner table */
-			nTheadSize = $(o.nTHead).clone()[0];
-			o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] );
-			
-			if ( o.nTFoot !== null )
-			{
-				nTfootSize = $(o.nTFoot).clone()[0];
-				o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] );
-			}
-			
-			/*
-			 * 2. Take live measurements from the DOM - do not alter the DOM itself!
-			 */
-			
-			/* Remove old sizing and apply the calculated column widths
-			 * Get the unique column headers in the newly created (cloned) header. We want to apply the
-			 * calclated sizes to this header
-			 */
-			if ( o.oScroll.sX === "" )
-			{
-				nScrollBody.style.width = '100%';
-				nScrollHeadInner.parentNode.style.width = '100%';
-			}
-			
-			var nThs = _fnGetUniqueThs( o, nTheadSize );
-			for ( i=0, iLen=nThs.length ; i<iLen ; i++ )
-			{
-				iVis = _fnVisibleToColumnIndex( o, i );
-				nThs[i].style.width = o.aoColumns[iVis].sWidth;
-			}
-			
-			if ( o.nTFoot !== null )
-			{
-				_fnApplyToChildren( function(n) {
-					n.style.width = "";
-				}, nTfootSize.getElementsByTagName('tr') );
-			}
-		
-			// If scroll collapse is enabled, when we put the headers back into the body for sizing, we
-			// will end up forcing the scrollbar to appear, making our measurements wrong for when we
-			// then hide it (end of this function), so add the header height to the body scroller.
-			if ( o.oScroll.bCollapse && o.oScroll.sY !== "" )
-			{
-				nScrollBody.style.height = (nScrollBody.offsetHeight + o.nTHead.offsetHeight)+"px";
-			}
-			
-			/* Size the table as a whole */
-			iSanityWidth = $(o.nTable).outerWidth();
-			if ( o.oScroll.sX === "" )
-			{
-				/* No x scrolling */
-				o.nTable.style.width = "100%";
-				
-				/* I know this is rubbish - but IE7 will make the width of the table when 100% include
-				 * the scrollbar - which is shouldn't. When there is a scrollbar we need to take this
-				 * into account.
-				 */
-				if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight || 
-					$(nScrollBody).css('overflow-y') == "scroll")  )
-				{
-					o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth() - o.oScroll.iBarWidth);
-				}
-			}
-			else
-			{
-				if ( o.oScroll.sXInner !== "" )
-				{
-					/* x scroll inner has been given - use it */
-					o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner);
-				}
-				else if ( iSanityWidth == $(nScrollBody).width() &&
-				   $(nScrollBody).height() < $(o.nTable).height() )
-				{
-					/* There is y-scrolling - try to take account of the y scroll bar */
-					o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth );
-					if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth )
-					{
-						/* Not possible to take account of it */
-						o.nTable.style.width = _fnStringToCss( iSanityWidth );
-					}
-				}
-				else
-				{
-					/* All else fails */
-					o.nTable.style.width = _fnStringToCss( iSanityWidth );
-				}
-			}
-			
-			/* Recalculate the sanity width - now that we've applied the required width, before it was
-			 * a temporary variable. This is required because the column width calculation is done
-			 * before this table DOM is created.
-			 */
-			iSanityWidth = $(o.nTable).outerWidth();
-			
-			/* We want the hidden header to have zero height, so remove padding and borders. Then
-			 * set the width based on the real headers
-			 */
-			anHeadToSize = o.nTHead.getElementsByTagName('tr');
-			anHeadSizers = nTheadSize.getElementsByTagName('tr');
-			
-			_fnApplyToChildren( function(nSizer, nToSize) {
-				oStyle = nSizer.style;
-				oStyle.paddingTop = "0";
-				oStyle.paddingBottom = "0";
-				oStyle.borderTopWidth = "0";
-				oStyle.borderBottomWidth = "0";
-				oStyle.height = 0;
-				
-				iWidth = $(nSizer).width();
-				nToSize.style.width = _fnStringToCss( iWidth );
-				aApplied.push( iWidth );
-			}, anHeadSizers, anHeadToSize );
-			$(anHeadSizers).height(0);
-			
-			if ( o.nTFoot !== null )
-			{
-				/* Clone the current footer and then place it into the body table as a "hidden header" */
-				anFootSizers = nTfootSize.getElementsByTagName('tr');
-				anFootToSize = o.nTFoot.getElementsByTagName('tr');
-				
-				_fnApplyToChildren( function(nSizer, nToSize) {
-					oStyle = nSizer.style;
-					oStyle.paddingTop = "0";
-					oStyle.paddingBottom = "0";
-					oStyle.borderTopWidth = "0";
-					oStyle.borderBottomWidth = "0";
-					oStyle.height = 0;
-					
-					iWidth = $(nSizer).width();
-					nToSize.style.width = _fnStringToCss( iWidth );
-					aApplied.push( iWidth );
-				}, anFootSizers, anFootToSize );
-				$(anFootSizers).height(0);
-			}
-			
-			/*
-			 * 3. Apply the measurements
-			 */
-			
-			/* "Hide" the header and footer that we used for the sizing. We want to also fix their width
-			 * to what they currently are
-			 */
-			_fnApplyToChildren( function(nSizer) {
-				nSizer.innerHTML = "";
-				nSizer.style.width = _fnStringToCss( aApplied.shift() );
-			}, anHeadSizers );
-			
-			if ( o.nTFoot !== null )
-			{
-				_fnApplyToChildren( function(nSizer) {
-					nSizer.innerHTML = "";
-					nSizer.style.width = _fnStringToCss( aApplied.shift() );
-				}, anFootSizers );
-			}
-			
-			/* Sanity check that the table is of a sensible width. If not then we are going to get
-			 * misalignment - try to prevent this by not allowing the table to shrink below its min width
-			 */
-			if ( $(o.nTable).outerWidth() < iSanityWidth )
-			{
-				/* The min width depends upon if we have a vertical scrollbar visible or not */
-				var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || 
-					$(nScrollBody).css('overflow-y') == "scroll")) ?
-						iSanityWidth+o.oScroll.iBarWidth : iSanityWidth;
-				
-				/* IE6/7 are a law unto themselves... */
-				if ( ie67 && (nScrollBody.scrollHeight > 
-					nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll")  )
-				{
-					o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth );
-				}
-				
-				/* Apply the calculated minimum width to the table wrappers */
-				nScrollBody.style.width = _fnStringToCss( iCorrection );
-				nScrollHeadInner.parentNode.style.width = _fnStringToCss( iCorrection );
-				
-				if ( o.nTFoot !== null )
-				{
-					nScrollFootInner.parentNode.style.width = _fnStringToCss( iCorrection );
-				}
-				
-				/* And give the user a warning that we've stopped the table getting too small */
-				if ( o.oScroll.sX === "" )
-				{
-					_fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
-						" misalignment. The table has been drawn at its minimum possible width." );
-				}
-				else if ( o.oScroll.sXInner !== "" )
-				{
-					_fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
-						" misalignment. Increase the sScrollXInner value or remove it to allow automatic"+
-						" calculation" );
-				}
-			}
-			else
-			{
-				nScrollBody.style.width = _fnStringToCss( '100%' );
-				nScrollHeadInner.parentNode.style.width = _fnStringToCss( '100%' );
-				
-				if ( o.nTFoot !== null )
-				{
-					nScrollFootInner.parentNode.style.width = _fnStringToCss( '100%' );
-				}
-			}
-			
-			
-			/*
-			 * 4. Clean up
-			 */
-			if ( o.oScroll.sY === "" )
-			{
-				/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
-				 * the scrollbar height from the visible display, rather than adding it on. We need to
-				 * set the height in order to sort this. Don't want to do it in any other browsers.
-				 */
-				if ( ie67 )
-				{
-					nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth );
-				}
-			}
-			
-			if ( o.oScroll.sY !== "" && o.oScroll.bCollapse )
-			{
-				nScrollBody.style.height = _fnStringToCss( o.oScroll.sY );
-				
-				var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ?
-				 	o.oScroll.iBarWidth : 0;
-				if ( o.nTable.offsetHeight < nScrollBody.offsetHeight )
-				{
-					nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+iExtra );
-				}
-			}
-			
-			/* Finally set the width's of the header and footer tables */
-			var iOuterWidth = $(o.nTable).outerWidth();
-			nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth );
-			nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth );
-		
-			// Figure out if there are scrollbar present - if so then we need a the header and footer to
-			// provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
-			var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll";
-			nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
-			
-			if ( o.nTFoot !== null )
-			{
-				nScrollFootTable.style.width = _fnStringToCss( iOuterWidth );
-				nScrollFootInner.style.width = _fnStringToCss( iOuterWidth );
-				nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
-			}
-		
-			/* Adjust the position of the header incase we loose the y-scrollbar */
-			$(nScrollBody).scroll();
-			
-			/* If sorting or filtering has occurred, jump the scrolling back to the top */
-			if ( o.bSorted || o.bFiltered )
-			{
-				nScrollBody.scrollTop = 0;
-			}
-		}
-		
-		
-		/**
-		 * Apply a given function to the display child nodes of an element array (typically
-		 * TD children of TR rows
-		 *  @param {function} fn Method to apply to the objects
-		 *  @param array {nodes} an1 List of elements to look through for display children
-		 *  @param array {nodes} an2 Another list (identical structure to the first) - optional
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnApplyToChildren( fn, an1, an2 )
-		{
-			for ( var i=0, iLen=an1.length ; i<iLen ; i++ )
-			{
-				for ( var j=0, jLen=an1[i].childNodes.length ; j<jLen ; j++ )
-				{
-					if ( an1[i].childNodes[j].nodeType == 1 )
-					{
-						if ( an2 )
-						{
-							fn( an1[i].childNodes[j], an2[i].childNodes[j] );
-						}
-						else
-						{
-							fn( an1[i].childNodes[j] );
-						}
-					}
-				}
-			}
-		}
-		
-		
-		
-		/**
-		 * Convert a CSS unit width to pixels (e.g. 2em)
-		 *  @param {string} sWidth width to be converted
-		 *  @param {node} nParent parent to get the with for (required for relative widths) - optional
-		 *  @returns {int} iWidth width in pixels
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnConvertToWidth ( sWidth, nParent )
-		{
-			if ( !sWidth || sWidth === null || sWidth === '' )
-			{
-				return 0;
-			}
-			
-			if ( !nParent )
-			{
-				nParent = document.getElementsByTagName('body')[0];
-			}
-			
-			var iWidth;
-			var nTmp = document.createElement( "div" );
-			nTmp.style.width = _fnStringToCss( sWidth );
-			
-			nParent.appendChild( nTmp );
-			iWidth = nTmp.offsetWidth;
-			nParent.removeChild( nTmp );
-			
-			return ( iWidth );
-		}
-		
-		
-		/**
-		 * Calculate the width of columns for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCalculateColumnWidths ( oSettings )
-		{
-			var iTableWidth = oSettings.nTable.offsetWidth;
-			var iUserInputs = 0;
-			var iTmpWidth;
-			var iVisibleColumns = 0;
-			var iColums = oSettings.aoColumns.length;
-			var i, iIndex, iCorrector, iWidth;
-			var oHeaders = $('th', oSettings.nTHead);
-			var widthAttr = oSettings.nTable.getAttribute('width');
-			
-			/* Convert any user input sizes into pixel sizes */
-			for ( i=0 ; i<iColums ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible )
-				{
-					iVisibleColumns++;
-					
-					if ( oSettings.aoColumns[i].sWidth !== null )
-					{
-						iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig, 
-							oSettings.nTable.parentNode );
-						if ( iTmpWidth !== null )
-						{
-							oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
-						}
-							
-						iUserInputs++;
-					}
-				}
-			}
-			
-			/* If the number of columns in the DOM equals the number that we have to process in 
-			 * DataTables, then we can use the offsets that are created by the web-browser. No custom 
-			 * sizes can be set in order for this to happen, nor scrolling used
-			 */
-			if ( iColums == oHeaders.length && iUserInputs === 0 && iVisibleColumns == iColums &&
-				oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" )
-			{
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					iTmpWidth = $(oHeaders[i]).width();
-					if ( iTmpWidth !== null )
-					{
-						oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
-					}
-				}
-			}
-			else
-			{
-				/* Otherwise we are going to have to do some calculations to get the width of each column.
-				 * Construct a 1 row table with the widest node in the data, and any user defined widths,
-				 * then insert it into the DOM and allow the browser to do all the hard work of
-				 * calculating table widths.
-				 */
-				var
-					nCalcTmp = oSettings.nTable.cloneNode( false ),
-					nTheadClone = oSettings.nTHead.cloneNode(true),
-					nBody = document.createElement( 'tbody' ),
-					nTr = document.createElement( 'tr' ),
-					nDivSizing;
-				
-				nCalcTmp.removeAttribute( "id" );
-				nCalcTmp.appendChild( nTheadClone );
-				if ( oSettings.nTFoot !== null )
-				{
-					nCalcTmp.appendChild( oSettings.nTFoot.cloneNode(true) );
-					_fnApplyToChildren( function(n) {
-						n.style.width = "";
-					}, nCalcTmp.getElementsByTagName('tr') );
-				}
-				
-				nCalcTmp.appendChild( nBody );
-				nBody.appendChild( nTr );
-				
-				/* Remove any sizing that was previously applied by the styles */
-				var jqColSizing = $('thead th', nCalcTmp);
-				if ( jqColSizing.length === 0 )
-				{
-					jqColSizing = $('tbody tr:eq(0)>td', nCalcTmp);
-				}
-		
-				/* Apply custom sizing to the cloned header */
-				var nThs = _fnGetUniqueThs( oSettings, nTheadClone );
-				iCorrector = 0;
-				for ( i=0 ; i<iColums ; i++ )
-				{
-					var oColumn = oSettings.aoColumns[i];
-					if ( oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "" )
-					{
-						nThs[i-iCorrector].style.width = _fnStringToCss( oColumn.sWidthOrig );
-					}
-					else if ( oColumn.bVisible )
-					{
-						nThs[i-iCorrector].style.width = "";
-					}
-					else
-					{
-						iCorrector++;
-					}
-				}
-		
-				/* Find the biggest td for each column and put it into the table */
-				for ( i=0 ; i<iColums ; i++ )
-				{
-					if ( oSettings.aoColumns[i].bVisible )
-					{
-						var nTd = _fnGetWidestNode( oSettings, i );
-						if ( nTd !== null )
-						{
-							nTd = nTd.cloneNode(true);
-							if ( oSettings.aoColumns[i].sContentPadding !== "" )
-							{
-								nTd.innerHTML += oSettings.aoColumns[i].sContentPadding;
-							}
-							nTr.appendChild( nTd );
-						}
-					}
-				}
-				
-				/* Build the table and 'display' it */
-				var nWrapper = oSettings.nTable.parentNode;
-				nWrapper.appendChild( nCalcTmp );
-				
-				/* When scrolling (X or Y) we want to set the width of the table as appropriate. However,
-				 * when not scrolling leave the table width as it is. This results in slightly different,
-				 * but I think correct behaviour
-				 */
-				if ( oSettings.oScroll.sX !== "" && oSettings.oScroll.sXInner !== "" )
-				{
-					nCalcTmp.style.width = _fnStringToCss(oSettings.oScroll.sXInner);
-				}
-				else if ( oSettings.oScroll.sX !== "" )
-				{
-					nCalcTmp.style.width = "";
-					if ( $(nCalcTmp).width() < nWrapper.offsetWidth )
-					{
-						nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth );
-					}
-				}
-				else if ( oSettings.oScroll.sY !== "" )
-				{
-					nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth );
-				}
-				else if ( widthAttr )
-				{
-					nCalcTmp.style.width = _fnStringToCss( widthAttr );
-				}
-				nCalcTmp.style.visibility = "hidden";
-				
-				/* Scrolling considerations */
-				_fnScrollingWidthAdjust( oSettings, nCalcTmp );
-				
-				/* Read the width's calculated by the browser and store them for use by the caller. We
-				 * first of all try to use the elements in the body, but it is possible that there are
-				 * no elements there, under which circumstances we use the header elements
-				 */
-				var oNodes = $("tbody tr:eq(0)", nCalcTmp).children();
-				if ( oNodes.length === 0 )
-				{
-					oNodes = _fnGetUniqueThs( oSettings, $('thead', nCalcTmp)[0] );
-				}
-		
-				/* Browsers need a bit of a hand when a width is assigned to any columns when 
-				 * x-scrolling as they tend to collapse the table to the min-width, even if
-				 * we sent the column widths. So we need to keep track of what the table width
-				 * should be by summing the user given values, and the automatic values
-				 */
-				if ( oSettings.oScroll.sX !== "" )
-				{
-					var iTotal = 0;
-					iCorrector = 0;
-					for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-					{
-						if ( oSettings.aoColumns[i].bVisible )
-						{
-							if ( oSettings.aoColumns[i].sWidthOrig === null )
-							{
-								iTotal += $(oNodes[iCorrector]).outerWidth();
-							}
-							else
-							{
-								iTotal += parseInt(oSettings.aoColumns[i].sWidth.replace('px',''), 10) +
-									($(oNodes[iCorrector]).outerWidth() - $(oNodes[iCorrector]).width());
-							}
-							iCorrector++;
-						}
-					}
-					
-					nCalcTmp.style.width = _fnStringToCss( iTotal );
-					oSettings.nTable.style.width = _fnStringToCss( iTotal );
-				}
-		
-				iCorrector = 0;
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					if ( oSettings.aoColumns[i].bVisible )
-					{
-						iWidth = $(oNodes[iCorrector]).width();
-						if ( iWidth !== null && iWidth > 0 )
-						{
-							oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth );
-						}
-						iCorrector++;
-					}
-				}
-		
-				var cssWidth = $(nCalcTmp).css('width');
-				oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ?
-				    cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() );
-				nCalcTmp.parentNode.removeChild( nCalcTmp );
-			}
-		
-			if ( widthAttr )
-			{
-				oSettings.nTable.style.width = _fnStringToCss( widthAttr );
-			}
-		}
-		
-		
-		/**
-		 * Adjust a table's width to take account of scrolling
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} n table node
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnScrollingWidthAdjust ( oSettings, n )
-		{
-			if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" )
-			{
-				/* When y-scrolling only, we want to remove the width of the scroll bar so the table
-				 * + scroll bar will fit into the area avaialble.
-				 */
-				var iOrigWidth = $(n).width();
-				n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth );
-			}
-			else if ( oSettings.oScroll.sX !== "" )
-			{
-				/* When x-scrolling both ways, fix the table at it's current size, without adjusting */
-				n.style.width = _fnStringToCss( $(n).outerWidth() );
-			}
-		}
-		
-		
-		/**
-		 * Get the widest node
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iCol column of interest
-		 *  @returns {string} max strlens for each column
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetWidestNode( oSettings, iCol )
-		{
-			var iMaxIndex = _fnGetMaxLenString( oSettings, iCol );
-			if ( iMaxIndex < 0 )
-			{
-				return null;
-			}
-		
-			if ( oSettings.aoData[iMaxIndex].nTr === null )
-			{
-				var n = document.createElement('td');
-				n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' );
-				return n;
-			}
-			return _fnGetTdNodes(oSettings, iMaxIndex)[iCol];
-		}
-		
-		
-		/**
-		 * Get the maximum strlen for each data column
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iCol column of interest
-		 *  @returns {string} max strlens for each column
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetMaxLenString( oSettings, iCol )
-		{
-			var iMax = -1;
-			var iMaxIndex = -1;
-			
-			for ( var i=0 ; i<oSettings.aoData.length ; i++ )
-			{
-				var s = _fnGetCellData( oSettings, i, iCol, 'display' )+"";
-				s = s.replace( /<.*?>/g, "" );
-				if ( s.length > iMax )
-				{
-					iMax = s.length;
-					iMaxIndex = i;
-				}
-			}
-			
-			return iMaxIndex;
-		}
-		
-		
-		/**
-		 * Append a CSS unit (only if required) to a string
-		 *  @param {array} aArray1 first array
-		 *  @param {array} aArray2 second array
-		 *  @returns {int} 0 if match, 1 if length is different, 2 if no match
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnStringToCss( s )
-		{
-			if ( s === null )
-			{
-				return "0px";
-			}
-			
-			if ( typeof s == 'number' )
-			{
-				if ( s < 0 )
-				{
-					return "0px";
-				}
-				return s+"px";
-			}
-			
-			/* Check if the last character is not 0-9 */
-			var c = s.charCodeAt( s.length-1 );
-			if (c < 0x30 || c > 0x39)
-			{
-				return s;
-			}
-			return s+"px";
-		}
-		
-		
-		/**
-		 * Get the width of a scroll bar in this browser being used
-		 *  @returns {int} width in pixels
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnScrollBarWidth ()
-		{  
-			var inner = document.createElement('p');
-			var style = inner.style;
-			style.width = "100%";
-			style.height = "200px";
-			style.padding = "0px";
-			
-			var outer = document.createElement('div');
-			style = outer.style;
-			style.position = "absolute";
-			style.top = "0px";
-			style.left = "0px";
-			style.visibility = "hidden";
-			style.width = "200px";
-			style.height = "150px";
-			style.padding = "0px";
-			style.overflow = "hidden";
-			outer.appendChild(inner);
-			
-			document.body.appendChild(outer);
-			var w1 = inner.offsetWidth;
-			outer.style.overflow = 'scroll';
-			var w2 = inner.offsetWidth;
-			if ( w1 == w2 )
-			{
-				w2 = outer.clientWidth;
-			}
-			
-			document.body.removeChild(outer);
-			return (w1 - w2);  
-		}
-		
-		
-		
-		/**
-		 * Change the order of the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {bool} bApplyClasses optional - should we apply classes or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSort ( oSettings, bApplyClasses )
-		{
-			var
-				i, iLen, j, jLen, k, kLen,
-				sDataType, nTh,
-				aaSort = [],
-			 	aiOrig = [],
-				oSort = DataTable.ext.oSort,
-				aoData = oSettings.aoData,
-				aoColumns = oSettings.aoColumns,
-				oAria = oSettings.oLanguage.oAria;
-			
-			/* No sorting required if server-side or no sorting array */
-			if ( !oSettings.oFeatures.bServerSide && 
-				(oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) )
-			{
-				aaSort = ( oSettings.aaSortingFixed !== null ) ?
-					oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
-					oSettings.aaSorting.slice();
-				
-				/* If there is a sorting data type, and a fuction belonging to it, then we need to
-				 * get the data from the developer's function and apply it for this column
-				 */
-				for ( i=0 ; i<aaSort.length ; i++ )
-				{
-					var iColumn = aaSort[i][0];
-					var iVisColumn = _fnColumnIndexToVisible( oSettings, iColumn );
-					sDataType = oSettings.aoColumns[ iColumn ].sSortDataType;
-					if ( DataTable.ext.afnSortData[sDataType] )
-					{
-						var aData = DataTable.ext.afnSortData[sDataType].call( 
-							oSettings.oInstance, oSettings, iColumn, iVisColumn
-						);
-						if ( aData.length === aoData.length )
-						{
-							for ( j=0, jLen=aoData.length ; j<jLen ; j++ )
-							{
-								_fnSetCellData( oSettings, j, iColumn, aData[j] );
-							}
-						}
-						else
-						{
-							_fnLog( oSettings, 0, "Returned data sort array (col "+iColumn+") is the wrong length" );
-						}
-					}
-				}
-				
-				/* Create a value - key array of the current row positions such that we can use their
-				 * current position during the sort, if values match, in order to perform stable sorting
-				 */
-				for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ )
-				{
-					aiOrig[ oSettings.aiDisplayMaster[i] ] = i;
-				}
-		
-				/* Build an internal data array which is specific to the sort, so we can get and prep
-				 * the data to be sorted only once, rather than needing to do it every time the sorting
-				 * function runs. This make the sorting function a very simple comparison
-				 */
-				var iSortLen = aaSort.length;
-				var fnSortFormat, aDataSort;
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					for ( j=0 ; j<iSortLen ; j++ )
-					{
-						aDataSort = aoColumns[ aaSort[j][0] ].aDataSort;
-		
-						for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )
-						{
-							sDataType = aoColumns[ aDataSort[k] ].sType;
-							fnSortFormat = oSort[ (sDataType ? sDataType : 'string')+"-pre" ];
-							
-							aoData[i]._aSortData[ aDataSort[k] ] = fnSortFormat ?
-								fnSortFormat( _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ) ) :
-								_fnGetCellData( oSettings, i, aDataSort[k], 'sort' );
-						}
-					}
-				}
-				
-				/* Do the sort - here we want multi-column sorting based on a given data source (column)
-				 * and sorting function (from oSort) in a certain direction. It's reasonably complex to
-				 * follow on it's own, but this is what we want (example two column sorting):
-				 *  fnLocalSorting = function(a,b){
-				 *  	var iTest;
-				 *  	iTest = oSort['string-asc']('data11', 'data12');
-				 *  	if (iTest !== 0)
-				 *  		return iTest;
-				 *    iTest = oSort['numeric-desc']('data21', 'data22');
-				 *    if (iTest !== 0)
-				 *  		return iTest;
-				 *  	return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
-				 *  }
-				 * Basically we have a test for each sorting column, if the data in that column is equal,
-				 * test the next column. If all columns match, then we use a numeric sort on the row 
-				 * positions in the original data array to provide a stable sort.
-				 */
-				oSettings.aiDisplayMaster.sort( function ( a, b ) {
-					var k, l, lLen, iTest, aDataSort, sDataType;
-					for ( k=0 ; k<iSortLen ; k++ )
-					{
-						aDataSort = aoColumns[ aaSort[k][0] ].aDataSort;
-		
-						for ( l=0, lLen=aDataSort.length ; l<lLen ; l++ )
-						{
-							sDataType = aoColumns[ aDataSort[l] ].sType;
-							
-							iTest = oSort[ (sDataType ? sDataType : 'string')+"-"+aaSort[k][1] ](
-								aoData[a]._aSortData[ aDataSort[l] ],
-								aoData[b]._aSortData[ aDataSort[l] ]
-							);
-						
-							if ( iTest !== 0 )
-							{
-								return iTest;
-							}
-						}
-					}
-					
-					return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
-				} );
-			}
-			
-			/* Alter the sorting classes to take account of the changes */
-			if ( (bApplyClasses === undefined || bApplyClasses) && !oSettings.oFeatures.bDeferRender )
-			{
-				_fnSortingClasses( oSettings );
-			}
-		
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				var sTitle = aoColumns[i].sTitle.replace( /<.*?>/g, "" );
-				nTh = aoColumns[i].nTh;
-				nTh.removeAttribute('aria-sort');
-				nTh.removeAttribute('aria-label');
-				
-				/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */
-				if ( aoColumns[i].bSortable )
-				{
-					if ( aaSort.length > 0 && aaSort[0][0] == i )
-					{
-						nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" );
-						
-						var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ? 
-							aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0];
-						nTh.setAttribute('aria-label', sTitle+
-							(nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
-					}
-					else
-					{
-						nTh.setAttribute('aria-label', sTitle+
-							(aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
-					}
-				}
-				else
-				{
-					nTh.setAttribute('aria-label', sTitle);
-				}
-			}
-			
-			/* Tell the draw function that we have sorted the data */
-			oSettings.bSorted = true;
-			$(oSettings.oInstance).trigger('sort', oSettings);
-			
-			/* Copy the master data into the draw array and re-draw */
-			if ( oSettings.oFeatures.bFilter )
-			{
-				/* _fnFilter() will redraw the table for us */
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
-			}
-			else
-			{
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-				oSettings._iDisplayStart = 0; /* reset display back to page 0 */
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-		}
-		
-		
-		/**
-		 * Attach a sort handler (click) to a node
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} nNode node to attach the handler to
-		 *  @param {int} iDataIndex column sorting index
-		 *  @param {function} [fnCallback] callback function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback )
-		{
-			_fnBindAction( nNode, {}, function (e) {
-				/* If the column is not sortable - don't to anything */
-				if ( oSettings.aoColumns[iDataIndex].bSortable === false )
-				{
-					return;
-				}
-				
-				/*
-				 * This is a little bit odd I admit... I declare a temporary function inside the scope of
-				 * _fnBuildHead and the click handler in order that the code presented here can be used 
-				 * twice - once for when bProcessing is enabled, and another time for when it is 
-				 * disabled, as we need to perform slightly different actions.
-				 *   Basically the issue here is that the Javascript engine in modern browsers don't 
-				 * appear to allow the rendering engine to update the display while it is still excuting
-				 * it's thread (well - it does but only after long intervals). This means that the 
-				 * 'processing' display doesn't appear for a table sort. To break the js thread up a bit
-				 * I force an execution break by using setTimeout - but this breaks the expected 
-				 * thread continuation for the end-developer's point of view (their code would execute
-				 * too early), so we on;y do it when we absolutely have to.
-				 */
-				var fnInnerSorting = function () {
-					var iColumn, iNextSort;
-					
-					/* If the shift key is pressed then we are multipe column sorting */
-					if ( e.shiftKey )
-					{
-						/* Are we already doing some kind of sort on this column? */
-						var bFound = false;
-						for ( var i=0 ; i<oSettings.aaSorting.length ; i++ )
-						{
-							if ( oSettings.aaSorting[i][0] == iDataIndex )
-							{
-								bFound = true;
-								iColumn = oSettings.aaSorting[i][0];
-								iNextSort = oSettings.aaSorting[i][2]+1;
-								
-								if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] )
-								{
-									/* Reached the end of the sorting options, remove from multi-col sort */
-									oSettings.aaSorting.splice( i, 1 );
-								}
-								else
-								{
-									/* Move onto next sorting direction */
-									oSettings.aaSorting[i][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort];
-									oSettings.aaSorting[i][2] = iNextSort;
-								}
-								break;
-							}
-						}
-						
-						/* No sort yet - add it in */
-						if ( bFound === false )
-						{
-							oSettings.aaSorting.push( [ iDataIndex, 
-								oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] );
-						}
-					}
-					else
-					{
-						/* If no shift key then single column sort */
-						if ( oSettings.aaSorting.length == 1 && oSettings.aaSorting[0][0] == iDataIndex )
-						{
-							iColumn = oSettings.aaSorting[0][0];
-							iNextSort = oSettings.aaSorting[0][2]+1;
-							if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] )
-							{
-								iNextSort = 0;
-							}
-							oSettings.aaSorting[0][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort];
-							oSettings.aaSorting[0][2] = iNextSort;
-						}
-						else
-						{
-							oSettings.aaSorting.splice( 0, oSettings.aaSorting.length );
-							oSettings.aaSorting.push( [ iDataIndex, 
-								oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] );
-						}
-					}
-					
-					/* Run the sort */
-					_fnSort( oSettings );
-				}; /* /fnInnerSorting */
-				
-				if ( !oSettings.oFeatures.bProcessing )
-				{
-					fnInnerSorting();
-				}
-				else
-				{
-					_fnProcessingDisplay( oSettings, true );
-					setTimeout( function() {
-						fnInnerSorting();
-						if ( !oSettings.oFeatures.bServerSide )
-						{
-							_fnProcessingDisplay( oSettings, false );
-						}
-					}, 0 );
-				}
-				
-				/* Call the user specified callback function - used for async user interaction */
-				if ( typeof fnCallback == 'function' )
-				{
-					fnCallback( oSettings );
-				}
-			} );
-		}
-		
-		
-		/**
-		 * Set the sorting classes on the header, Note: it is safe to call this function 
-		 * when bSort and bSortClasses are false
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSortingClasses( oSettings )
-		{
-			var i, iLen, j, jLen, iFound;
-			var aaSort, sClass;
-			var iColumns = oSettings.aoColumns.length;
-			var oClasses = oSettings.oClasses;
-			
-			for ( i=0 ; i<iColumns ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bSortable )
-				{
-					$(oSettings.aoColumns[i].nTh).removeClass( oClasses.sSortAsc +" "+ oClasses.sSortDesc +
-						" "+ oSettings.aoColumns[i].sSortingClass );
-				}
-			}
-			
-			if ( oSettings.aaSortingFixed !== null )
-			{
-				aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting );
-			}
-			else
-			{
-				aaSort = oSettings.aaSorting.slice();
-			}
-			
-			/* Apply the required classes to the header */
-			for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bSortable )
-				{
-					sClass = oSettings.aoColumns[i].sSortingClass;
-					iFound = -1;
-					for ( j=0 ; j<aaSort.length ; j++ )
-					{
-						if ( aaSort[j][0] == i )
-						{
-							sClass = ( aaSort[j][1] == "asc" ) ?
-								oClasses.sSortAsc : oClasses.sSortDesc;
-							iFound = j;
-							break;
-						}
-					}
-					$(oSettings.aoColumns[i].nTh).addClass( sClass );
-					
-					if ( oSettings.bJUI )
-					{
-						/* jQuery UI uses extra markup */
-						var jqSpan = $("span."+oClasses.sSortIcon,  oSettings.aoColumns[i].nTh);
-						jqSpan.removeClass(oClasses.sSortJUIAsc +" "+ oClasses.sSortJUIDesc +" "+ 
-							oClasses.sSortJUI +" "+ oClasses.sSortJUIAscAllowed +" "+ oClasses.sSortJUIDescAllowed );
-						
-						var sSpanClass;
-						if ( iFound == -1 )
-						{
-						 	sSpanClass = oSettings.aoColumns[i].sSortingClassJUI;
-						}
-						else if ( aaSort[iFound][1] == "asc" )
-						{
-							sSpanClass = oClasses.sSortJUIAsc;
-						}
-						else
-						{
-							sSpanClass = oClasses.sSortJUIDesc;
-						}
-						
-						jqSpan.addClass( sSpanClass );
-					}
-				}
-				else
-				{
-					/* No sorting on this column, so add the base class. This will have been assigned by
-					 * _fnAddColumn
-					 */
-					$(oSettings.aoColumns[i].nTh).addClass( oSettings.aoColumns[i].sSortingClass );
-				}
-			}
-			
-			/* 
-			 * Apply the required classes to the table body
-			 * Note that this is given as a feature switch since it can significantly slow down a sort
-			 * on large data sets (adding and removing of classes is always slow at the best of times..)
-			 * Further to this, note that this code is admitadly fairly ugly. It could be made a lot 
-			 * simpiler using jQuery selectors and add/removeClass, but that is significantly slower
-			 * (on the order of 5 times slower) - hence the direct DOM manipulation here.
-			 * Note that for defered drawing we do use jQuery - the reason being that taking the first
-			 * row found to see if the whole column needs processed can miss classes since the first
-			 * column might be new.
-			 */
-			sClass = oClasses.sSortColumn;
-			
-			if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses )
-			{
-				var nTds = _fnGetTdNodes( oSettings );
-		
-				/* Remove the old classes */
-				if ( oSettings.oFeatures.bDeferRender )
-				{
-					$(nTds).removeClass(sClass+'1 '+sClass+'2 '+sClass+'3');
-				}
-				else if ( nTds.length >= iColumns )
-				{
-					for ( i=0 ; i<iColumns ; i++ )
-					{
-						if ( nTds[i].className.indexOf(sClass+"1") != -1 )
-						{
-							for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-							{
-								nTds[(iColumns*j)+i].className = 
-									$.trim( nTds[(iColumns*j)+i].className.replace( sClass+"1", "" ) );
-							}
-						}
-						else if ( nTds[i].className.indexOf(sClass+"2") != -1 )
-						{
-							for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-							{
-								nTds[(iColumns*j)+i].className = 
-									$.trim( nTds[(iColumns*j)+i].className.replace( sClass+"2", "" ) );
-							}
-						}
-						else if ( nTds[i].className.indexOf(sClass+"3") != -1 )
-						{
-							for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-							{
-								nTds[(iColumns*j)+i].className = 
-									$.trim( nTds[(iColumns*j)+i].className.replace( " "+sClass+"3", "" ) );
-							}
-						}
-					}
-				}
-				
-				/* Add the new classes to the table */
-				var iClass = 1, iTargetCol;
-				for ( i=0 ; i<aaSort.length ; i++ )
-				{
-					iTargetCol = parseInt( aaSort[i][0], 10 );
-					for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-					{
-						nTds[(iColumns*j)+iTargetCol].className += " "+sClass+iClass;
-					}
-					
-					if ( iClass < 3 )
-					{
-						iClass++;
-					}
-				}
-			}
-		}
-		
-		
-		
-		/**
-		 * Save the state of a table in a cookie such that the page can be reloaded
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSaveState ( oSettings )
-		{
-			if ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying )
-			{
-				return;
-			}
-		
-			/* Store the interesting variables */
-			var i, iLen, bInfinite=oSettings.oScroll.bInfinite;
-			var oState = {
-				"iCreate":      new Date().getTime(),
-				"iStart":       (bInfinite ? 0 : oSettings._iDisplayStart),
-				"iEnd":         (bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd),
-				"iLength":      oSettings._iDisplayLength,
-				"aaSorting":    $.extend( true, [], oSettings.aaSorting ),
-				"oSearch":      $.extend( true, {}, oSettings.oPreviousSearch ),
-				"aoSearchCols": $.extend( true, [], oSettings.aoPreSearchCols ),
-				"abVisCols":    []
-			};
-		
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oState.abVisCols.push( oSettings.aoColumns[i].bVisible );
-			}
-		
-			_fnCallbackFire( oSettings, "aoStateSaveParams", 'stateSaveParams', [oSettings, oState] );
-			
-			oSettings.fnStateSave.call( oSettings.oInstance, oSettings, oState );
-		}
-		
-		
-		/**
-		 * Attempt to load a saved table state from a cookie
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} oInit DataTables init object so we can override settings
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnLoadState ( oSettings, oInit )
-		{
-			if ( !oSettings.oFeatures.bStateSave )
-			{
-				return;
-			}
-		
-			var oData = oSettings.fnStateLoad.call( oSettings.oInstance, oSettings );
-			if ( !oData )
-			{
-				return;
-			}
-			
-			/* Allow custom and plug-in manipulation functions to alter the saved data set and
-			 * cancelling of loading by returning false
-			 */
-			var abStateLoad = _fnCallbackFire( oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData] );
-			if ( $.inArray( false, abStateLoad ) !== -1 )
-			{
-				return;
-			}
-			
-			/* Store the saved state so it might be accessed at any time */
-			oSettings.oLoadedState = $.extend( true, {}, oData );
-			
-			/* Restore key features */
-			oSettings._iDisplayStart    = oData.iStart;
-			oSettings.iInitDisplayStart = oData.iStart;
-			oSettings._iDisplayEnd      = oData.iEnd;
-			oSettings._iDisplayLength   = oData.iLength;
-			oSettings.aaSorting         = oData.aaSorting.slice();
-			oSettings.saved_aaSorting   = oData.aaSorting.slice();
-			
-			/* Search filtering  */
-			$.extend( oSettings.oPreviousSearch, oData.oSearch );
-			$.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols );
-			
-			/* Column visibility state
-			 * Pass back visibiliy settings to the init handler, but to do not here override
-			 * the init object that the user might have passed in
-			 */
-			oInit.saved_aoColumns = [];
-			for ( var i=0 ; i<oData.abVisCols.length ; i++ )
-			{
-				oInit.saved_aoColumns[i] = {};
-				oInit.saved_aoColumns[i].bVisible = oData.abVisCols[i];
-			}
-		
-			_fnCallbackFire( oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData] );
-		}
-		
-		
-		/**
-		 * Create a new cookie with a value to store the state of a table
-		 *  @param {string} sName name of the cookie to create
-		 *  @param {string} sValue the value the cookie should take
-		 *  @param {int} iSecs duration of the cookie
-		 *  @param {string} sBaseName sName is made up of the base + file name - this is the base
-		 *  @param {function} fnCallback User definable function to modify the cookie
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCreateCookie ( sName, sValue, iSecs, sBaseName, fnCallback )
-		{
-			var date = new Date();
-			date.setTime( date.getTime()+(iSecs*1000) );
-			
-			/* 
-			 * Shocking but true - it would appear IE has major issues with having the path not having
-			 * a trailing slash on it. We need the cookie to be available based on the path, so we
-			 * have to append the file name to the cookie name. Appalling. Thanks to vex for adding the
-			 * patch to use at least some of the path
-			 */
-			var aParts = window.location.pathname.split('/');
-			var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase();
-			var sFullCookie, oData;
-			
-			if ( fnCallback !== null )
-			{
-				oData = (typeof $.parseJSON === 'function') ? 
-					$.parseJSON( sValue ) : eval( '('+sValue+')' );
-				sFullCookie = fnCallback( sNameFile, oData, date.toGMTString(),
-					aParts.join('/')+"/" );
-			}
-			else
-			{
-				sFullCookie = sNameFile + "=" + encodeURIComponent(sValue) +
-					"; expires=" + date.toGMTString() +"; path=" + aParts.join('/')+"/";
-			}
-			
-			/* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies
-			 * belonging to DataTables. This is FAR from bullet proof
-			 */
-			var sOldName="", iOldTime=9999999999999;
-			var iLength = _fnReadCookie( sNameFile )!==null ? document.cookie.length : 
-				sFullCookie.length + document.cookie.length;
-			
-			if ( iLength+10 > 4096 ) /* Magic 10 for padding */
-			{
-				var aCookies =document.cookie.split(';');
-				for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ )
-				{
-					if ( aCookies[i].indexOf( sBaseName ) != -1 )
-					{
-						/* It's a DataTables cookie, so eval it and check the time stamp */
-						var aSplitCookie = aCookies[i].split('=');
-						try { oData = eval( '('+decodeURIComponent(aSplitCookie[1])+')' ); }
-						catch( e ) { continue; }
-						
-						if ( oData.iCreate && oData.iCreate < iOldTime )
-						{
-							sOldName = aSplitCookie[0];
-							iOldTime = oData.iCreate;
-						}
-					}
-				}
-				
-				if ( sOldName !== "" )
-				{
-					document.cookie = sOldName+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+
-						aParts.join('/') + "/";
-				}
-			}
-			
-			document.cookie = sFullCookie;
-		}
-		
-		
-		/**
-		 * Read an old cookie to get a cookie with an old table state
-		 *  @param {string} sName name of the cookie to read
-		 *  @returns {string} contents of the cookie - or null if no cookie with that name found
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnReadCookie ( sName )
-		{
-			var
-				aParts = window.location.pathname.split('/'),
-				sNameEQ = sName + '_' + aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase() + '=',
-			 	sCookieContents = document.cookie.split(';');
-			
-			for( var i=0 ; i<sCookieContents.length ; i++ )
-			{
-				var c = sCookieContents[i];
-				
-				while (c.charAt(0)==' ')
-				{
-					c = c.substring(1,c.length);
-				}
-				
-				if (c.indexOf(sNameEQ) === 0)
-				{
-					return decodeURIComponent( c.substring(sNameEQ.length,c.length) );
-				}
-			}
-			return null;
-		}
-		
-		
-		
-		/**
-		 * Return the settings object for a particular table
-		 *  @param {node} nTable table we are using as a dataTable
-		 *  @returns {object} Settings object - or null if not found
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSettingsFromNode ( nTable )
-		{
-			for ( var i=0 ; i<DataTable.settings.length ; i++ )
-			{
-				if ( DataTable.settings[i].nTable === nTable )
-				{
-					return DataTable.settings[i];
-				}
-			}
-			
-			return null;
-		}
-		
-		
-		/**
-		 * Return an array with the TR nodes for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {array} TR array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetTrNodes ( oSettings )
-		{
-			var aNodes = [];
-			var aoData = oSettings.aoData;
-			for ( var i=0, iLen=aoData.length ; i<iLen ; i++ )
-			{
-				if ( aoData[i].nTr !== null )
-				{
-					aNodes.push( aoData[i].nTr );
-				}
-			}
-			return aNodes;
-		}
-		
-		
-		/**
-		 * Return an flat array with all TD nodes for the table, or row
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} [iIndividualRow] aoData index to get the nodes for - optional 
-		 *    if not given then the return array will contain all nodes for the table
-		 *  @returns {array} TD array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetTdNodes ( oSettings, iIndividualRow )
-		{
-			var anReturn = [];
-			var iCorrector;
-			var anTds;
-			var iRow, iRows=oSettings.aoData.length,
-				iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows;
-			
-			/* Allow the collection to be limited to just one row */
-			if ( iIndividualRow !== undefined )
-			{
-				iStart = iIndividualRow;
-				iEnd = iIndividualRow+1;
-			}
-		
-			for ( iRow=iStart ; iRow<iEnd ; iRow++ )
-			{
-				oData = oSettings.aoData[iRow];
-				if ( oData.nTr !== null )
-				{
-					/* get the TD child nodes - taking into account text etc nodes */
-					anTds = [];
-					for ( iColumn=0, iColumns=oData.nTr.childNodes.length ; iColumn<iColumns ; iColumn++ )
-					{
-						sNodeName = oData.nTr.childNodes[iColumn].nodeName.toLowerCase();
-						if ( sNodeName == 'td' || sNodeName == 'th' )
-						{
-							anTds.push( oData.nTr.childNodes[iColumn] );
-						}
-					}
-		
-					iCorrector = 0;
-					for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ )
-					{
-						if ( oSettings.aoColumns[iColumn].bVisible )
-						{
-							anReturn.push( anTds[iColumn-iCorrector] );
-						}
-						else
-						{
-							anReturn.push( oData._anHidden[iColumn] );
-							iCorrector++;
-						}
-					}
-				}
-			}
-		
-			return anReturn;
-		}
-		
-		
-		/**
-		 * Log an error message
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iLevel log error messages, or display them to the user
-		 *  @param {string} sMesg error message
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnLog( oSettings, iLevel, sMesg )
-		{
-			var sAlert = (oSettings===null) ?
-				"DataTables warning: "+sMesg :
-				"DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg;
-			
-			if ( iLevel === 0 )
-			{
-				if ( DataTable.ext.sErrMode == 'alert' )
-				{
-					alert( sAlert );
-				}
-				else
-				{
-					throw new Error(sAlert);
-				}
-				return;
-			}
-			else if ( window.console && console.log )
-			{
-				console.log( sAlert );
-			}
-		}
-		
-		
-		/**
-		 * See if a property is defined on one object, if so assign it to the other object
-		 *  @param {object} oRet target object
-		 *  @param {object} oSrc source object
-		 *  @param {string} sName property
-		 *  @param {string} [sMappedName] name to map too - optional, sName used if not given
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnMap( oRet, oSrc, sName, sMappedName )
-		{
-			if ( sMappedName === undefined )
-			{
-				sMappedName = sName;
-			}
-			if ( oSrc[sName] !== undefined )
-			{
-				oRet[sMappedName] = oSrc[sName];
-			}
-		}
-		
-		
-		/**
-		 * Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow
-		 * copy arrays. The reason we need to do this, is that we don't want to deep copy array
-		 * init values (such as aaSorting) since the dev wouldn't be able to override them, but
-		 * we do want to deep copy arrays.
-		 *  @param {object} oOut Object to extend
-		 *  @param {object} oExtender Object from which the properties will be applied to oOut
-		 *  @returns {object} oOut Reference, just for convenience - oOut === the return.
-		 *  @memberof DataTable#oApi
-		 *  @todo This doesn't take account of arrays inside the deep copied objects.
-		 */
-		function _fnExtend( oOut, oExtender )
-		{
-			for ( var prop in oExtender )
-			{
-				if ( oExtender.hasOwnProperty(prop) )
-				{
-					if ( typeof oInit[prop] === 'object' && $.isArray(oExtender[prop]) === false )
-					{
-						$.extend( true, oOut[prop], oExtender[prop] );
-					}
-					else
-					{
-						oOut[prop] = oExtender[prop];
-					}
-				}
-			}
-		
-			return oOut;
-		}
-		
-		
-		/**
-		 * Bind an event handers to allow a click or return key to activate the callback.
-		 * This is good for accessability since a return on the keyboard will have the
-		 * same effect as a click, if the element has focus.
-		 *  @param {element} n Element to bind the action to
-		 *  @param {object} oData Data object to pass to the triggered function
-		 *  @param {function} fn Callback function for when the event is triggered
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBindAction( n, oData, fn )
-		{
-			$(n)
-				.bind( 'click.DT', oData, function (e) {
-						n.blur(); // Remove focus outline for mouse users
-						fn(e);
-					} )
-				.bind( 'keypress.DT', oData, function (e){
-					if ( e.which === 13 ) {
-						fn(e);
-					} } )
-				.bind( 'selectstart.DT', function () {
-					/* Take the brutal approach to cancelling text selection */
-					return false;
-					} );
-		}
-		
-		
-		/**
-		 * Register a callback function. Easily allows a callback function to be added to
-		 * an array store of callback functions that can then all be called together.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sStore Name of the array storeage for the callbacks in oSettings
-		 *  @param {function} fn Function to be called back
-		 *  @param {string} sName Identifying name for the callback (i.e. a label)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCallbackReg( oSettings, sStore, fn, sName )
-		{
-			if ( fn )
-			{
-				oSettings[sStore].push( {
-					"fn": fn,
-					"sName": sName
-				} );
-			}
-		}
-		
-		
-		/**
-		 * Fire callback functions and trigger events. Note that the loop over the callback
-		 * array store is done backwards! Further note that you do not want to fire off triggers
-		 * in time sensitive applications (for example cell creation) as its slow.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sStore Name of the array storeage for the callbacks in oSettings
-		 *  @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger
-		 *    is fired
-		 *  @param {array} aArgs Array of arguments to pass to the callback function / trigger
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs )
-		{
-			var aoStore = oSettings[sStore];
-			var aRet =[];
-		
-			for ( var i=aoStore.length-1 ; i>=0 ; i-- )
-			{
-				aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) );
-			}
-		
-			if ( sTrigger !== null )
-			{
-				$(oSettings.oInstance).trigger(sTrigger, aArgs);
-			}
-		
-			return aRet;
-		}
-		
-		
-		/**
-		 * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other
-		 * library, then we use that as it is fast, safe and accurate. If the function isn't 
-		 * available then we need to built it ourselves - the insperation for this function comes
-		 * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is
-		 * not perfect and absolutely should not be used as a replacement to json2.js - but it does
-		 * do what we need, without requiring a dependency for DataTables.
-		 *  @param {object} o JSON object to be converted
-		 *  @returns {string} JSON string
-		 *  @memberof DataTable#oApi
-		 */
-		var _fnJsonString = (window.JSON) ? JSON.stringify : function( o )
-		{
-			/* Not an object or array */
-			var sType = typeof o;
-			if (sType !== "object" || o === null)
-			{
-				// simple data type
-				if (sType === "string")
-				{
-					o = '"'+o+'"';
-				}
-				return o+"";
-			}
-		
-			/* If object or array, need to recurse over it */
-			var
-				sProp, mValue,
-				json = [],
-				bArr = $.isArray(o);
-			
-			for (sProp in o)
-			{
-				mValue = o[sProp];
-				sType = typeof mValue;
-		
-				if (sType === "string")
-				{
-					mValue = '"'+mValue+'"';
-				}
-				else if (sType === "object" && mValue !== null)
-				{
-					mValue = _fnJsonString(mValue);
-				}
-		
-				json.push((bArr ? "" : '"'+sProp+'":') + mValue);
-			}
-		
-			return (bArr ? "[" : "{") + json + (bArr ? "]" : "}");
-		};
-		
-
-		
-		
-		/**
-		 * Perform a jQuery selector action on the table's TR elements (from the tbody) and
-		 * return the resulting jQuery object.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
-		 *    criterion ("applied") or all TR elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be 
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {object} jQuery object, filtered by the given selector.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Highlight every second row
-		 *      oTable.$('tr:odd').css('backgroundColor', 'blue');
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to rows with 'Webkit' in them, add a background colour and then
-		 *      // remove the filter, thus highlighting the 'Webkit' rows only.
-		 *      oTable.fnFilter('Webkit');
-		 *      oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue');
-		 *      oTable.fnFilter('');
-		 *    } );
-		 */
-		this.$ = function ( sSelector, oOpts )
-		{
-			var i, iLen, a = [], tr;
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var aoData = oSettings.aoData;
-			var aiDisplay = oSettings.aiDisplay;
-			var aiDisplayMaster = oSettings.aiDisplayMaster;
-		
-			if ( !oOpts )
-			{
-				oOpts = {};
-			}
-		
-			oOpts = $.extend( {}, {
-				"filter": "none", // applied
-				"order": "current", // "original"
-				"page": "all" // current
-			}, oOpts );
-		
-			// Current page implies that order=current and fitler=applied, since it is fairly
-			// senseless otherwise
-			if ( oOpts.page == 'current' )
-			{
-				for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ )
-				{
-					tr = aoData[ aiDisplay[i] ].nTr;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "current" && oOpts.filter == "none" )
-			{
-				for ( i=0, iLen=aiDisplayMaster.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ aiDisplayMaster[i] ].nTr;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "current" && oOpts.filter == "applied" )
-			{
-				for ( i=0, iLen=aiDisplay.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ aiDisplay[i] ].nTr;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "original" && oOpts.filter == "none" )
-			{
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ i ].nTr ;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "original" && oOpts.filter == "applied" )
-			{
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ i ].nTr;
-					if ( $.inArray( i, aiDisplay ) !== -1 && tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else
-			{
-				_fnLog( oSettings, 1, "Unknown selection options" );
-			}
-		
-			/* We need to filter on the TR elements and also 'find' in their descendants
-			 * to make the selector act like it would in a full table - so we need
-			 * to build both results and then combine them together
-			 */
-			var jqA = $(a);
-			var jqTRs = jqA.filter( sSelector );
-			var jqDescendants = jqA.find( sSelector );
-		
-			return $( [].concat($.makeArray(jqTRs), $.makeArray(jqDescendants)) );
-		};
-		
-		
-		/**
-		 * Almost identical to $ in operation, but in this case returns the data for the matched
-		 * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
-		 * rather than any decendents, so the data can be obtained for the row/cell. If matching
-		 * rows are found, the data returned is the original data array/object that was used to  
-		 * create the row (or a generated array if from a DOM source).
-		 *
-		 * This method is often useful incombination with $ where both functions are given the
-		 * same parameters and the array indexes will match identically.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select elements that meet the current filter
-		 *    criterion ("applied") or all elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the data in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be 
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {array} Data for the matched elements. If any elements, as a result of the
-		 *    selector, were not TR, TD or TH elements in the DataTable, they will have a null 
-		 *    entry in the array.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Get the data from the first row in the table
-		 *      var data = oTable._('tr:first');
-		 *
-		 *      // Do something useful with the data
-		 *      alert( "First cell is: "+data[0] );
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to 'Webkit' and get all data for 
-		 *      oTable.fnFilter('Webkit');
-		 *      var data = oTable._('tr', {"filter": "applied"});
-		 *      
-		 *      // Do something with the data
-		 *      alert( data.length+" rows matched the filter" );
-		 *    } );
-		 */
-		this._ = function ( sSelector, oOpts )
-		{
-			var aOut = [];
-			var i, iLen, iIndex;
-			var aTrs = this.$( sSelector, oOpts );
-		
-			for ( i=0, iLen=aTrs.length ; i<iLen ; i++ )
-			{
-				aOut.push( this.fnGetData(aTrs[i]) );
-			}
-		
-			return aOut;
-		};
-		
-		
-		/**
-		 * Add a single new row or multiple rows of data to the table. Please note
-		 * that this is suitable for client-side processing only - if you are using 
-		 * server-side processing (i.e. "bServerSide": true), then to add data, you
-		 * must add it to the data source, i.e. the server-side, through an Ajax call.
-		 *  @param {array|object} mData The data to be added to the table. This can be:
-		 *    <ul>
-		 *      <li>1D array of data - add a single row with the data provided</li>
-		 *      <li>2D array of arrays - add multiple rows in a single call</li>
-		 *      <li>object - data object when using <i>mDataProp</i></li>
-		 *      <li>array of objects - multiple data objects when using <i>mDataProp</i></li>
-		 *    </ul>
-		 *  @param {bool} [bRedraw=true] redraw the table or not
-		 *  @returns {array} An array of integers, representing the list of indexes in 
-		 *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to 
-		 *    the table.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    // Global var for counter
-		 *    var giCount = 2;
-		 *    
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable();
-		 *    } );
-		 *    
-		 *    function fnClickAddRow() {
-		 *      $('#example').dataTable().fnAddData( [
-		 *        giCount+".1",
-		 *        giCount+".2",
-		 *        giCount+".3",
-		 *        giCount+".4" ]
-		 *      );
-		 *        
-		 *      giCount++;
-		 *    }
-		 */
-		this.fnAddData = function( mData, bRedraw )
-		{
-			if ( mData.length === 0 )
-			{
-				return [];
-			}
-			
-			var aiReturn = [];
-			var iTest;
-			
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			/* Check if we want to add multiple rows or not */
-			if ( typeof mData[0] === "object" && mData[0] !== null )
-			{
-				for ( var i=0 ; i<mData.length ; i++ )
-				{
-					iTest = _fnAddData( oSettings, mData[i] );
-					if ( iTest == -1 )
-					{
-						return aiReturn;
-					}
-					aiReturn.push( iTest );
-				}
-			}
-			else
-			{
-				iTest = _fnAddData( oSettings, mData );
-				if ( iTest == -1 )
-				{
-					return aiReturn;
-				}
-				aiReturn.push( iTest );
-			}
-			
-			oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnReDraw( oSettings );
-			}
-			return aiReturn;
-		};
-		
-		
-		/**
-		 * This function will make DataTables recalculate the column sizes, based on the data 
-		 * contained in the table and the sizes applied to the columns (in the DOM, CSS or 
-		 * through the sWidth parameter). This can be useful when the width of the table's 
-		 * parent element changes (for example a window resize).
-		 *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *      
-		 *      $(window).bind('resize', function () {
-		 *        oTable.fnAdjustColumnSizing();
-		 *      } );
-		 *    } );
-		 */
-		this.fnAdjustColumnSizing = function ( bRedraw )
-		{
-			var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]);
-			_fnAdjustColumnSizing( oSettings );
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				this.fnDraw( false );
-			}
-			else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
-			{
-				/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
-				this.oApi._fnScrollDraw(oSettings);
-			}
-		};
-		
-		
-		/**
-		 * Quickly and simply clear a table
-		 *  @param {bool} [bRedraw=true] redraw the table or not
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
-		 *      oTable.fnClearTable();
-		 *    } );
-		 */
-		this.fnClearTable = function( bRedraw )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			_fnClearTable( oSettings );
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnDraw( oSettings );
-			}
-		};
-		
-		
-		/**
-		 * The exact opposite of 'opening' a row, this function will close any rows which 
-		 * are currently 'open'.
-		 *  @param {node} nTr the table row to 'close'
-		 *  @returns {int} 0 on success, or 1 if failed (can't find the row)
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *      
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *      
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnClose = function( nTr )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
-			{
-				if ( oSettings.aoOpenRows[i].nParent == nTr )
-				{
-					var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode;
-					if ( nTrParent )
-					{
-						/* Remove it if it is currently on display */
-						nTrParent.removeChild( oSettings.aoOpenRows[i].nTr );
-					}
-					oSettings.aoOpenRows.splice( i, 1 );
-					return 0;
-				}
-			}
-			return 1;
-		};
-		
-		
-		/**
-		 * Remove a row for the table
-		 *  @param {mixed} mTarget The index of the row from aoData to be deleted, or
-		 *    the TR element you want to delete
-		 *  @param {function|null} [fnCallBack] Callback function
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @returns {array} The row that was deleted
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Immediately remove the first row
-		 *      oTable.fnDeleteRow( 0 );
-		 *    } );
-		 */
-		this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var i, iLen, iAODataIndex;
-			
-			iAODataIndex = (typeof mTarget === 'object') ? 
-				_fnNodeToDataIndex(oSettings, mTarget) : mTarget;
-			
-			/* Return the data array from this row */
-			var oData = oSettings.aoData.splice( iAODataIndex, 1 );
-		
-			/* Update the _DT_RowIndex parameter */
-			for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoData[i].nTr !== null )
-				{
-					oSettings.aoData[i].nTr._DT_RowIndex = i;
-				}
-			}
-			
-			/* Remove the target row from the search array */
-			var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay );
-			oSettings.asDataSearch.splice( iDisplayIndex, 1 );
-			
-			/* Delete from the display arrays */
-			_fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex );
-			_fnDeleteIndex( oSettings.aiDisplay, iAODataIndex );
-			
-			/* If there is a user callback function - call it */
-			if ( typeof fnCallBack === "function" )
-			{
-				fnCallBack.call( this, oSettings, oData );
-			}
-			
-			/* Check for an 'overflow' they case for displaying the table */
-			if ( oSettings._iDisplayStart >= oSettings.fnRecordsDisplay() )
-			{
-				oSettings._iDisplayStart -= oSettings._iDisplayLength;
-				if ( oSettings._iDisplayStart < 0 )
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-			
-			return oData;
-		};
-		
-		
-		/**
-		 * Restore the table to it's original state in the DOM by removing all of DataTables 
-		 * enhancements, alterations to the DOM structure of the table and event listeners.
-		 *  @param {boolean} [bRemove=false] Completely remove the table from the DOM
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      // This example is fairly pointless in reality, but shows how fnDestroy can be used
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnDestroy();
-		 *    } );
-		 */
-		this.fnDestroy = function ( bRemove )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var nOrig = oSettings.nTableWrapper.parentNode;
-			var nBody = oSettings.nTBody;
-			var i, iLen;
-		
-			bRemove = (bRemove===undefined) ? false : true;
-			
-			/* Flag to note that the table is currently being destroyed - no action should be taken */
-			oSettings.bDestroying = true;
-			
-			/* Fire off the destroy callbacks for plug-ins etc */
-			_fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] );
-			
-			/* Restore hidden columns */
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible === false )
-				{
-					this.fnSetColumnVis( i, true );
-				}
-			}
-			
-			/* Blitz all DT events */
-			$(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT');
-			
-			/* If there is an 'empty' indicator row, remove it */
-			$('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove();
-			
-			/* When scrolling we had to break the table up - restore it */
-			if ( oSettings.nTable != oSettings.nTHead.parentNode )
-			{
-				$(oSettings.nTable).children('thead').remove();
-				oSettings.nTable.appendChild( oSettings.nTHead );
-			}
-			
-			if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode )
-			{
-				$(oSettings.nTable).children('tfoot').remove();
-				oSettings.nTable.appendChild( oSettings.nTFoot );
-			}
-			
-			/* Remove the DataTables generated nodes, events and classes */
-			oSettings.nTable.parentNode.removeChild( oSettings.nTable );
-			$(oSettings.nTableWrapper).remove();
-			
-			oSettings.aaSorting = [];
-			oSettings.aaSortingFixed = [];
-			_fnSortingClasses( oSettings );
-			
-			$(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') );
-			
-			$('th, td', oSettings.nTHead).removeClass( [
-				oSettings.oClasses.sSortable,
-				oSettings.oClasses.sSortableAsc,
-				oSettings.oClasses.sSortableDesc,
-				oSettings.oClasses.sSortableNone ].join(' ')
-			);
-			if ( oSettings.bJUI )
-			{
-				$('th span.'+oSettings.oClasses.sSortIcon
-					+ ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove();
-		
-				$('th, td', oSettings.nTHead).each( function () {
-					var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this);
-					var kids = jqWrapper.contents();
-					$(this).append( kids );
-					jqWrapper.remove();
-				} );
-			}
-			
-			/* Add the TR elements back into the table in their original order */
-			if ( !bRemove && oSettings.nTableReinsertBefore )
-			{
-				nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore );
-			}
-			else if ( !bRemove )
-			{
-				nOrig.appendChild( oSettings.nTable );
-			}
-		
-			for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoData[i].nTr !== null )
-				{
-					nBody.appendChild( oSettings.aoData[i].nTr );
-				}
-			}
-			
-			/* Restore the width of the original table */
-			if ( oSettings.oFeatures.bAutoWidth === true )
-			{
-			  oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth);
-			}
-			
-			/* If the were originally odd/even type classes - then we add them back here. Note
-			 * this is not fool proof (for example if not all rows as odd/even classes - but 
-			 * it's a good effort without getting carried away
-			 */
-			$(nBody).children('tr:even').addClass( oSettings.asDestroyStripes[0] );
-			$(nBody).children('tr:odd').addClass( oSettings.asDestroyStripes[1] );
-			
-			/* Remove the settings object from the settings array */
-			for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
-			{
-				if ( DataTable.settings[i] == oSettings )
-				{
-					DataTable.settings.splice( i, 1 );
-				}
-			}
-			
-			/* End it all */
-			oSettings = null;
-		};
-		
-		
-		/**
-		 * Redraw the table
-		 *  @param {bool} [bComplete=true] Re-filter and resort (if enabled) the table before the draw.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
-		 *      oTable.fnDraw();
-		 *    } );
-		 */
-		this.fnDraw = function( bComplete )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			if ( bComplete === false )
-			{
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-			else
-			{
-				_fnReDraw( oSettings );
-			}
-		};
-		
-		
-		/**
-		 * Filter the input based on data
-		 *  @param {string} sInput String to filter the table on
-		 *  @param {int|null} [iColumn] Column to limit filtering to
-		 *  @param {bool} [bRegex=false] Treat as regular expression or not
-		 *  @param {bool} [bSmart=true] Perform smart filtering or not
-		 *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
-		 *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Sometime later - filter...
-		 *      oTable.fnFilter( 'test string' );
-		 *    } );
-		 */
-		this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			if ( !oSettings.oFeatures.bFilter )
-			{
-				return;
-			}
-			
-			if ( bRegex === undefined || bRegex === null )
-			{
-				bRegex = false;
-			}
-			
-			if ( bSmart === undefined || bSmart === null )
-			{
-				bSmart = true;
-			}
-			
-			if ( bShowGlobal === undefined || bShowGlobal === null )
-			{
-				bShowGlobal = true;
-			}
-			
-			if ( bCaseInsensitive === undefined || bCaseInsensitive === null )
-			{
-				bCaseInsensitive = true;
-			}
-			
-			if ( iColumn === undefined || iColumn === null )
-			{
-				/* Global filter */
-				_fnFilterComplete( oSettings, {
-					"sSearch":sInput+"",
-					"bRegex": bRegex,
-					"bSmart": bSmart,
-					"bCaseInsensitive": bCaseInsensitive
-				}, 1 );
-				
-				if ( bShowGlobal && oSettings.aanFeatures.f )
-				{
-					var n = oSettings.aanFeatures.f;
-					for ( var i=0, iLen=n.length ; i<iLen ; i++ )
-					{
-						$(n[i]._DT_Input).val( sInput );
-					}
-				}
-			}
-			else
-			{
-				/* Single column filter */
-				$.extend( oSettings.aoPreSearchCols[ iColumn ], {
-					"sSearch": sInput+"",
-					"bRegex": bRegex,
-					"bSmart": bSmart,
-					"bCaseInsensitive": bCaseInsensitive
-				} );
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
-			}
-		};
-		
-		
-		/**
-		 * Get the data for the whole table, an individual row or an individual cell based on the 
-		 * provided parameters.
-		 *  @param {int|node} [mRow] A TR row node, TD/TH cell node or an integer. If given as
-		 *    a TR node then the data source for the whole row will be returned. If given as a
-		 *    TD/TH cell node then iCol will be automatically calculated and the data for the
-		 *    cell returned. If given as an integer, then this is treated as the aoData internal
-		 *    data index for the row (see fnGetPosition) and the data for that row used.
-		 *  @param {int} [iCol] Optional column index that you want the data of.
-		 *  @returns {array|object|string} If mRow is undefined, then the data for all rows is
-		 *    returned. If mRow is defined, just data for that row, and is iCol is
-		 *    defined, only data for the designated cell is returned.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    // Row data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('tr').click( function () {
-		 *        var data = oTable.fnGetData( this );
-		 *        // ... do something with the array / object of data for the row
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Individual cell data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('td').click( function () {
-		 *        var sData = oTable.fnGetData( this );
-		 *        alert( 'The cell clicked on had the value of '+sData );
-		 *      } );
-		 *    } );
-		 */
-		this.fnGetData = function( mRow, iCol )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			if ( mRow !== undefined )
-			{
-				var iRow = mRow;
-				if ( typeof mRow === 'object' )
-				{
-					var sNode = mRow.nodeName.toLowerCase();
-					if (sNode === "tr" )
-					{
-						iRow = _fnNodeToDataIndex(oSettings, mRow);
-					}
-					else if ( sNode === "td" )
-					{
-						iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode);
-						iCol = _fnNodeToColumnIndex( oSettings, iRow, mRow );
-					}
-				}
-		
-				if ( iCol !== undefined )
-				{
-					return _fnGetCellData( oSettings, iRow, iCol, '' );
-				}
-				return (oSettings.aoData[iRow]!==undefined) ?
-					oSettings.aoData[iRow]._aData : null;
-			}
-			return _fnGetDataMaster( oSettings );
-		};
-		
-		
-		/**
-		 * Get an array of the TR nodes that are used in the table's body. Note that you will 
-		 * typically want to use the '$' API method in preference to this as it is more 
-		 * flexible.
-		 *  @param {int} [iRow] Optional row index for the TR element you want
-		 *  @returns {array|node} If iRow is undefined, returns an array of all TR elements
-		 *    in the table's body, or iRow is defined, just the TR element requested.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Get the nodes from the table
-		 *      var nNodes = oTable.fnGetNodes( );
-		 *    } );
-		 */
-		this.fnGetNodes = function( iRow )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			if ( iRow !== undefined ) {
-				return (oSettings.aoData[iRow]!==undefined) ?
-					oSettings.aoData[iRow].nTr : null;
-			}
-			return _fnGetTrNodes( oSettings );
-		};
-		
-		
-		/**
-		 * Get the array indexes of a particular cell from it's DOM element
-		 * and column index including hidden columns
-		 *  @param {node} nNode this can either be a TR, TD or TH in the table's body
-		 *  @returns {int} If nNode is given as a TR, then a single index is returned, or
-		 *    if given as a cell, an array of [row index, column index (visible)] is given.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example tbody td').click( function () {
-		 *        // Get the position of the current data from the node
-		 *        var aPos = oTable.fnGetPosition( this );
-		 *        
-		 *        // Get the data array for this row
-		 *        var aData = oTable.fnGetData( aPos[0] );
-		 *        
-		 *        // Update the data array and return the value
-		 *        aData[ aPos[1] ] = 'clicked';
-		 *        this.innerHTML = 'clicked';
-		 *      } );
-		 *      
-		 *      // Init DataTables
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnGetPosition = function( nNode )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var sNodeName = nNode.nodeName.toUpperCase();
-			
-			if ( sNodeName == "TR" )
-			{
-				return _fnNodeToDataIndex(oSettings, nNode);
-			}
-			else if ( sNodeName == "TD" || sNodeName == "TH" )
-			{
-				var iDataIndex = _fnNodeToDataIndex( oSettings, nNode.parentNode );
-				var iColumnIndex = _fnNodeToColumnIndex( oSettings, iDataIndex, nNode );
-				return [ iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex ), iColumnIndex ];
-			}
-			return null;
-		};
-		
-		
-		/**
-		 * Check to see if a row is 'open' or not.
-		 *  @param {node} nTr the table row to check
-		 *  @returns {boolean} true if the row is currently open, false otherwise
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *      
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *      
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnIsOpen = function( nTr )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var aoOpenRows = oSettings.aoOpenRows;
-			
-			for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
-			{
-				if ( oSettings.aoOpenRows[i].nParent == nTr )
-				{
-					return true;
-				}
-			}
-			return false;
-		};
-		
-		
-		/**
-		 * This function will place a new row directly after a row which is currently 
-		 * on display on the page, with the HTML contents that is passed into the 
-		 * function. This can be used, for example, to ask for confirmation that a 
-		 * particular record should be deleted.
-		 *  @param {node} nTr The table row to 'open'
-		 *  @param {string|node|jQuery} mHtml The HTML to put into the row
-		 *  @param {string} sClass Class to give the new TD cell
-		 *  @returns {node} The row opened. Note that if the table row passed in as the
-		 *    first parameter, is not found in the table, this method will silently
-		 *    return.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *      
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *      
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnOpen = function( nTr, mHtml, sClass )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-		
-			/* Check that the row given is in the table */
-			var nTableRows = _fnGetTrNodes( oSettings );
-			if ( $.inArray(nTr, nTableRows) === -1 )
-			{
-				return;
-			}
-			
-			/* the old open one if there is one */
-			this.fnClose( nTr );
-			
-			var nNewRow = document.createElement("tr");
-			var nNewCell = document.createElement("td");
-			nNewRow.appendChild( nNewCell );
-			nNewCell.className = sClass;
-			nNewCell.colSpan = _fnVisbleColumns( oSettings );
-		
-			if (typeof mHtml === "string")
-			{
-				nNewCell.innerHTML = mHtml;
-			}
-			else
-			{
-				$(nNewCell).html( mHtml );
-			}
-		
-			/* If the nTr isn't on the page at the moment - then we don't insert at the moment */
-			var nTrs = $('tr', oSettings.nTBody);
-			if ( $.inArray(nTr, nTrs) != -1  )
-			{
-				$(nNewRow).insertAfter(nTr);
-			}
-			
-			oSettings.aoOpenRows.push( {
-				"nTr": nNewRow,
-				"nParent": nTr
-			} );
-			
-			return nNewRow;
-		};
-		
-		
-		/**
-		 * Change the pagination - provides the internal logic for pagination in a simple API 
-		 * function. With this function you can have a DataTables table go to the next, 
-		 * previous, first or last pages.
-		 *  @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
-		 *    or page number to jump to (integer), note that page 0 is the first page.
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnPageChange( 'next' );
-		 *    } );
-		 */
-		this.fnPageChange = function ( mAction, bRedraw )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			_fnPageChange( oSettings, mAction );
-			_fnCalculateEnd( oSettings );
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnDraw( oSettings );
-			}
-		};
-		
-		
-		/**
-		 * Show a particular column
-		 *  @param {int} iCol The column whose display should be changed
-		 *  @param {bool} bShow Show (true) or hide (false) the column
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Hide the second column after initialisation
-		 *      oTable.fnSetColumnVis( 1, false );
-		 *    } );
-		 */
-		this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var i, iLen;
-			var aoColumns = oSettings.aoColumns;
-			var aoData = oSettings.aoData;
-			var nTd, bAppend, iBefore;
-			
-			/* No point in doing anything if we are requesting what is already true */
-			if ( aoColumns[iCol].bVisible == bShow )
-			{
-				return;
-			}
-			
-			/* Show the column */
-			if ( bShow )
-			{
-				var iInsert = 0;
-				for ( i=0 ; i<iCol ; i++ )
-				{
-					if ( aoColumns[i].bVisible )
-					{
-						iInsert++;
-					}
-				}
-				
-				/* Need to decide if we should use appendChild or insertBefore */
-				bAppend = (iInsert >= _fnVisbleColumns( oSettings ));
-		
-				/* Which coloumn should we be inserting before? */
-				if ( !bAppend )
-				{
-					for ( i=iCol ; i<aoColumns.length ; i++ )
-					{
-						if ( aoColumns[i].bVisible )
-						{
-							iBefore = i;
-							break;
-						}
-					}
-				}
-		
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					if ( aoData[i].nTr !== null )
-					{
-						if ( bAppend )
-						{
-							aoData[i].nTr.appendChild( 
-								aoData[i]._anHidden[iCol]
-							);
-						}
-						else
-						{
-							aoData[i].nTr.insertBefore(
-								aoData[i]._anHidden[iCol], 
-								_fnGetTdNodes( oSettings, i )[iBefore] );
-						}
-					}
-				}
-			}
-			else
-			{
-				/* Remove a column from display */
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					if ( aoData[i].nTr !== null )
-					{
-						nTd = _fnGetTdNodes( oSettings, i )[iCol];
-						aoData[i]._anHidden[iCol] = nTd;
-						nTd.parentNode.removeChild( nTd );
-					}
-				}
-			}
-		
-			/* Clear to set the visible flag */
-			aoColumns[iCol].bVisible = bShow;
-		
-			/* Redraw the header and footer based on the new column visibility */
-			_fnDrawHead( oSettings, oSettings.aoHeader );
-			if ( oSettings.nTFoot )
-			{
-				_fnDrawHead( oSettings, oSettings.aoFooter );
-			}
-			
-			/* If there are any 'open' rows, then we need to alter the colspan for this col change */
-			for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ )
-			{
-				oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings );
-			}
-			
-			/* Do a redraw incase anything depending on the table columns needs it 
-			 * (built-in: scrolling) 
-			 */
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnAdjustColumnSizing( oSettings );
-				_fnDraw( oSettings );
-			}
-			
-			_fnSaveState( oSettings );
-		};
-		
-		
-		/**
-		 * Get the settings for a particular table for external manipulation
-		 *  @returns {object} DataTables settings object. See 
-		 *    {@link DataTable.models.oSettings}
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      var oSettings = oTable.fnSettings();
-		 *      
-		 *      // Show an example parameter from the settings
-		 *      alert( oSettings._iDisplayStart );
-		 *    } );
-		 */
-		this.fnSettings = function()
-		{
-			return _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-		};
-		
-		
-		/**
-		 * Sort the table by a particular column
-		 *  @param {int} iCol the data index to sort on. Note that this will not match the 
-		 *    'display index' if you have hidden data entries
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Sort immediately with columns 0 and 1
-		 *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
-		 *    } );
-		 */
-		this.fnSort = function( aaSort )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			oSettings.aaSorting = aaSort;
-			_fnSort( oSettings );
-		};
-		
-		
-		/**
-		 * Attach a sort listener to an element for a given column
-		 *  @param {node} nNode the element to attach the sort listener to
-		 *  @param {int} iColumn the column that a click on this node will sort on
-		 *  @param {function} [fnCallback] callback function when sort is run
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Sort on column 1, when 'sorter' is clicked on
-		 *      oTable.fnSortListener( document.getElementById('sorter'), 1 );
-		 *    } );
-		 */
-		this.fnSortListener = function( nNode, iColumn, fnCallback )
-		{
-			_fnSortAttachListener( _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ), nNode, iColumn,
-			 	fnCallback );
-		};
-		
-		
-		/**
-		 * Update a table cell or row - this method will accept either a single value to
-		 * update the cell with, an array of values with one element for each column or
-		 * an object in the same format as the original data source. The function is
-		 * self-referencing in order to make the multi column updates easier.
-		 *  @param {object|array|string} mData Data to update the cell/row with
-		 *  @param {node|int} mRow TR element you want to update or the aoData index
-		 *  @param {int} [iColumn] The column to update (not used of mData is an array or object)
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @param {bool} [bAction=true] Perform predraw actions or not
-		 *  @returns {int} 0 on success, 1 on error
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
-		 *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row
-		 *    } );
-		 */
-		this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var i, iLen, sDisplay;
-			var iRow = (typeof mRow === 'object') ? 
-				_fnNodeToDataIndex(oSettings, mRow) : mRow;
-			
-			if ( oSettings.__fnUpdateDeep === undefined && $.isArray(mData) && typeof mData === 'object' )
-			{
-				/* Array update - update the whole row */
-				oSettings.aoData[iRow]._aData = mData.slice();
-				
-				/* Flag to the function that we are recursing */
-				oSettings.__fnUpdateDeep = true;
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
-				}
-				oSettings.__fnUpdateDeep = undefined;
-			}
-			else if ( oSettings.__fnUpdateDeep === undefined && mData !== null && typeof mData === 'object' )
-			{
-				/* Object update - update the whole row - assume the developer gets the object right */
-				oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
-		
-				oSettings.__fnUpdateDeep = true;
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
-				}
-				oSettings.__fnUpdateDeep = undefined;
-			}
-			else
-			{
-				/* Individual cell update */
-				_fnSetCellData( oSettings, iRow, iColumn, mData );
-				sDisplay = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
-				
-				var oCol = oSettings.aoColumns[iColumn];
-				if ( oCol.fnRender !== null )
-				{
-					sDisplay = _fnRender( oSettings, iRow, iColumn );
-					if ( oCol.bUseRendered )
-					{
-						_fnSetCellData( oSettings, iRow, iColumn, sDisplay );
-					}
-				}
-				
-				if ( oSettings.aoData[iRow].nTr !== null )
-				{
-					/* Do the actual HTML update */
-					_fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay;
-				}
-			}
-			
-			/* Modify the search index for this row (strictly this is likely not needed, since fnReDraw
-			 * will rebuild the search array - however, the redraw might be disabled by the user)
-			 */
-			var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay );
-			oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow( oSettings, 
-				_fnGetRowData( oSettings, iRow, 'filter' ) );
-			
-			/* Perform pre-draw actions */
-			if ( bAction === undefined || bAction )
-			{
-				_fnAdjustColumnSizing( oSettings );
-			}
-			
-			/* Redraw the table */
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnReDraw( oSettings );
-			}
-			return 0;
-		};
-		
-		
-		/**
-		 * Provide a common method for plug-ins to check the version of DataTables being used, in order
-		 * to ensure compatibility.
-		 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
-		 *    formats "X" and "X.Y" are also acceptable.
-		 *  @returns {boolean} true if this version of DataTables is greater or equal to the required
-		 *    version, or false if this version of DataTales is not suitable
-		 *  @method
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      alert( oTable.fnVersionCheck( '1.9.0' ) );
-		 *    } );
-		 */
-		this.fnVersionCheck = DataTable.ext.fnVersionCheck;
-		
-		
-		/*
-		 * This is really a good bit rubbish this method of exposing the internal methods
-		 * publically... - To be fixed in 2.0 using methods on the prototype
-		 */
-		
-		
-		/**
-		 * Create a wrapper function for exporting an internal functions to an external API.
-		 *  @param {string} sFunc API function name
-		 *  @returns {function} wrapped function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnExternApiFunc (sFunc)
-		{
-			return function() {
-				var aArgs = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat( 
-					Array.prototype.slice.call(arguments) );
-				return DataTable.ext.oApi[sFunc].apply( this, aArgs );
-			};
-		}
-		
-		
-		/**
-		 * Reference to internal functions for use by plug-in developers. Note that these
-		 * methods are references to internal functions and are considered to be private.
-		 * If you use these methods, be aware that they are liable to change between versions
-		 * (check the upgrade notes).
-		 *  @namespace
-		 */
-		this.oApi = {
-			"_fnExternApiFunc": _fnExternApiFunc,
-			"_fnInitialise": _fnInitialise,
-			"_fnInitComplete": _fnInitComplete,
-			"_fnLanguageCompat": _fnLanguageCompat,
-			"_fnAddColumn": _fnAddColumn,
-			"_fnColumnOptions": _fnColumnOptions,
-			"_fnAddData": _fnAddData,
-			"_fnCreateTr": _fnCreateTr,
-			"_fnGatherData": _fnGatherData,
-			"_fnBuildHead": _fnBuildHead,
-			"_fnDrawHead": _fnDrawHead,
-			"_fnDraw": _fnDraw,
-			"_fnReDraw": _fnReDraw,
-			"_fnAjaxUpdate": _fnAjaxUpdate,
-			"_fnAjaxParameters": _fnAjaxParameters,
-			"_fnAjaxUpdateDraw": _fnAjaxUpdateDraw,
-			"_fnServerParams": _fnServerParams,
-			"_fnAddOptionsHtml": _fnAddOptionsHtml,
-			"_fnFeatureHtmlTable": _fnFeatureHtmlTable,
-			"_fnScrollDraw": _fnScrollDraw,
-			"_fnAdjustColumnSizing": _fnAdjustColumnSizing,
-			"_fnFeatureHtmlFilter": _fnFeatureHtmlFilter,
-			"_fnFilterComplete": _fnFilterComplete,
-			"_fnFilterCustom": _fnFilterCustom,
-			"_fnFilterColumn": _fnFilterColumn,
-			"_fnFilter": _fnFilter,
-			"_fnBuildSearchArray": _fnBuildSearchArray,
-			"_fnBuildSearchRow": _fnBuildSearchRow,
-			"_fnFilterCreateSearch": _fnFilterCreateSearch,
-			"_fnDataToSearch": _fnDataToSearch,
-			"_fnSort": _fnSort,
-			"_fnSortAttachListener": _fnSortAttachListener,
-			"_fnSortingClasses": _fnSortingClasses,
-			"_fnFeatureHtmlPaginate": _fnFeatureHtmlPaginate,
-			"_fnPageChange": _fnPageChange,
-			"_fnFeatureHtmlInfo": _fnFeatureHtmlInfo,
-			"_fnUpdateInfo": _fnUpdateInfo,
-			"_fnFeatureHtmlLength": _fnFeatureHtmlLength,
-			"_fnFeatureHtmlProcessing": _fnFeatureHtmlProcessing,
-			"_fnProcessingDisplay": _fnProcessingDisplay,
-			"_fnVisibleToColumnIndex": _fnVisibleToColumnIndex,
-			"_fnColumnIndexToVisible": _fnColumnIndexToVisible,
-			"_fnNodeToDataIndex": _fnNodeToDataIndex,
-			"_fnVisbleColumns": _fnVisbleColumns,
-			"_fnCalculateEnd": _fnCalculateEnd,
-			"_fnConvertToWidth": _fnConvertToWidth,
-			"_fnCalculateColumnWidths": _fnCalculateColumnWidths,
-			"_fnScrollingWidthAdjust": _fnScrollingWidthAdjust,
-			"_fnGetWidestNode": _fnGetWidestNode,
-			"_fnGetMaxLenString": _fnGetMaxLenString,
-			"_fnStringToCss": _fnStringToCss,
-			"_fnDetectType": _fnDetectType,
-			"_fnSettingsFromNode": _fnSettingsFromNode,
-			"_fnGetDataMaster": _fnGetDataMaster,
-			"_fnGetTrNodes": _fnGetTrNodes,
-			"_fnGetTdNodes": _fnGetTdNodes,
-			"_fnEscapeRegex": _fnEscapeRegex,
-			"_fnDeleteIndex": _fnDeleteIndex,
-			"_fnReOrderIndex": _fnReOrderIndex,
-			"_fnColumnOrdering": _fnColumnOrdering,
-			"_fnLog": _fnLog,
-			"_fnClearTable": _fnClearTable,
-			"_fnSaveState": _fnSaveState,
-			"_fnLoadState": _fnLoadState,
-			"_fnCreateCookie": _fnCreateCookie,
-			"_fnReadCookie": _fnReadCookie,
-			"_fnDetectHeader": _fnDetectHeader,
-			"_fnGetUniqueThs": _fnGetUniqueThs,
-			"_fnScrollBarWidth": _fnScrollBarWidth,
-			"_fnApplyToChildren": _fnApplyToChildren,
-			"_fnMap": _fnMap,
-			"_fnGetRowData": _fnGetRowData,
-			"_fnGetCellData": _fnGetCellData,
-			"_fnSetCellData": _fnSetCellData,
-			"_fnGetObjectDataFn": _fnGetObjectDataFn,
-			"_fnSetObjectDataFn": _fnSetObjectDataFn,
-			"_fnApplyColumnDefs": _fnApplyColumnDefs,
-			"_fnBindAction": _fnBindAction,
-			"_fnExtend": _fnExtend,
-			"_fnCallbackReg": _fnCallbackReg,
-			"_fnCallbackFire": _fnCallbackFire,
-			"_fnJsonString": _fnJsonString,
-			"_fnRender": _fnRender,
-			"_fnNodeToColumnIndex": _fnNodeToColumnIndex,
-			"_fnInfoMacros": _fnInfoMacros
-		};
-		
-		$.extend( DataTable.ext.oApi, this.oApi );
-		
-		for ( var sFunc in DataTable.ext.oApi )
-		{
-			if ( sFunc )
-			{
-				this[sFunc] = _fnExternApiFunc(sFunc);
-			}
-		}
-		
-		
-		var _that = this;
-		return this.each(function() {
-			
-			var i=0, iLen, j, jLen, k, kLen;
-			var sId = this.getAttribute( 'id' );
-			var bInitHandedOff = false;
-			var bUsePassedData = false;
-			
-			
-			/* Sanity check */
-			if ( this.nodeName.toLowerCase() != 'table' )
-			{
-				_fnLog( null, 0, "Attempted to initialise DataTables on a node which is not a "+
-					"table: "+this.nodeName );
-				return;
-			}
-			
-			/* Check to see if we are re-initialising a table */
-			for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
-			{
-				/* Base check on table node */
-				if ( DataTable.settings[i].nTable == this )
-				{
-					if ( oInit === undefined || oInit.bRetrieve )
-					{
-						return DataTable.settings[i].oInstance;
-					}
-					else if ( oInit.bDestroy )
-					{
-						DataTable.settings[i].oInstance.fnDestroy();
-						break;
-					}
-					else
-					{
-						_fnLog( DataTable.settings[i], 0, "Cannot reinitialise DataTable.\n\n"+
-							"To retrieve the DataTables object for this table, pass no arguments or see "+
-							"the docs for bRetrieve and bDestroy" );
-						return;
-					}
-				}
-				
-				/* If the element we are initialising has the same ID as a table which was previously
-				 * initialised, but the table nodes don't match (from before) then we destroy the old
-				 * instance by simply deleting it. This is under the assumption that the table has been
-				 * destroyed by other methods. Anyone using non-id selectors will need to do this manually
-				 */
-				if ( DataTable.settings[i].sTableId == this.id )
-				{
-					DataTable.settings.splice( i, 1 );
-					break;
-				}
-			}
-			
-			/* Ensure the table has an ID - required for accessibility */
-			if ( sId === null || sId === "" )
-			{
-				sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++);
-				this.id = sId;
-			}
-			
-			/* Create the settings object for this table and set some of the default parameters */
-			var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
-				"nTable":        this,
-				"oApi":          _that.oApi,
-				"oInit":         oInit,
-				"sDestroyWidth": $(this).width(),
-				"sInstance":     sId,
-				"sTableId":      sId
-			} );
-			DataTable.settings.push( oSettings );
-			
-			// Need to add the instance after the instance after the settings object has been added
-			// to the settings array, so we can self reference the table instance if more than one
-			oSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable();
-			
-			/* Setting up the initialisation object */
-			if ( !oInit )
-			{
-				oInit = {};
-			}
-			
-			// Backwards compatibility, before we apply all the defaults
-			if ( oInit.oLanguage )
-			{
-				_fnLanguageCompat( oInit.oLanguage );
-			}
-			
-			oInit = _fnExtend( $.extend(true, {}, DataTable.defaults), oInit );
-			
-			// Map the initialisation options onto the settings object
-			_fnMap( oSettings.oFeatures, oInit, "bPaginate" );
-			_fnMap( oSettings.oFeatures, oInit, "bLengthChange" );
-			_fnMap( oSettings.oFeatures, oInit, "bFilter" );
-			_fnMap( oSettings.oFeatures, oInit, "bSort" );
-			_fnMap( oSettings.oFeatures, oInit, "bInfo" );
-			_fnMap( oSettings.oFeatures, oInit, "bProcessing" );
-			_fnMap( oSettings.oFeatures, oInit, "bAutoWidth" );
-			_fnMap( oSettings.oFeatures, oInit, "bSortClasses" );
-			_fnMap( oSettings.oFeatures, oInit, "bServerSide" );
-			_fnMap( oSettings.oFeatures, oInit, "bDeferRender" );
-			_fnMap( oSettings.oScroll, oInit, "sScrollX", "sX" );
-			_fnMap( oSettings.oScroll, oInit, "sScrollXInner", "sXInner" );
-			_fnMap( oSettings.oScroll, oInit, "sScrollY", "sY" );
-			_fnMap( oSettings.oScroll, oInit, "bScrollCollapse", "bCollapse" );
-			_fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" );
-			_fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" );
-			_fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" );
-			_fnMap( oSettings, oInit, "asStripeClasses" );
-			_fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy
-			_fnMap( oSettings, oInit, "fnServerData" );
-			_fnMap( oSettings, oInit, "fnFormatNumber" );
-			_fnMap( oSettings, oInit, "sServerMethod" );
-			_fnMap( oSettings, oInit, "aaSorting" );
-			_fnMap( oSettings, oInit, "aaSortingFixed" );
-			_fnMap( oSettings, oInit, "aLengthMenu" );
-			_fnMap( oSettings, oInit, "sPaginationType" );
-			_fnMap( oSettings, oInit, "sAjaxSource" );
-			_fnMap( oSettings, oInit, "sAjaxDataProp" );
-			_fnMap( oSettings, oInit, "iCookieDuration" );
-			_fnMap( oSettings, oInit, "sCookiePrefix" );
-			_fnMap( oSettings, oInit, "sDom" );
-			_fnMap( oSettings, oInit, "bSortCellsTop" );
-			_fnMap( oSettings, oInit, "iTabIndex" );
-			_fnMap( oSettings, oInit, "oSearch", "oPreviousSearch" );
-			_fnMap( oSettings, oInit, "aoSearchCols", "aoPreSearchCols" );
-			_fnMap( oSettings, oInit, "iDisplayLength", "_iDisplayLength" );
-			_fnMap( oSettings, oInit, "bJQueryUI", "bJUI" );
-			_fnMap( oSettings, oInit, "fnCookieCallback" );
-			_fnMap( oSettings, oInit, "fnStateLoad" );
-			_fnMap( oSettings, oInit, "fnStateSave" );
-			_fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" );
-			
-			/* Callback functions which are array driven */
-			_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );
-			_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );
-			_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );
-			_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );
-			_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );
-			
-			if ( oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort &&
-				   oSettings.oFeatures.bSortClasses )
-			{
-				/* Enable sort classes for server-side processing. Safe to do it here, since server-side
-				 * processing must be enabled by the developer
-				 */
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'server_side_sort_classes' );
-			}
-			else if ( oSettings.oFeatures.bDeferRender )
-			{
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'defer_sort_classes' );
-			}
-			
-			if ( oInit.bJQueryUI )
-			{
-				/* Use the JUI classes object for display. You could clone the oStdClasses object if 
-				 * you want to have multiple tables with multiple independent classes 
-				 */
-				$.extend( oSettings.oClasses, DataTable.ext.oJUIClasses );
-				
-				if ( oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip" )
-				{
-					/* Set the DOM to use a layout suitable for jQuery UI's theming */
-					oSettings.sDom = '<"H"lfr>t<"F"ip>';
-				}
-			}
-			else
-			{
-				$.extend( oSettings.oClasses, DataTable.ext.oStdClasses );
-			}
-			$(this).addClass( oSettings.oClasses.sTable );
-			
-			/* Calculate the scroll bar width and cache it for use later on */
-			if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
-			{
-				oSettings.oScroll.iBarWidth = _fnScrollBarWidth();
-			}
-			
-			if ( oSettings.iInitDisplayStart === undefined )
-			{
-				/* Display start point, taking into account the save saving */
-				oSettings.iInitDisplayStart = oInit.iDisplayStart;
-				oSettings._iDisplayStart = oInit.iDisplayStart;
-			}
-			
-			/* Must be done after everything which can be overridden by a cookie! */
-			if ( oInit.bStateSave )
-			{
-				oSettings.oFeatures.bStateSave = true;
-				_fnLoadState( oSettings, oInit );
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
-			}
-			
-			if ( oInit.iDeferLoading !== null )
-			{
-				oSettings.bDeferLoading = true;
-				var tmp = $.isArray( oInit.iDeferLoading );
-				oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
-				oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
-			}
-			
-			if ( oInit.aaData !== null )
-			{
-				bUsePassedData = true;
-			}
-			
-			/* Language definitions */
-			if ( oInit.oLanguage.sUrl !== "" )
-			{
-				/* Get the language definitions from a file - because this Ajax call makes the language
-				 * get async to the remainder of this function we use bInitHandedOff to indicate that 
-				 * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
-				 */
-				oSettings.oLanguage.sUrl = oInit.oLanguage.sUrl;
-				$.getJSON( oSettings.oLanguage.sUrl, null, function( json ) {
-					_fnLanguageCompat( json );
-					$.extend( true, oSettings.oLanguage, oInit.oLanguage, json );
-					_fnInitialise( oSettings );
-				} );
-				bInitHandedOff = true;
-			}
-			else
-			{
-				$.extend( true, oSettings.oLanguage, oInit.oLanguage );
-			}
-			
-			
-			/*
-			 * Stripes
-			 */
-			if ( oInit.asStripeClasses === null )
-			{
-				oSettings.asStripeClasses =[
-					oSettings.oClasses.sStripeOdd,
-					oSettings.oClasses.sStripeEven
-				];
-			}
-			
-			/* Remove row stripe classes if they are already on the table row */
-			var bStripeRemove = false;
-			var anRows = $(this).children('tbody').children('tr');
-			for ( i=0, iLen=oSettings.asStripeClasses.length ; i<iLen ; i++ )
-			{
-				if ( anRows.filter(":lt(2)").hasClass( oSettings.asStripeClasses[i]) )
-				{
-					bStripeRemove = true;
-					break;
-				}
-			}
-					
-			if ( bStripeRemove )
-			{
-				/* Store the classes which we are about to remove so they can be readded on destroy */
-				oSettings.asDestroyStripes = [ '', '' ];
-				if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeOdd) )
-				{
-					oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeOdd+" ";
-				}
-				if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeEven) )
-				{
-					oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeEven;
-				}
-				if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeOdd) )
-				{
-					oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeOdd+" ";
-				}
-				if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeEven) )
-				{
-					oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeEven;
-				}
-				
-				anRows.removeClass( oSettings.asStripeClasses.join(' ') );
-			}
-			
-			
-			/*
-			 * Columns
-			 * See if we should load columns automatically or use defined ones
-			 */
-			var anThs = [];
-			var aoColumnsInit;
-			var nThead = this.getElementsByTagName('thead');
-			if ( nThead.length !== 0 )
-			{
-				_fnDetectHeader( oSettings.aoHeader, nThead[0] );
-				anThs = _fnGetUniqueThs( oSettings );
-			}
-			
-			/* If not given a column array, generate one with nulls */
-			if ( oInit.aoColumns === null )
-			{
-				aoColumnsInit = [];
-				for ( i=0, iLen=anThs.length ; i<iLen ; i++ )
-				{
-					aoColumnsInit.push( null );
-				}
-			}
-			else
-			{
-				aoColumnsInit = oInit.aoColumns;
-			}
-			
-			/* Add the columns */
-			for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
-			{
-				/* Short cut - use the loop to check if we have column visibility state to restore */
-				if ( oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen )
-				{
-					if ( aoColumnsInit[i] === null )
-					{
-						aoColumnsInit[i] = {};
-					}
-					aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible;
-				}
-				
-				_fnAddColumn( oSettings, anThs ? anThs[i] : null );
-			}
-			
-			/* Apply the column definitions */
-			_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
-				_fnColumnOptions( oSettings, iCol, oDef );
-			} );
-			
-			
-			/*
-			 * Sorting
-			 * Check the aaSorting array
-			 */
-			for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aaSorting[i][0] >= oSettings.aoColumns.length )
-				{
-					oSettings.aaSorting[i][0] = 0;
-				}
-				var oColumn = oSettings.aoColumns[ oSettings.aaSorting[i][0] ];
-				
-				/* Add a default sorting index */
-				if ( oSettings.aaSorting[i][2] === undefined )
-				{
-					oSettings.aaSorting[i][2] = 0;
-				}
-				
-				/* If aaSorting is not defined, then we use the first indicator in asSorting */
-				if ( oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined )
-				{
-					oSettings.aaSorting[i][1] = oColumn.asSorting[0];
-				}
-				
-				/* Set the current sorting index based on aoColumns.asSorting */
-				for ( j=0, jLen=oColumn.asSorting.length ; j<jLen ; j++ )
-				{
-					if ( oSettings.aaSorting[i][1] == oColumn.asSorting[j] )
-					{
-						oSettings.aaSorting[i][2] = j;
-						break;
-					}
-				}
-			}
-				
-			/* Do a first pass on the sorting classes (allows any size changes to be taken into
-			 * account, and also will apply sorting disabled classes if disabled
-			 */
-			_fnSortingClasses( oSettings );
-			
-			
-			/*
-			 * Final init
-			 * Cache the header, body and footer as required, creating them if needed
-			 */
-			
-			// Work around for Webkit bug 83867 - store the caption-side before removing from doc
-			var captions = $(this).children('caption').each( function () {
-				this._captionSide = $(this).css('caption-side');
-			} );
-			
-			var thead = $(this).children('thead');
-			if ( thead.length === 0 )
-			{
-				thead = [ document.createElement( 'thead' ) ];
-				this.appendChild( thead[0] );
-			}
-			oSettings.nTHead = thead[0];
-			
-			var tbody = $(this).children('tbody');
-			if ( tbody.length === 0 )
-			{
-				tbody = [ document.createElement( 'tbody' ) ];
-				this.appendChild( tbody[0] );
-			}
-			oSettings.nTBody = tbody[0];
-			oSettings.nTBody.setAttribute( "role", "alert" );
-			oSettings.nTBody.setAttribute( "aria-live", "polite" );
-			oSettings.nTBody.setAttribute( "aria-relevant", "all" );
-			
-			var tfoot = $(this).children('tfoot');
-			if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") )
-			{
-				// If we are a scrolling table, and no footer has been given, then we need to create
-				// a tfoot element for the caption element to be appended to
-				tfoot = [ document.createElement( 'tfoot' ) ];
-				this.appendChild( tfoot[0] );
-			}
-			
-			if ( tfoot.length > 0 )
-			{
-				oSettings.nTFoot = tfoot[0];
-				_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
-			}
-			
-			/* Check if there is data passing into the constructor */
-			if ( bUsePassedData )
-			{
-				for ( i=0 ; i<oInit.aaData.length ; i++ )
-				{
-					_fnAddData( oSettings, oInit.aaData[ i ] );
-				}
-			}
-			else
-			{
-				/* Grab the data from the page */
-				_fnGatherData( oSettings );
-			}
-			
-			/* Copy the data index array */
-			oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-			/* Initialisation complete - table can be drawn */
-			oSettings.bInitialised = true;
-			
-			/* Check if we need to initialise the table (it might not have been handed off to the
-			 * language processor)
-			 */
-			if ( bInitHandedOff === false )
-			{
-				_fnInitialise( oSettings );
-			}
-		} );
-	};
-
-	
-	
-	/**
-	 * Provide a common method for plug-ins to check the version of DataTables being used, in order
-	 * to ensure compatibility.
-	 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
-	 *    formats "X" and "X.Y" are also acceptable.
-	 *  @returns {boolean} true if this version of DataTables is greater or equal to the required
-	 *    version, or false if this version of DataTales is not suitable
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    alert( $.fn.dataTable.fnVersionCheck( '1.9.0' ) );
-	 */
-	DataTable.fnVersionCheck = function( sVersion )
-	{
-		/* This is cheap, but effective */
-		var fnZPad = function (Zpad, count)
-		{
-			while(Zpad.length < count) {
-				Zpad += '0';
-			}
-			return Zpad;
-		};
-		var aThis = DataTable.ext.sVersion.split('.');
-		var aThat = sVersion.split('.');
-		var sThis = '', sThat = '';
-		
-		for ( var i=0, iLen=aThat.length ; i<iLen ; i++ )
-		{
-			sThis += fnZPad( aThis[i], 3 );
-			sThat += fnZPad( aThat[i], 3 );
-		}
-		
-		return parseInt(sThis, 10) >= parseInt(sThat, 10);
-	};
-	
-	
-	/**
-	 * Check if a TABLE node is a DataTable table already or not.
-	 *  @param {node} nTable The TABLE node to check if it is a DataTable or not (note that other
-	 *    node types can be passed in, but will always return false).
-	 *  @returns {boolean} true the table given is a DataTable, or false otherwise
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    var ex = document.getElementById('example');
-	 *    if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) {
-	 *      $(ex).dataTable();
-	 *    }
-	 */
-	DataTable.fnIsDataTable = function ( nTable )
-	{
-		var o = DataTable.settings;
-	
-		for ( var i=0 ; i<o.length ; i++ )
-		{
-			if ( o[i].nTable === nTable || o[i].nScrollHead === nTable || o[i].nScrollFoot === nTable )
-			{
-				return true;
-			}
-		}
-	
-		return false;
-	};
-	
-	
-	/**
-	 * Get all DataTable tables that have been initialised - optionally you can select to
-	 * get only currently visible tables.
-	 *  @param {boolean} [bVisible=false] Flag to indicate if you want all (default) or 
-	 *    visible tables only.
-	 *  @returns {array} Array of TABLE nodes (not DataTable instances) which are DataTables
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    var table = $.fn.dataTable.fnTables(true);
-	 *    if ( table.length > 0 ) {
-	 *      $(table).dataTable().fnAdjustColumnSizing();
-	 *    }
-	 */
-	DataTable.fnTables = function ( bVisible )
-	{
-		var out = [];
-	
-		jQuery.each( DataTable.settings, function (i, o) {
-			if ( !bVisible || (bVisible === true && $(o.nTable).is(':visible')) )
-			{
-				out.push( o.nTable );
-			}
-		} );
-	
-		return out;
-	};
-	
-
-	/**
-	 * Version string for plug-ins to check compatibility. Allowed format is
-	 * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and
-	 * e are optional
-	 *  @member
-	 *  @type string
-	 *  @default Version number
-	 */
-	DataTable.version = "1.9.2";
-
-	/**
-	 * Private data store, containing all of the settings objects that are created for the
-	 * tables on a given page.
-	 * 
-	 * Note that the <i>DataTable.settings</i> object is aliased to <i>jQuery.fn.dataTableExt</i> 
-	 * through which it may be accessed and manipulated, or <i>jQuery.fn.dataTable.settings</i>.
-	 *  @member
-	 *  @type array
-	 *  @default []
-	 *  @private
-	 */
-	DataTable.settings = [];
-
-	/**
-	 * Object models container, for the various models that DataTables has available
-	 * to it. These models define the objects that are used to hold the active state 
-	 * and configuration of the table.
-	 *  @namespace
-	 */
-	DataTable.models = {};
-	
-	
-	/**
-	 * DataTables extension options and plug-ins. This namespace acts as a collection "area"
-	 * for plug-ins that can be used to extend the default DataTables behaviour - indeed many
-	 * of the build in methods use this method to provide their own capabilities (sorting methods
-	 * for example).
-	 * 
-	 * Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed
-	 * and modified by plug-ins.
-	 *  @namespace
-	 */
-	DataTable.models.ext = {
-		/**
-		 * Plug-in filtering functions - this method of filtering is complimentary to the default
-		 * type based filtering, and a lot more comprehensive as it allows you complete control
-		 * over the filtering logic. Each element in this array is a function (parameters
-		 * described below) that is called for every row in the table, and your logic decides if
-		 * it should be included in the filtered data set or not.
-		 *   <ul>
-		 *     <li>
-		 *       Function input parameters:
-		 *       <ul>
-		 *         <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-		 *         <li>{array|object} Data for the row to be processed (same as the original format
-		 *           that was passed in as the data source, or an array from a DOM data source</li>
-		 *         <li>{int} Row index in aoData ({@link DataTable.models.oSettings.aoData}), which can
-		 *           be useful to retrieve the TR element if you need DOM interaction.</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{boolean} Include the row in the filtered result set (true) or not (false)</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 *
-		 *  @example
-		 *    // The following example shows custom filtering being applied to the fourth column (i.e.
-		 *    // the aData[3] index) based on two input values from the end-user, matching the data in 
-		 *    // a certain range.
-		 *    $.fn.dataTableExt.afnFiltering.push(
-		 *      function( oSettings, aData, iDataIndex ) {
-		 *        var iMin = document.getElementById('min').value * 1;
-		 *        var iMax = document.getElementById('max').value * 1;
-		 *        var iVersion = aData[3] == "-" ? 0 : aData[3]*1;
-		 *        if ( iMin == "" && iMax == "" ) {
-		 *          return true;
-		 *        }
-		 *        else if ( iMin == "" && iVersion < iMax ) {
-		 *          return true;
-		 *        }
-		 *        else if ( iMin < iVersion && "" == iMax ) {
-		 *          return true;
-		 *        }
-		 *        else if ( iMin < iVersion && iVersion < iMax ) {
-		 *          return true;
-		 *        }
-		 *        return false;
-		 *      }
-		 *    );
-		 */
-		"afnFiltering": [],
-	
-	
-		/**
-		 * Plug-in sorting functions - this method of sorting is complimentary to the default type
-		 * based sorting that DataTables does automatically, allowing much greater control over the
-		 * the data that is being used to sort a column. This is useful if you want to do sorting
-		 * based on live data (for example the contents of an 'input' element) rather than just the
-		 * static string that DataTables knows of. The way these plug-ins work is that you create
-		 * an array of the values you wish to be sorted for the column in question and then return
-		 * that array. Which pre-sorting function is run here depends on the sSortDataType parameter
-		 * that is used for the column (if any). This is the corollary of <i>ofnSearch</i> for sort 
-		 * data.
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-	     *         <li>{int} Target column index</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{array} Data for the column to be sorted upon</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  
-		 * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for
-		 * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when
-		 * used as a function will give you a 'type' (sorting, filtering etc) that you can use to 
-		 * prepare the data as required for the different types. As such, this method is deprecated.
-		 *  @type array
-		 *  @default []
-		 *  @deprecated
-		 *
-		 *  @example
-		 *    // Updating the cached sorting information with user entered values in HTML input elements
-		 *    jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn )
-		 *    {
-		 *      var aData = [];
-		 *      $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
-		 *        aData.push( this.value );
-		 *      } );
-		 *      return aData;
-		 *    }
-		 */
-		"afnSortData": [],
-	
-	
-		/**
-		 * Feature plug-ins - This is an array of objects which describe the feature plug-ins that are
-		 * available to DataTables. These feature plug-ins are accessible through the sDom initialisation
-		 * option. As such, each feature plug-in must describe a function that is used to initialise
-		 * itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name
-		 * of the feature (sFeature). Thus the objects attached to this method must provide:
-		 *   <ul>
-		 *     <li>{function} fnInit Initialisation of the plug-in
-		 *       <ul>
-	     *         <li>
-	     *           Function input parameters:
-	     *           <ul>
-		 *             <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-	     *           </ul>
-	     *         </li>
-		 *         <li>
-		 *           Function return:
-		 *           <ul>
-		 *             <li>{node|null} The element which contains your feature. Note that the return
-		 *                may also be void if your plug-in does not require to inject any DOM elements 
-		 *                into DataTables control (sDom) - for example this might be useful when 
-		 *                developing a plug-in which allows table control via keyboard entry.</li>
-		 *           </ul>
-		 *         </il>
-		 *       </ul>
-		 *     </li>
-		 *     <li>{character} cFeature Character that will be matched in sDom - case sensitive</li>
-		 *     <li>{string} sFeature Feature name</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 * 
-		 *  @example
-		 *    // How TableTools initialises itself.
-		 *    $.fn.dataTableExt.aoFeatures.push( {
-		 *      "fnInit": function( oSettings ) {
-		 *        return new TableTools( { "oDTSettings": oSettings } );
-		 *      },
-		 *      "cFeature": "T",
-		 *      "sFeature": "TableTools"
-		 *    } );
-		 */
-		"aoFeatures": [],
-	
-	
-		/**
-		 * Type detection plug-in functions - DataTables utilises types to define how sorting and
-		 * filtering behave, and types can be either  be defined by the developer (sType for the
-		 * column) or they can be automatically detected by the methods in this array. The functions
-		 * defined in the array are quite simple, taking a single parameter (the data to analyse) 
-		 * and returning the type if it is a known type, or null otherwise.
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{*} Data from the column cell to be analysed</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{string|null} Data type detected, or null if unknown (and thus pass it
-		 *           on to the other type detection functions.</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 *  
-		 *  @example
-		 *    // Currency type detection plug-in:
-		 *    jQuery.fn.dataTableExt.aTypes.push(
-		 *      function ( sData ) {
-		 *        var sValidChars = "0123456789.-";
-		 *        var Char;
-		 *        
-		 *        // Check the numeric part
-		 *        for ( i=1 ; i<sData.length ; i++ ) {
-		 *          Char = sData.charAt(i); 
-		 *          if (sValidChars.indexOf(Char) == -1) {
-		 *            return null;
-		 *          }
-		 *        }
-		 *        
-		 *        // Check prefixed by currency
-		 *        if ( sData.charAt(0) == '$' || sData.charAt(0) == '&pound;' ) {
-		 *          return 'currency';
-		 *        }
-		 *        return null;
-		 *      }
-		 *    );
-		 */
-		"aTypes": [],
-	
-	
-		/**
-		 * Provide a common method for plug-ins to check the version of DataTables being used, 
-		 * in order to ensure compatibility.
-		 *  @type function
-		 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note 
-		 *    that the formats "X" and "X.Y" are also acceptable.
-		 *  @returns {boolean} true if this version of DataTables is greater or equal to the 
-		 *    required version, or false if this version of DataTales is not suitable
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      alert( oTable.fnVersionCheck( '1.9.0' ) );
-		 *    } );
-		 */
-		"fnVersionCheck": DataTable.fnVersionCheck,
-	
-	
-		/**
-		 * Index for what 'this' index API functions should use
-		 *  @type int
-		 *  @default 0
-		 */
-		"iApiIndex": 0,
-	
-	
-		/**
-		 * Pre-processing of filtering data plug-ins - When you assign the sType for a column
-		 * (or have it automatically detected for you by DataTables or a type detection plug-in), 
-		 * you will typically be using this for custom sorting, but it can also be used to provide 
-		 * custom filtering by allowing you to pre-processing the data and returning the data in
-		 * the format that should be filtered upon. This is done by adding functions this object 
-		 * with a parameter name which matches the sType for that target column. This is the
-		 * corollary of <i>afnSortData</i> for filtering data.
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{*} Data from the column cell to be prepared for filtering</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{string|null} Formatted string that will be used for the filtering.</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 * 
-		 * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for
-		 * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when
-		 * used as a function will give you a 'type' (sorting, filtering etc) that you can use to 
-		 * prepare the data as required for the different types. As such, this method is deprecated.
-		 *  @type object
-		 *  @default {}
-		 *  @deprecated
-		 *
-		 *  @example
-		 *    $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) {
-		 *      return sData.replace(/\n/g," ").replace( /<.*?>/g, "" );
-		 *    }
-		 */
-		"ofnSearch": {},
-	
-	
-		/**
-		 * Container for all private functions in DataTables so they can be exposed externally
-		 *  @type object
-		 *  @default {}
-		 */
-		"oApi": {},
-	
-	
-		/**
-		 * Storage for the various classes that DataTables uses
-		 *  @type object
-		 *  @default {}
-		 */
-		"oStdClasses": {},
-		
-	
-		/**
-		 * Storage for the various classes that DataTables uses - jQuery UI suitable
-		 *  @type object
-		 *  @default {}
-		 */
-		"oJUIClasses": {},
-	
-	
-		/**
-		 * Pagination plug-in methods - The style and controls of the pagination can significantly 
-		 * impact on how the end user interacts with the data in your table, and DataTables allows 
-		 * the addition of pagination controls by extending this object, which can then be enabled
-		 * through the <i>sPaginationType</i> initialisation parameter. Each pagination type that
-		 * is added is an object (the property name of which is what <i>sPaginationType</i> refers
-		 * to) that has two properties, both methods that are used by DataTables to update the
-		 * control's state.
-		 *   <ul>
-		 *     <li>
-		 *       fnInit -  Initialisation of the paging controls. Called only during initialisation 
-		 *         of the table. It is expected that this function will add the required DOM elements 
-		 *         to the page for the paging controls to work. The element pointer 
-		 *         'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging 
-		 *         controls (note that this is a 2D array to allow for multiple instances of each 
-		 *         DataTables DOM element). It is suggested that you add the controls to this element 
-		 *         as children
-		 *       <ul>
-	     *         <li>
-	     *           Function input parameters:
-	     *           <ul>
-		 *             <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-		 *             <li>{node} Container into which the pagination controls must be inserted</li>
-		 *             <li>{function} Draw callback function - whenever the controls cause a page
-		 *               change, this method must be called to redraw the table.</li>
-	     *           </ul>
-	     *         </li>
-		 *         <li>
-		 *           Function return:
-		 *           <ul>
-		 *             <li>No return required</li>
-		 *           </ul>
-		 *         </il>
-		 *       </ul>
-		 *     </il>
-		 *     <li>
-		 *       fnInit -  This function is called whenever the paging status of the table changes and is
-		 *         typically used to update classes and/or text of the paging controls to reflex the new 
-		 *         status.
-		 *       <ul>
-	     *         <li>
-	     *           Function input parameters:
-	     *           <ul>
-		 *             <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-		 *             <li>{function} Draw callback function - in case you need to redraw the table again
-		 *               or attach new event listeners</li>
-	     *           </ul>
-	     *         </li>
-		 *         <li>
-		 *           Function return:
-		 *           <ul>
-		 *             <li>No return required</li>
-		 *           </ul>
-		 *         </il>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type object
-		 *  @default {}
-		 *
-		 *  @example
-		 *    $.fn.dataTableExt.oPagination.four_button = {
-		 *      "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) {
-		 *        nFirst = document.createElement( 'span' );
-		 *        nPrevious = document.createElement( 'span' );
-		 *        nNext = document.createElement( 'span' );
-		 *        nLast = document.createElement( 'span' );
-		 *        
-		 *        nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) );
-		 *        nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) );
-		 *        nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) );
-		 *        nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) );
-		 *        
-		 *        nFirst.className = "paginate_button first";
-		 *        nPrevious.className = "paginate_button previous";
-		 *        nNext.className="paginate_button next";
-		 *        nLast.className = "paginate_button last";
-		 *        
-		 *        nPaging.appendChild( nFirst );
-		 *        nPaging.appendChild( nPrevious );
-		 *        nPaging.appendChild( nNext );
-		 *        nPaging.appendChild( nLast );
-		 *        
-		 *        $(nFirst).click( function () {
-		 *          oSettings.oApi._fnPageChange( oSettings, "first" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nPrevious).click( function() {
-		 *          oSettings.oApi._fnPageChange( oSettings, "previous" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nNext).click( function() {
-		 *          oSettings.oApi._fnPageChange( oSettings, "next" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nLast).click( function() {
-		 *          oSettings.oApi._fnPageChange( oSettings, "last" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nFirst).bind( 'selectstart', function () { return false; } );
-		 *        $(nPrevious).bind( 'selectstart', function () { return false; } );
-		 *        $(nNext).bind( 'selectstart', function () { return false; } );
-		 *        $(nLast).bind( 'selectstart', function () { return false; } );
-		 *      },
-		 *      
-		 *      "fnUpdate": function ( oSettings, fnCallbackDraw ) {
-		 *        if ( !oSettings.aanFeatures.p ) {
-		 *          return;
-		 *        }
-		 *        
-		 *        // Loop over each instance of the pager
-		 *        var an = oSettings.aanFeatures.p;
-		 *        for ( var i=0, iLen=an.length ; i<iLen ; i++ ) {
-		 *          var buttons = an[i].getElementsByTagName('span');
-		 *          if ( oSettings._iDisplayStart === 0 ) {
-		 *            buttons[0].className = "paginate_disabled_previous";
-		 *            buttons[1].className = "paginate_disabled_previous";
-		 *          }
-		 *          else {
-		 *            buttons[0].className = "paginate_enabled_previous";
-		 *            buttons[1].className = "paginate_enabled_previous";
-		 *          }
-		 *          
-		 *          if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) {
-		 *            buttons[2].className = "paginate_disabled_next";
-		 *            buttons[3].className = "paginate_disabled_next";
-		 *          }
-		 *          else {
-		 *            buttons[2].className = "paginate_enabled_next";
-		 *            buttons[3].className = "paginate_enabled_next";
-		 *          }
-		 *        }
-		 *      }
-		 *    };
-		 */
-		"oPagination": {},
-	
-	
-		/**
-		 * Sorting plug-in methods - Sorting in DataTables is based on the detected type of the
-		 * data column (you can add your own type detection functions, or override automatic 
-		 * detection using sType). With this specific type given to the column, DataTables will 
-		 * apply the required sort from the functions in the object. Each sort type must provide
-		 * two mandatory methods, one each for ascending and descending sorting, and can optionally
-		 * provide a pre-formatting method that will help speed up sorting by allowing DataTables
-		 * to pre-format the sort data only once (rather than every time the actual sort functions
-		 * are run). The two sorting functions are typical Javascript sort methods:
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{*} Data to compare to the second parameter</li>
-		 *         <li>{*} Data to compare to the first parameter</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{int} Sorting match: <0 if first parameter should be sorted lower than
-		 *           the second parameter, ===0 if the two parameters are equal and >0 if
-		 *           the first parameter should be sorted height than the second parameter.</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type object
-		 *  @default {}
-		 *
-		 *  @example
-		 *    // Case-sensitive string sorting, with no pre-formatting method
-		 *    $.extend( $.fn.dataTableExt.oSort, {
-		 *      "string-case-asc": function(x,y) {
-		 *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		 *      },
-		 *      "string-case-desc": function(x,y) {
-		 *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		 *      }
-		 *    } );
-		 *
-		 *  @example
-		 *    // Case-insensitive string sorting, with pre-formatting
-		 *    $.extend( $.fn.dataTableExt.oSort, {
-		 *      "string-pre": function(x) {
-		 *        return x.toLowerCase();
-		 *      },
-		 *      "string-asc": function(x,y) {
-		 *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		 *      },
-		 *      "string-desc": function(x,y) {
-		 *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		 *      }
-		 *    } );
-		 */
-		"oSort": {},
-	
-	
-		/**
-		 * Version string for plug-ins to check compatibility. Allowed format is
-		 * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and
-		 * e are optional
-		 *  @type string
-		 *  @default Version number
-		 */
-		"sVersion": DataTable.version,
-	
-	
-		/**
-		 * How should DataTables report an error. Can take the value 'alert' or 'throw'
-		 *  @type string
-		 *  @default alert
-		 */
-		"sErrMode": "alert",
-	
-	
-		/**
-		 * Store information for DataTables to access globally about other instances
-		 *  @namespace
-		 *  @private
-		 */
-		"_oExternConfig": {
-			/* int:iNextUnique - next unique number for an instance */
-			"iNextUnique": 0
-		}
-	};
-	
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * search information for the global filter and individual column filters.
-	 *  @namespace
-	 */
-	DataTable.models.oSearch = {
-		/**
-		 * Flag to indicate if the filtering should be case insensitive or not
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bCaseInsensitive": true,
-	
-		/**
-		 * Applied search term
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sSearch": "",
-	
-		/**
-		 * Flag to indicate if the search term should be interpreted as a
-		 * regular expression (true) or not (false) and therefore and special
-		 * regex characters escaped.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bRegex": false,
-	
-		/**
-		 * Flag to indicate if DataTables is to use its smart filtering or not.
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bSmart": true
-	};
-	
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * each individual row. This is the object format used for the settings 
-	 * aoData array.
-	 *  @namespace
-	 */
-	DataTable.models.oRow = {
-		/**
-		 * TR element for the row
-		 *  @type node
-		 *  @default null
-		 */
-		"nTr": null,
-	
-		/**
-		 * Data object from the original data source for the row. This is either
-		 * an array if using the traditional form of DataTables, or an object if
-		 * using mDataProp options. The exact type will depend on the passed in
-		 * data from the data source, or will be an array if using DOM a data 
-		 * source.
-		 *  @type array|object
-		 *  @default []
-		 */
-		"_aData": [],
-	
-		/**
-		 * Sorting data cache - this array is ostensibly the same length as the
-		 * number of columns (although each index is generated only as it is 
-		 * needed), and holds the data that is used for sorting each column in the
-		 * row. We do this cache generation at the start of the sort in order that
-		 * the formatting of the sort data need be done only once for each cell
-		 * per sort. This array should not be read from or written to by anything
-		 * other than the master sorting methods.
-		 *  @type array
-		 *  @default []
-		 *  @private
-		 */
-		"_aSortData": [],
-	
-		/**
-		 * Array of TD elements that are cached for hidden rows, so they can be
-		 * reinserted into the table if a column is made visible again (or to act
-		 * as a store if a column is made hidden). Only hidden columns have a 
-		 * reference in the array. For non-hidden columns the value is either
-		 * undefined or null.
-		 *  @type array nodes
-		 *  @default []
-		 *  @private
-		 */
-		"_anHidden": [],
-	
-		/**
-		 * Cache of the class name that DataTables has applied to the row, so we
-		 * can quickly look at this variable rather than needing to do a DOM check
-		 * on className for the nTr property.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @private
-		 */
-		"_sRowStripe": ""
-	};
-	
-	
-	
-	/**
-	 * Template object for the column information object in DataTables. This object
-	 * is held in the settings aoColumns array and contains all the information that
-	 * DataTables needs about each individual column.
-	 * 
-	 * Note that this object is related to {@link DataTable.defaults.columns} 
-	 * but this one is the internal data store for DataTables's cache of columns.
-	 * It should NOT be manipulated outside of DataTables. Any configuration should
-	 * be done through the initialisation options.
-	 *  @namespace
-	 */
-	DataTable.models.oColumn = {
-		/**
-		 * A list of the columns that sorting should occur on when this column
-		 * is sorted. That this property is an array allows multi-column sorting
-		 * to be defined for a column (for example first name / last name columns
-		 * would benefit from this). The values are integers pointing to the
-		 * columns to be sorted on (typically it will be a single integer pointing
-		 * at itself, but that doesn't need to be the case).
-		 *  @type array
-		 */
-		"aDataSort": null,
-	
-		/**
-		 * Define the sorting directions that are applied to the column, in sequence
-		 * as the column is repeatedly sorted upon - i.e. the first value is used
-		 * as the sorting direction when the column if first sorted (clicked on).
-		 * Sort it again (click again) and it will move on to the next index.
-		 * Repeat until loop.
-		 *  @type array
-		 */
-		"asSorting": null,
-		
-		/**
-		 * Flag to indicate if the column is searchable, and thus should be included
-		 * in the filtering or not.
-		 *  @type boolean
-		 */
-		"bSearchable": null,
-		
-		/**
-		 * Flag to indicate if the column is sortable or not.
-		 *  @type boolean
-		 */
-		"bSortable": null,
-		
-		/**
-		 * When using fnRender, you have two options for what to do with the data,
-		 * and this property serves as the switch. Firstly, you can have the sorting
-		 * and filtering use the rendered value (true - default), or you can have
-		 * the sorting and filtering us the original value (false).
-		 * 
-		 * *NOTE* It is it is advisable now to use mDataProp as a function and make 
-		 * use of the 'type' that it gives, allowing (potentially) different data to
-		 * be used for sorting, filtering, display and type detection.
-		 *  @type boolean
-		 *  @deprecated
-		 */
-		"bUseRendered": null,
-		
-		/**
-		 * Flag to indicate if the column is currently visible in the table or not
-		 *  @type boolean
-		 */
-		"bVisible": null,
-		
-		/**
-		 * Flag to indicate to the type detection method if the automatic type
-		 * detection should be used, or if a column type (sType) has been specified
-		 *  @type boolean
-		 *  @default true
-		 *  @private
-		 */
-		"_bAutoType": true,
-		
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to fnRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available (since it is not when fnRender is called).
-		 *  @type function
-		 *  @param {element} nTd The TD node that has been created
-		 *  @param {*} sData The Data for the cell
-		 *  @param {array|object} oData The data for the whole row
-		 *  @param {int} iRow The row index for the aoData data store
-		 *  @default null
-		 */
-		"fnCreatedCell": null,
-		
-		/**
-		 * Function to get data from a cell in a column. You should <b>never</b>
-		 * access data directly through _aData internally in DataTables - always use
-		 * the method attached to this property. It allows mDataProp to function as
-		 * required. This function is automatically assigned by the column 
-		 * initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array 
-		 *    (i.e. aoData[]._aData)
-		 *  @param {string} sSpecific The specific data type you want to get - 
-		 *    'display', 'type' 'filter' 'sort'
-		 *  @returns {*} The data for the cell from the given row's data
-		 *  @default null
-		 */
-		"fnGetData": null,
-		
-		/**
-		 * Custom display function that will be called for the display of each cell 
-		 * in this column.
-		 *  @type function
-		 *  @param {object} o Object with the following parameters:
-		 *  @param {int}    o.iDataRow The row in aoData
-		 *  @param {int}    o.iDataColumn The column in question
-		 *  @param {array}  o.aData The data for the row in question
-		 *  @param {object} o.oSettings The settings object for this DataTables instance
-		 *  @returns {string} The string you which to use in the display
-		 *  @default null
-		 */
-		"fnRender": null,
-		
-		/**
-		 * Function to set data for a cell in the column. You should <b>never</b> 
-		 * set the data directly to _aData internally in DataTables - always use
-		 * this method. It allows mDataProp to function as required. This function
-		 * is automatically assigned by the column initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array 
-		 *    (i.e. aoData[]._aData)
-		 *  @param {*} sValue Value to set
-		 *  @default null
-		 */
-		"fnSetData": null,
-		
-		/**
-		 * Property to read the value for the cells in the column from the data 
-		 * source array / object. If null, then the default content is used, if a
-		 * function is given then the return from the function is used.
-		 *  @type function|int|string|null
-		 *  @default null
-		 */
-		"mDataProp": null,
-		
-		/**
-		 * Unique header TH/TD element for this column - this is what the sorting
-		 * listener is attached to (if sorting is enabled.)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTh": null,
-		
-		/**
-		 * Unique footer TH/TD element for this column (if there is one). Not used 
-		 * in DataTables as such, but can be used for plug-ins to reference the 
-		 * footer for each column.
-		 *  @type node
-		 *  @default null
-		 */
-		"nTf": null,
-		
-		/**
-		 * The class to apply to all TD elements in the table's TBODY for the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sClass": null,
-		
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer 
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 *  @type string
-		 */
-		"sContentPadding": null,
-		
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because mDataProp
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 */
-		"sDefaultContent": null,
-		
-		/**
-		 * Name for the column, allowing reference to the column by name as well as
-		 * by index (needs a lookup to work by name).
-		 *  @type string
-		 */
-		"sName": null,
-		
-		/**
-		 * Custom sorting data type - defines which of the available plug-ins in
-		 * afnSortData the custom sorting will use - if any is defined.
-		 *  @type string
-		 *  @default std
-		 */
-		"sSortDataType": 'std',
-		
-		/**
-		 * Class to be applied to the header element when sorting on this column
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClass": null,
-		
-		/**
-		 * Class to be applied to the header element when sorting on this column -
-		 * when jQuery UI theming is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClassJUI": null,
-		
-		/**
-		 * Title of the column - what is seen in the TH element (nTh).
-		 *  @type string
-		 */
-		"sTitle": null,
-		
-		/**
-		 * Column sorting and filtering type
-		 *  @type string
-		 *  @default null
-		 */
-		"sType": null,
-		
-		/**
-		 * Width of the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidth": null,
-		
-		/**
-		 * Width of the column when it was first "encountered"
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidthOrig": null
-	};
-	
-	
-	
-	/**
-	 * Initialisation options that can be given to DataTables at initialisation 
-	 * time.
-	 *  @namespace
-	 */
-	DataTable.defaults = {
-		/**
-		 * An array of data to use for the table, passed in at initialisation which 
-		 * will be used in preference to any data which is already in the DOM. This is
-		 * particularly useful for constructing tables purely in Javascript, for
-		 * example with a custom Ajax call.
-		 *  @type array
-		 *  @default null
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    // Using a 2D array data source
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "aaData": [
-		 *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
-		 *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
-		 *        ],
-		 *        "aoColumns": [
-		 *          { "sTitle": "Engine" },
-		 *          { "sTitle": "Browser" },
-		 *          { "sTitle": "Platform" },
-		 *          { "sTitle": "Version" },
-		 *          { "sTitle": "Grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using an array of objects as a data source (mDataProp)
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "aaData": [
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 4.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  4,
-		 *            "grade":    "X"
-		 *          },
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 5.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  5,
-		 *            "grade":    "C"
-		 *          }
-		 *        ],
-		 *        "aoColumns": [
-		 *          { "sTitle": "Engine",   "mDataProp": "engine" },
-		 *          { "sTitle": "Browser",  "mDataProp": "browser" },
-		 *          { "sTitle": "Platform", "mDataProp": "platform" },
-		 *          { "sTitle": "Version",  "mDataProp": "version" },
-		 *          { "sTitle": "Grade",    "mDataProp": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aaData": null,
-	
-	
-		/**
-		 * If sorting is enabled, then DataTables will perform a first pass sort on 
-		 * initialisation. You can define which column(s) the sort is performed upon, 
-		 * and the sorting direction, with this variable. The aaSorting array should 
-		 * contain an array for each column to be sorted initially containing the 
-		 * column's index and a direction string ('asc' or 'desc').
-		 *  @type array
-		 *  @default [[0,'asc']]
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    // Sort by 3rd column first, and then 4th column
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aaSorting": [[2,'asc'], [3,'desc']]
-		 *      } );
-		 *    } );
-		 *    
-		 *    // No initial sorting
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aaSorting": []
-		 *      } );
-		 *    } );
-		 */
-		"aaSorting": [[0,'asc']],
-	
-	
-		/**
-		 * This parameter is basically identical to the aaSorting parameter, but 
-		 * cannot be overridden by user interaction with the table. What this means 
-		 * is that you could have a column (visible or hidden) which the sorting will 
-		 * always be forced on first - any sorting after that (from the user) will 
-		 * then be performed as required. This can be useful for grouping rows 
-		 * together.
-		 *  @type array
-		 *  @default null
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aaSortingFixed": [[0,'asc']]
-		 *      } );
-		 *    } )
-		 */
-		"aaSortingFixed": null,
-	
-	
-		/**
-		 * This parameter allows you to readily specify the entries in the length drop
-		 * down menu that DataTables shows when pagination is enabled. It can be 
-		 * either a 1D array of options which will be used for both the displayed 
-		 * option and the value, or a 2D array which will use the array in the first 
-		 * position as the value, and the array in the second position as the 
-		 * displayed options (useful for language strings such as 'All').
-		 *  @type array
-		 *  @default [ 10, 25, 50, 100 ]
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
-		 *      } );
-		 *    } );
-		 *  
-		 *  @example
-		 *    // Setting the default display length as well as length menu
-		 *    // This is likely to be wanted if you remove the '10' option which
-		 *    // is the iDisplayLength default.
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "iDisplayLength": 25,
-		 *        "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]]
-		 *      } );
-		 *    } );
-		 */
-		"aLengthMenu": [ 10, 25, 50, 100 ],
-	
-	
-		/**
-		 * The aoColumns option in the initialisation parameter allows you to define
-		 * details about the way individual columns behave. For a full list of
-		 * column options that can be set, please see 
-		 * {@link DataTable.defaults.columns}. Note that if you use aoColumns to
-		 * define your columns, you must have an entry in the array for every single
-		 * column that you have in your table (these can be null if you don't which
-		 * to specify any options).
-		 *  @member
-		 */
-		"aoColumns": null,
-	
-		/**
-		 * Very similar to aoColumns, aoColumnDefs allows you to target a specific 
-		 * column, multiple columns, or all columns, using the aTargets property of 
-		 * each object in the array. This allows great flexibility when creating 
-		 * tables, as the aoColumnDefs arrays can be of any length, targeting the 
-		 * columns you specifically want. aoColumnDefs may use any of the column 
-		 * options available: {@link DataTable.defaults.columns}, but it _must_
-		 * have aTargets defined in each object in the array. Values in the aTargets
-		 * array may be:
-		 *   <ul>
-		 *     <li>a string - class name will be matched on the TH for the column</li>
-		 *     <li>0 or a positive integer - column index counting from the left</li>
-		 *     <li>a negative integer - column index counting from the right</li>
-		 *     <li>the string "_all" - all columns (i.e. assign a default)</li>
-		 *   </ul>
-		 *  @member
-		 */
-		"aoColumnDefs": null,
-	
-	
-		/**
-		 * Basically the same as oSearch, this parameter defines the individual column
-		 * filtering state at initialisation time. The array must be of the same size 
-		 * as the number of columns, and each element be an object with the parameters
-		 * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also
-		 * accepted and the default will be used.
-		 *  @type array
-		 *  @default []
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aoSearchCols": [
-		 *          null,
-		 *          { "sSearch": "My filter" },
-		 *          null,
-		 *          { "sSearch": "^[0-9]", "bEscapeRegex": false }
-		 *        ]
-		 *      } );
-		 *    } )
-		 */
-		"aoSearchCols": [],
-	
-	
-		/**
-		 * An array of CSS classes that should be applied to displayed rows. This 
-		 * array may be of any length, and DataTables will apply each class 
-		 * sequentially, looping when required.
-		 *  @type array
-		 *  @default null <i>Will take the values determinted by the oClasses.sStripe*
-		 *    options</i>
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ]
-		 *      } );
-		 *    } )
-		 */
-		"asStripeClasses": null,
-	
-	
-		/**
-		 * Enable or disable automatic column width calculation. This can be disabled
-		 * as an optimisation (it takes some time to calculate the widths) if the
-		 * tables widths are passed in using aoColumns.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bAutoWidth": false
-		 *      } );
-		 *    } );
-		 */
-		"bAutoWidth": true,
-	
-	
-		/**
-		 * Deferred rendering can provide DataTables with a huge speed boost when you
-		 * are using an Ajax or JS data source for the table. This option, when set to
-		 * true, will cause DataTables to defer the creation of the table elements for
-		 * each row until they are needed for a draw - saving a significant amount of
-		 * time.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/arrays.txt",
-		 *        "bDeferRender": true
-		 *      } );
-		 *    } );
-		 */
-		"bDeferRender": false,
-	
-	
-		/**
-		 * Replace a DataTable which matches the given selector and replace it with 
-		 * one which has the properties of the new initialisation object passed. If no
-		 * table matches the selector, then the new DataTable will be constructed as
-		 * per normal.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *      
-		 *      // Some time later....
-		 *      $('#example').dataTable( {
-		 *        "bFilter": false,
-		 *        "bDestroy": true
-		 *      } );
-		 *    } );
-		 */
-		"bDestroy": false,
-	
-	
-		/**
-		 * Enable or disable filtering of data. Filtering in DataTables is "smart" in
-		 * that it allows the end user to input multiple words (space separated) and
-		 * will match a row containing those words, even if not in the order that was
-		 * specified (this allow matching across multiple columns). Note that if you
-		 * wish to use filtering in DataTables this must remain 'true' - to remove the
-		 * default filtering input box and retain filtering abilities, please use
-		 * {@link DataTable.defaults.sDom}.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bFilter": false
-		 *      } );
-		 *    } );
-		 */
-		"bFilter": true,
-	
-	
-		/**
-		 * Enable or disable the table information display. This shows information 
-		 * about the data that is currently visible on the page, including information
-		 * about filtered data if that action is being performed.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bInfo": false
-		 *      } );
-		 *    } );
-		 */
-		"bInfo": true,
-	
-	
-		/**
-		 * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some
-		 * slightly different and additional mark-up from what DataTables has
-		 * traditionally used).
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "bJQueryUI": true
-		 *      } );
-		 *    } );
-		 */
-		"bJQueryUI": false,
-	
-	
-		/**
-		 * Allows the end user to select the size of a formatted page from a select
-		 * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate).
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bLengthChange": false
-		 *      } );
-		 *    } );
-		 */
-		"bLengthChange": true,
-	
-	
-		/**
-		 * Enable or disable pagination.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bPaginate": false
-		 *      } );
-		 *    } );
-		 */
-		"bPaginate": true,
-	
-	
-		/**
-		 * Enable or disable the display of a 'processing' indicator when the table is
-		 * being processed (e.g. a sort). This is particularly useful for tables with
-		 * large amounts of data where it can take a noticeable amount of time to sort
-		 * the entries.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bProcessing": true
-		 *      } );
-		 *    } );
-		 */
-		"bProcessing": false,
-	
-	
-		/**
-		 * Retrieve the DataTables object for the given selector. Note that if the
-		 * table has already been initialised, this parameter will cause DataTables
-		 * to simply return the object that has already been set up - it will not take
-		 * account of any changes you might have made to the initialisation object
-		 * passed to DataTables (setting this parameter to true is an acknowledgement
-		 * that you understand this). bDestroy can be used to reinitialise a table if
-		 * you need.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      initTable();
-		 *      tableActions();
-		 *    } );
-		 *    
-		 *    function initTable ()
-		 *    {
-		 *      return $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false,
-		 *        "bRetrieve": true
-		 *      } );
-		 *    }
-		 *    
-		 *    function tableActions ()
-		 *    {
-		 *      var oTable = initTable();
-		 *      // perform API operations with oTable 
-		 *    }
-		 */
-		"bRetrieve": false,
-	
-	
-		/**
-		 * Indicate if DataTables should be allowed to set the padding / margin
-		 * etc for the scrolling header elements or not. Typically you will want
-		 * this.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bScrollAutoCss": false,
-		 *        "sScrollY": "200px"
-		 *      } );
-		 *    } );
-		 */
-		"bScrollAutoCss": true,
-	
-	
-		/**
-		 * When vertical (y) scrolling is enabled, DataTables will force the height of
-		 * the table's viewport to the given height at all times (useful for layout).
-		 * However, this can look odd when filtering data down to a small data set,
-		 * and the footer is left "floating" further down. This parameter (when
-		 * enabled) will cause DataTables to collapse the table's viewport down when
-		 * the result set will fit within the given Y height.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollY": "200",
-		 *        "bScrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"bScrollCollapse": false,
-	
-	
-		/**
-		 * Enable infinite scrolling for DataTables (to be used in combination with
-		 * sScrollY). Infinite scrolling means that DataTables will continually load
-		 * data as a user scrolls through a table, which is very useful for large
-		 * dataset. This cannot be used with pagination, which is automatically
-		 * disabled. Note - the Scroller extra for DataTables is recommended in
-		 * in preference to this option.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bScrollInfinite": true,
-		 *        "bScrollCollapse": true,
-		 *        "sScrollY": "200px"
-		 *      } );
-		 *    } );
-		 */
-		"bScrollInfinite": false,
-	
-	
-		/**
-		 * Configure DataTables to use server-side processing. Note that the
-		 * sAjaxSource parameter must also be given in order to give DataTables a
-		 * source to obtain the required data for each draw.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "xhr.php"
-		 *      } );
-		 *    } );
-		 */
-		"bServerSide": false,
-	
-	
-		/**
-		 * Enable or disable sorting of columns. Sorting of individual columns can be
-		 * disabled by the "bSortable" option for each column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bSort": false
-		 *      } );
-		 *    } );
-		 */
-		"bSort": true,
-	
-	
-		/**
-		 * Allows control over whether DataTables should use the top (true) unique
-		 * cell that is found for a single column, or the bottom (false - default).
-		 * This is useful when using complex headers.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bSortCellsTop": true
-		 *      } );
-		 *    } );
-		 */
-		"bSortCellsTop": false,
-	
-	
-		/**
-		 * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and
-		 * 'sorting_3' to the columns which are currently being sorted on. This is
-		 * presented as a feature switch as it can increase processing time (while
-		 * classes are removed and added) so for large data sets you might want to
-		 * turn this off.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bSortClasses": false
-		 *      } );
-		 *    } );
-		 */
-		"bSortClasses": true,
-	
-	
-		/**
-		 * Enable or disable state saving. When enabled a cookie will be used to save
-		 * table display information such as pagination information, display length,
-		 * filtering and sorting. As such when the end user reloads the page the
-		 * display display will match what thy had previously set up.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true
-		 *      } );
-		 *    } );
-		 */
-		"bStateSave": false,
-	
-	
-		/**
-		 * Customise the cookie and / or the parameters being stored when using
-		 * DataTables with state saving enabled. This function is called whenever
-		 * the cookie is modified, and it expects a fully formed cookie string to be
-		 * returned. Note that the data object passed in is a Javascript object which
-		 * must be converted to a string (JSON.stringify for example).
-		 *  @type function
-		 *  @param {string} sName Name of the cookie defined by DataTables
-		 *  @param {object} oData Data to be stored in the cookie
-		 *  @param {string} sExpires Cookie expires string
-		 *  @param {string} sPath Path of the cookie to set
-		 *  @returns {string} Cookie formatted string (which should be encoded by
-		 *    using encodeURIComponent())
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "fnCookieCallback": function (sName, oData, sExpires, sPath) {
-		 *          // Customise oData or sName or whatever else here
-		 *          return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath;
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnCookieCallback": null,
-	
-	
-		/**
-		 * This function is called when a TR element is created (and all TD child
-		 * elements have been inserted), or registered if using a DOM source, allowing
-		 * manipulation of the TR element (adding classes etc).
-		 *  @type function
-		 *  @param {node} nRow "TR" element for the current row
-		 *  @param {array} aData Raw data array for this row
-		 *  @param {int} iDataIndex The index of this row in aoData
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "fnCreatedRow": function( nRow, aData, iDataIndex ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( aData[4] == "A" )
-		 *          {
-		 *            $('td:eq(4)', nRow).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnCreatedRow": null,
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify any aspect you want about the created DOM.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnDrawCallback": function( oSettings ) {
-		 *          alert( 'DataTables has redrawn the table' );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnDrawCallback": null,
-	
-	
-		/**
-		 * Identical to fnHeaderCallback() but for the table footer this function
-		 * allows you to modify the table footer on every 'draw' even.
-		 *  @type function
-		 *  @param {node} nFoot "TR" element for the footer
-		 *  @param {array} aData Full table data (as derived from the original HTML)
-		 *  @param {int} iStart Index for the current display starting point in the 
-		 *    display array
-		 *  @param {int} iEnd Index for the current display ending point in the 
-		 *    display array
-		 *  @param {array int} aiDisplay Index array to translate the visual position
-		 *    to the full data array
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) {
-		 *          nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart;
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnFooterCallback": null,
-	
-	
-		/**
-		 * When rendering large numbers in the information element for the table
-		 * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
-		 * to have a comma separator for the 'thousands' units (e.g. 1 million is
-		 * rendered as "1,000,000") to help readability for the end user. This
-		 * function will override the default method DataTables uses.
-		 *  @type function
-		 *  @member
-		 *  @param {int} iIn number to be formatted
-		 *  @returns {string} formatted string for DataTables to show the number
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "fnFormatNumber": function ( iIn ) {
-		 *          if ( iIn &lt; 1000 ) {
-		 *            return iIn;
-		 *          } else {
-		 *            var 
-		 *              s=(iIn+""), 
-		 *              a=s.split(""), out="", 
-		 *              iLen=s.length;
-		 *            
-		 *            for ( var i=0 ; i&lt;iLen ; i++ ) {
-		 *              if ( i%3 === 0 &amp;&amp; i !== 0 ) {
-		 *                out = "'"+out;
-		 *              }
-		 *              out = a[iLen-i-1]+out;
-		 *            }
-		 *          }
-		 *          return out;
-		 *        };
-		 *      } );
-		 *    } );
-		 */
-		"fnFormatNumber": function ( iIn ) {
-			if ( iIn < 1000 )
-			{
-				// A small optimisation for what is likely to be the majority of use cases
-				return iIn;
-			}
-	
-			var s=(iIn+""), a=s.split(""), out="", iLen=s.length;
-			
-			for ( var i=0 ; i<iLen ; i++ )
-			{
-				if ( i%3 === 0 && i !== 0 )
-				{
-					out = this.oLanguage.sInfoThousands+out;
-				}
-				out = a[iLen-i-1]+out;
-			}
-			return out;
-		},
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify the header row. This can be used to calculate and
-		 * display useful information about the table.
-		 *  @type function
-		 *  @param {node} nHead "TR" element for the header
-		 *  @param {array} aData Full table data (as derived from the original HTML)
-		 *  @param {int} iStart Index for the current display starting point in the
-		 *    display array
-		 *  @param {int} iEnd Index for the current display ending point in the
-		 *    display array
-		 *  @param {array int} aiDisplay Index array to translate the visual position
-		 *    to the full data array
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) {
-		 *          nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnHeaderCallback": null,
-	
-	
-		/**
-		 * The information element can be used to convey information about the current
-		 * state of the table. Although the internationalisation options presented by
-		 * DataTables are quite capable of dealing with most customisations, there may
-		 * be times where you wish to customise the string further. This callback
-		 * allows you to do exactly that.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {int} iStart Starting position in data for the draw
-		 *  @param {int} iEnd End position in data for the draw
-		 *  @param {int} iMax Total number of rows in the table (regardless of
-		 *    filtering)
-		 *  @param {int} iTotal Total number of rows in the data set, after filtering
-		 *  @param {string} sPre The string that DataTables has formatted using it's
-		 *    own rules
-		 *  @returns {string} The string to be displayed in the information element.
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $('#example').dataTable( {
-		 *      "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) {
-		 *        return iStart +" to "+ iEnd;
-		 *      }
-		 *    } );
-		 */
-		"fnInfoCallback": null,
-	
-	
-		/**
-		 * Called when the table has been initialised. Normally DataTables will
-		 * initialise sequentially and there will be no need for this function,
-		 * however, this does not hold true when using external language information
-		 * since that is obtained using an async XHR call.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} json The JSON object request from the server - only
-		 *    present if client-side Ajax sourced data is used
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnInitComplete": function(oSettings, json) {
-		 *          alert( 'DataTables has finished its initialisation.' );
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnInitComplete": null,
-	
-	
-		/**
-		 * Called at the very start of each table draw and can be used to cancel the
-		 * draw by returning false, any other return (including undefined) results in
-		 * the full draw occurring).
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @returns {boolean} False will cancel the draw, anything else (including no
-		 *    return) will allow it to complete.
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnPreDrawCallback": function( oSettings ) {
-		 *          if ( $('#test').val() == 1 ) {
-		 *            return false;
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnPreDrawCallback": null,
-	
-	
-		/**
-		 * This function allows you to 'post process' each row after it have been
-		 * generated for each table draw, but before it is rendered on screen. This
-		 * function might be used for setting the row class name etc.
-		 *  @type function
-		 *  @param {node} nRow "TR" element for the current row
-		 *  @param {array} aData Raw data array for this row
-		 *  @param {int} iDisplayIndex The display index for the current table draw
-		 *  @param {int} iDisplayIndexFull The index of the data in the full list of
-		 *    rows (after filtering)
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( aData[4] == "A" )
-		 *          {
-		 *            $('td:eq(4)', nRow).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnRowCallback": null,
-	
-	
-		/**
-		 * This parameter allows you to override the default function which obtains
-		 * the data from the server ($.getJSON) so something more suitable for your
-		 * application. For example you could use POST data, or pull information from
-		 * a Gears or AIR database.
-		 *  @type function
-		 *  @member
-		 *  @param {string} sSource HTTP source to obtain the data from (sAjaxSource)
-		 *  @param {array} aoData A key/value pair object containing the data to send
-		 *    to the server
-		 *  @param {function} fnCallback to be called on completion of the data get
-		 *    process that will draw the data on the page.
-		 *  @param {object} oSettings DataTables settings object
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    // POST data to server
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bProcessing": true,
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "xhr.php",
-		 *        "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
-		 *          oSettings.jqXHR = $.ajax( {
-		 *            "dataType": 'json', 
-		 *            "type": "POST", 
-		 *            "url": sSource, 
-		 *            "data": aoData, 
-		 *            "success": fnCallback
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) {
-			oSettings.jqXHR = $.ajax( {
-				"url":  sUrl,
-				"data": aoData,
-				"success": function (json) {
-					$(oSettings.oInstance).trigger('xhr', oSettings);
-					fnCallback( json );
-				},
-				"dataType": "json",
-				"cache": false,
-				"type": oSettings.sServerMethod,
-				"error": function (xhr, error, thrown) {
-					if ( error == "parsererror" ) {
-						oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+
-							"server could not be parsed. This is caused by a JSON formatting error." );
-					}
-				}
-			} );
-		},
-	
-	
-		/**
-		 * It is often useful to send extra data to the server when making an Ajax
-		 * request - for example custom filtering information, and this callback
-		 * function makes it trivial to send extra information to the server. The
-		 * passed in parameter is the data set that has been constructed by
-		 * DataTables, and you can add to this or modify it as you require.
-		 *  @type function
-		 *  @param {array} aoData Data array (array of objects which are name/value
-		 *    pairs) that has been constructed by DataTables and will be sent to the
-		 *    server. In the case of Ajax sourced data with server-side processing
-		 *    this will be an empty array, for server-side processing there will be a
-		 *    significant number of parameters!
-		 *  @returns {undefined} Ensure that you modify the aoData array passed in,
-		 *    as this is passed by reference.
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bProcessing": true,
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/server_processing.php",
-		 *        "fnServerParams": function ( aoData ) {
-		 *          aoData.push( { "name": "more_data", "value": "my_value" } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnServerParams": null,
-	
-	
-		/**
-		 * Load the table state. With this function you can define from where, and how, the
-		 * state of a table is loaded. By default DataTables will load from its state saving
-		 * cookie, but you might wish to use local storage (HTML5) or a server-side database.
-		 *  @type function
-		 *  @member
-		 *  @param {object} oSettings DataTables settings object
-		 *  @return {object} The DataTables state object to be loaded
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoad": function (oSettings) {
-		 *          var o;
-		 *          
-		 *          // Send an Ajax request to the server to get the data. Note that
-		 *          // this is a synchronous request.
-		 *          $.ajax( {
-		 *            "url": "/state_load",
-		 *            "async": false,
-		 *            "dataType": "json",
-		 *            "success": function (json) {
-		 *              o = json;
-		 *            }
-		 *          } );
-		 *          
-		 *          return o;
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoad": function ( oSettings ) {
-			var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance );
-			var oData;
-	
-			try {
-				oData = (typeof $.parseJSON === 'function') ? 
-					$.parseJSON(sData) : eval( '('+sData+')' );
-			} catch (e) {
-				oData = null;
-			}
-	
-			return oData;
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the saved state prior to loading that state.
-		 * This callback is called when the table is loading state from the stored data, but
-		 * prior to the settings object being modified by the saved state. Note that for 
-		 * plug-in authors, you should use the 'stateLoadParams' event to load parameters for 
-		 * a plug-in.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object that is to be loaded
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never loaded
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoadParams": function (oSettings, oData) {
-		 *          oData.oSearch.sSearch = "";
-		 *      } );
-		 *    } );
-		 * 
-		 *  @example
-		 *    // Disallow state loading by returning false
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoadParams": function (oSettings, oData) {
-		 *          return false;
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoadParams": null,
-	
-	
-		/**
-		 * Callback that is called when the state has been loaded from the state saving method
-		 * and the DataTables settings object has been modified as a result of the loaded state.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object that was loaded
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    // Show an alert with the filtering value that was saved
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoaded": function (oSettings, oData) {
-		 *          alert( 'Saved filter was: '+oData.oSearch.sSearch );
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoaded": null,
-	
-	
-		/**
-		 * Save the table state. This function allows you to define where and how the state
-		 * information for the table is stored - by default it will use a cookie, but you
-		 * might want to use local storage (HTML5) or a server-side database.
-		 *  @type function
-		 *  @member
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object to be saved
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateSave": function (oSettings, oData) {
-		 *          // Send an Ajax request to the server with the state object
-		 *          $.ajax( {
-		 *            "url": "/state_save",
-		 *            "data": oData,
-		 *            "dataType": "json",
-		 *            "method": "POST"
-		 *            "success": function () {}
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSave": function ( oSettings, oData ) {
-			this.oApi._fnCreateCookie( 
-				oSettings.sCookiePrefix+oSettings.sInstance, 
-				this.oApi._fnJsonString(oData), 
-				oSettings.iCookieDuration, 
-				oSettings.sCookiePrefix, 
-				oSettings.fnCookieCallback
-			);
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the state to be saved. Called when the table 
-		 * has changed state a new state save is required. This method allows modification of
-		 * the state saving object prior to actually doing the save, including addition or 
-		 * other state properties or modification. Note that for plug-in authors, you should 
-		 * use the 'stateSaveParams' event to save parameters for a plug-in.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object to be saved
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never saved
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateSaveParams": function (oSettings, oData) {
-		 *          oData.oSearch.sSearch = "";
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSaveParams": null,
-	
-	
-		/**
-		 * Duration of the cookie which is used for storing session information. This
-		 * value is given in seconds.
-		 *  @type int
-		 *  @default 7200 <i>(2 hours)</i>
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "iCookieDuration": 60*60*24 // 1 day
-		 *      } );
-		 *    } )
-		 */
-		"iCookieDuration": 7200,
-	
-	
-		/**
-		 * When enabled DataTables will not make a request to the server for the first
-		 * page draw - rather it will use the data already on the page (no sorting etc
-		 * will be applied to it), thus saving on an XHR at load time. iDeferLoading
-		 * is used to indicate that deferred loading is required, but it is also used
-		 * to tell DataTables how many records there are in the full table (allowing
-		 * the information element and pagination to be displayed correctly). In the case
-		 * where a filtering is applied to the table on initial load, this can be
-		 * indicated by giving the parameter as an array, where the first element is
-		 * the number of records available after filtering and the second element is the
-		 * number of records without filtering (allowing the table information element
-		 * to be shown correctly).
-		 *  @type int | array
-		 *  @default null
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    // 57 records available in the table, no filtering applied
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/server_processing.php",
-		 *        "iDeferLoading": 57
-		 *      } );
-		 *    } );
-		 * 
-		 *  @example
-		 *    // 57 records after filtering, 100 without filtering (an initial filter applied)
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/server_processing.php",
-		 *        "iDeferLoading": [ 57, 100 ],
-		 *        "oSearch": {
-		 *          "sSearch": "my_filter"
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"iDeferLoading": null,
-	
-	
-		/**
-		 * Number of rows to display on a single page when using pagination. If
-		 * feature enabled (bLengthChange) then the end user will be able to override
-		 * this to a custom setting using a pop-up menu.
-		 *  @type int
-		 *  @default 10
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "iDisplayLength": 50
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayLength": 10,
-	
-	
-		/**
-		 * Define the starting point for data display when using DataTables with
-		 * pagination. Note that this parameter is the number of records, rather than
-		 * the page number, so if you have 10 records per page and want to start on
-		 * the third page, it should be "20".
-		 *  @type int
-		 *  @default 0
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "iDisplayStart": 20
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayStart": 0,
-	
-	
-		/**
-		 * The scroll gap is the amount of scrolling that is left to go before
-		 * DataTables will load the next 'page' of data automatically. You typically
-		 * want a gap which is big enough that the scrolling will be smooth for the
-		 * user, while not so large that it will load more data than need.
-		 *  @type int
-		 *  @default 100
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bScrollInfinite": true,
-		 *        "bScrollCollapse": true,
-		 *        "sScrollY": "200px",
-		 *        "iScrollLoadGap": 50
-		 *      } );
-		 *    } );
-		 */
-		"iScrollLoadGap": 100,
-	
-	
-		/**
-		 * By default DataTables allows keyboard navigation of the table (sorting, paging,
-		 * and filtering) by adding a tabindex attribute to the required elements. This
-		 * allows you to tab through the controls and press the enter key to activate them.
-		 * The tabindex is default 0, meaning that the tab follows the flow of the document.
-		 * You can overrule this using this parameter if you wish. Use a value of -1 to
-		 * disable built-in keyboard navigation.
-		 *  @type int
-		 *  @default 0
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "iTabIndex": 1
-		 *      } );
-		 *    } );
-		 */
-		"iTabIndex": 0,
-	
-	
-		/**
-		 * All strings that DataTables uses in the user interface that it creates
-		 * are defined in this object, allowing you to modified them individually or
-		 * completely replace them all as required.
-		 *  @namespace
-		 */
-		"oLanguage": {
-			/**
-			 * Strings that are used for WAI-ARIA labels and controls only (these are not
-			 * actually visible on the page, but will be read by screenreaders, and thus
-			 * must be internationalised as well).
-			 *  @namespace
-			 */
-			"oAria": {
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted ascending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oAria": {
-				 *            "sSortAscending": " - click/return to sort ascending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortAscending": ": activate to sort column ascending",
-	
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted descending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oAria": {
-				 *            "sSortDescending": " - click/return to sort descending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortDescending": ": activate to sort column descending"
-			},
-	
-			/**
-			 * Pagination string used by DataTables for the two built-in pagination
-			 * control types ("two_button" and "full_numbers")
-			 *  @namespace
-			 */
-			"oPaginate": {
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the first page.
-				 *  @type string
-				 *  @default First
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sFirst": "First page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sFirst": "First",
-			
-			
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the last page.
-				 *  @type string
-				 *  @default Last
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sLast": "Last page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sLast": "Last",
-			
-			
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the next page.
-				 *  @type string
-				 *  @default Next
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sNext": "Next page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sNext": "Next",
-			
-			
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the previous page.
-				 *  @type string
-				 *  @default Previous
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sPrevious": "Previous page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sPrevious": "Previous"
-			},
-		
-			/**
-			 * This string is shown in preference to sZeroRecords when the table is
-			 * empty of data (regardless of filtering). Note that this is an optional
-			 * parameter - if it is not given, the value of sZeroRecords will be used
-			 * instead (either the default or given value).
-			 *  @type string
-			 *  @default No data available in table
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sEmptyTable": "No data available in table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sEmptyTable": "No data available in table",
-		
-		
-			/**
-			 * This string gives information to the end user about the information that 
-			 * is current on display on the page. The _START_, _END_ and _TOTAL_ 
-			 * variables are all dynamically replaced as the table display updates, and 
-			 * can be freely moved or removed as the language requirements change.
-			 *  @type string
-			 *  @default Showing _START_ to _END_ of _TOTAL_ entries
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
-		
-		
-			/**
-			 * Display information string for when the table is empty. Typically the 
-			 * format of this string should match sInfo.
-			 *  @type string
-			 *  @default Showing 0 to 0 of 0 entries
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoEmpty": "No entries to show"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoEmpty": "Showing 0 to 0 of 0 entries",
-		
-		
-			/**
-			 * When a user filters the information in a table, this string is appended 
-			 * to the information (sInfo) to give an idea of how strong the filtering 
-			 * is. The variable _MAX_ is dynamically updated.
-			 *  @type string
-			 *  @default (filtered from _MAX_ total entries)
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoFiltered": " - filtering from _MAX_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoFiltered": "(filtered from _MAX_ total entries)",
-		
-		
-			/**
-			 * If can be useful to append extra information to the info string at times,
-			 * and this variable does exactly that. This information will be appended to
-			 * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are
-			 * being used) at all times.
-			 *  @type string
-			 *  @default <i>Empty string</i>
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoPostFix": "All records shown are derived from real information."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoPostFix": "",
-		
-		
-			/**
-			 * DataTables has a build in number formatter (fnFormatNumber) which is used
-			 * to format large numbers that are used in the table information. By
-			 * default a comma is used, but this can be trivially changed to any
-			 * character you wish with this parameter.
-			 *  @type string
-			 *  @default ,
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoThousands": "'"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoThousands": ",",
-		
-		
-			/**
-			 * Detail the action that will be taken when the drop down menu for the
-			 * pagination length option is changed. The '_MENU_' variable is replaced
-			 * with a default select list of 10, 25, 50 and 100, and can be replaced
-			 * with a custom select box if required.
-			 *  @type string
-			 *  @default Show _MENU_ entries
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    // Language change only
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sLengthMenu": "Display _MENU_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 *    
-			 *  @example
-			 *    // Language and options change
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sLengthMenu": 'Display <select>'+
-			 *            '<option value="10">10</option>'+
-			 *            '<option value="20">20</option>'+
-			 *            '<option value="30">30</option>'+
-			 *            '<option value="40">40</option>'+
-			 *            '<option value="50">50</option>'+
-			 *            '<option value="-1">All</option>'+
-			 *            '</select> records'
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLengthMenu": "Show _MENU_ entries",
-		
-		
-			/**
-			 * When using Ajax sourced data and during the first draw when DataTables is
-			 * gathering the data, this message is shown in an empty row in the table to
-			 * indicate to the end user the the data is being loaded. Note that this
-			 * parameter is not used when loading data by server-side processing, just
-			 * Ajax sourced data with client-side processing.
-			 *  @type string
-			 *  @default Loading...
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sLoadingRecords": "Please wait - loading..."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLoadingRecords": "Loading...",
-		
-		
-			/**
-			 * Text which is displayed when the table is processing a user action
-			 * (usually a sort command or similar).
-			 *  @type string
-			 *  @default Processing...
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sProcessing": "DataTables is currently busy"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sProcessing": "Processing...",
-		
-		
-			/**
-			 * Details the actions that will be taken when the user types into the
-			 * filtering input text box. The variable "_INPUT_", if used in the string,
-			 * is replaced with the HTML text box for the filtering input allowing
-			 * control over where it appears in the string. If "_INPUT_" is not given
-			 * then the input box is appended to the string automatically.
-			 *  @type string
-			 *  @default Search:
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    // Input text box will be appended at the end automatically
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sSearch": "Filter records:"
-			 *        }
-			 *      } );
-			 *    } );
-			 *    
-			 *  @example
-			 *    // Specify where the filter should appear
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sSearch": "Apply filter _INPUT_ to table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sSearch": "Search:",
-		
-		
-			/**
-			 * All of the language information can be stored in a file on the
-			 * server-side, which DataTables will look up if this parameter is passed.
-			 * It must store the URL of the language file, which is in a JSON format,
-			 * and the object has the same properties as the oLanguage object in the
-			 * initialiser object (i.e. the above parameters). Please refer to one of
-			 * the example language files to see how this works in action.
-			 *  @type string
-			 *  @default <i>Empty string - i.e. disabled</i>
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sUrl": "",
-		
-		
-			/**
-			 * Text shown inside the table records when the is no information to be
-			 * displayed after filtering. sEmptyTable is shown when there is simply no
-			 * information in the table at all (regardless of filtering).
-			 *  @type string
-			 *  @default No matching records found
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sZeroRecords": "No records to display"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sZeroRecords": "No matching records found"
-		},
-	
-	
-		/**
-		 * This parameter allows you to have define the global filtering state at
-		 * initialisation time. As an object the "sSearch" parameter must be
-		 * defined, but all other parameters are optional. When "bRegex" is true,
-		 * the search string will be treated as a regular expression, when false
-		 * (default) it will be treated as a straight string. When "bSmart"
-		 * DataTables will use it's smart filtering methods (to word match at
-		 * any point in the data), when false this will not be done.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "oSearch": {"sSearch": "Initial search"}
-		 *      } );
-		 *    } )
-		 */
-		"oSearch": $.extend( {}, DataTable.models.oSearch ),
-	
-	
-		/**
-		 * By default DataTables will look for the property 'aaData' when obtaining
-		 * data from an Ajax source or for server-side processing - this parameter
-		 * allows that property to be changed. You can use Javascript dotted object
-		 * notation to get a data source for multiple levels of nesting.
-		 *  @type string
-		 *  @default aaData
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    // Get data from { "data": [...] }
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/data.txt",
-		 *        "sAjaxDataProp": "data"
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Get data from { "data": { "inner": [...] } }
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/data.txt",
-		 *        "sAjaxDataProp": "data.inner"
-		 *      } );
-		 *    } );
-		 */
-		"sAjaxDataProp": "aaData",
-	
-	
-		/**
-		 * You can instruct DataTables to load data from an external source using this
-		 * parameter (use aData if you want to pass data in you already have). Simply
-		 * provide a url a JSON object can be obtained from. This object must include
-		 * the parameter 'aaData' which is the data source for the table.
-		 *  @type string
-		 *  @default null
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php"
-		 *      } );
-		 *    } )
-		 */
-		"sAjaxSource": null,
-	
-	
-		/**
-		 * This parameter can be used to override the default prefix that DataTables
-		 * assigns to a cookie when state saving is enabled.
-		 *  @type string
-		 *  @default SpryMedia_DataTables_
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sCookiePrefix": "my_datatable_",
-		 *      } );
-		 *    } );
-		 */
-		"sCookiePrefix": "SpryMedia_DataTables_",
-	
-	
-		/**
-		 * This initialisation variable allows you to specify exactly where in the
-		 * DOM you want DataTables to inject the various controls it adds to the page
-		 * (for example you might want the pagination controls at the top of the
-		 * table). DIV elements (with or without a custom class) can also be added to
-		 * aid styling. The follow syntax is used:
-		 *   <ul>
-		 *     <li>The following options are allowed:	
-		 *       <ul>
-		 *         <li>'l' - Length changing</li
-		 *         <li>'f' - Filtering input</li>
-		 *         <li>'t' - The table!</li>
-		 *         <li>'i' - Information</li>
-		 *         <li>'p' - Pagination</li>
-		 *         <li>'r' - pRocessing</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following constants are allowed:
-		 *       <ul>
-		 *         <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
-		 *         <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following syntax is expected:
-		 *       <ul>
-		 *         <li>'&lt;' and '&gt;' - div elements</li>
-		 *         <li>'&lt;"class" and '&gt;' - div with a class</li>
-		 *         <li>'&lt;"#id" and '&gt;' - div with an ID</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>Examples:
-		 *       <ul>
-		 *         <li>'&lt;"wrapper"flipt&gt;'</li>
-		 *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
-		 *       </ul>
-		 *     </li>
-		 *   </ul>
-		 *  @type string
-		 *  @default lfrtip <i>(when bJQueryUI is false)</i> <b>or</b> 
-		 *    <"H"lfr>t<"F"ip> <i>(when bJQueryUI is true)</i>
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sDom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
-		 *      } );
-		 *    } );
-		 */
-		"sDom": "lfrtip",
-	
-	
-		/**
-		 * DataTables features two different built-in pagination interaction methods
-		 * ('two_button' or 'full_numbers') which present different page controls to
-		 * the end user. Further methods can be added using the API (see below).
-		 *  @type string
-		 *  @default two_button
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "sPaginationType": "full_numbers"
-		 *      } );
-		 *    } )
-		 */
-		"sPaginationType": "two_button",
-	
-	
-		/**
-		 * Enable horizontal scrolling. When a table is too wide to fit into a certain
-		 * layout, or you have a large number of columns in the table, you can enable
-		 * x-scrolling to show the table in a viewport, which can be scrolled. This
-		 * property can be any CSS unit, or a number (in which case it will be treated
-		 * as a pixel measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollX": "100%",
-		 *        "bScrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"sScrollX": "",
-	
-	
-		/**
-		 * This property can be used to force a DataTable to use more width than it
-		 * might otherwise do when x-scrolling is enabled. For example if you have a
-		 * table which requires to be well spaced, this parameter is useful for
-		 * "over-sizing" the table, and thus forcing scrolling. This property can by
-		 * any CSS unit, or a number (in which case it will be treated as a pixel
-		 * measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollX": "100%",
-		 *        "sScrollXInner": "110%"
-		 *      } );
-		 *    } );
-		 */
-		"sScrollXInner": "",
-	
-	
-		/**
-		 * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
-		 * to the given height, and enable scrolling for any data which overflows the
-		 * current viewport. This can be used as an alternative to paging to display
-		 * a lot of data in a small area (although paging and scrolling can both be
-		 * enabled at the same time). This property can be any CSS unit, or a number
-		 * (in which case it will be treated as a pixel measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *    } );
-		 */
-		"sScrollY": "",
-	
-	
-		/**
-		 * Set the HTTP method that is used to make the Ajax call for server-side
-		 * processing or Ajax sourced data.
-		 *  @type string
-		 *  @default GET
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/post.php",
-		 *        "sServerMethod": "POST"
-		 *      } );
-		 *    } );
-		 */
-		"sServerMethod": "GET"
-	};
-	
-	
-	
-	/**
-	 * Column options that can be given to DataTables at initialisation time.
-	 *  @namespace
-	 */
-	DataTable.defaults.columns = {
-		/**
-		 * Allows a column's sorting to take multiple columns into account when 
-		 * doing a sort. For example first name / last name columns make sense to 
-		 * do a multi-column sort over the two columns.
-		 *  @type array
-		 *  @default null <i>Takes the value of the column index automatically</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *          { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
-		 *          { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
-		 *          { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [
-		 *          { "aDataSort": [ 0, 1 ] },
-		 *          { "aDataSort": [ 1, 0 ] },
-		 *          { "aDataSort": [ 2, 3, 4 ] },
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aDataSort": null,
-	
-	
-		/**
-		 * You can control the default sorting direction, and even alter the behaviour
-		 * of the sort handler (i.e. only allow ascending sorting etc) using this
-		 * parameter.
-		 *  @type array
-		 *  @default [ 'asc', 'desc' ]
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *          { "asSorting": [ "asc" ], "aTargets": [ 1 ] },
-		 *          { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] },
-		 *          { "asSorting": [ "desc" ], "aTargets": [ 3 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [
-		 *          null,
-		 *          { "asSorting": [ "asc" ] },
-		 *          { "asSorting": [ "desc", "asc", "asc" ] },
-		 *          { "asSorting": [ "desc" ] },
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"asSorting": [ 'asc', 'desc' ],
-	
-	
-		/**
-		 * Enable or disable filtering on the data in this column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "bSearchable": false, "aTargets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "bSearchable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSearchable": true,
-	
-	
-		/**
-		 * Enable or disable sorting on this column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "bSortable": false, "aTargets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "bSortable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSortable": true,
-	
-	
-		/**
-		 * When using fnRender() for a column, you may wish to use the original data
-		 * (before rendering) for sorting and filtering (the default is to used the
-		 * rendered data that the user can see). This may be useful for dates etc.
-		 * 
-		 * *NOTE* It is it is advisable now to use mDataProp as a function and make 
-		 * use of the 'type' that it gives, allowing (potentially) different data to
-		 * be used for sorting, filtering, display and type detection.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          {
-		 *            "fnRender": function ( oObj ) {
-		 *              return oObj.aData[0] +' '+ oObj.aData[3];
-		 *            },
-		 *            "bUseRendered": false,
-		 *            "aTargets": [ 0 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          {
-		 *            "fnRender": function ( oObj ) {
-		 *              return oObj.aData[0] +' '+ oObj.aData[3];
-		 *            },
-		 *            "bUseRendered": false
-		 *          },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"bUseRendered": true,
-	
-	
-		/**
-		 * Enable or disable the display of this column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "bVisible": false, "aTargets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "bVisible": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bVisible": true,
-		
-		
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to fnRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available (since it is not when fnRender is called).
-		 *  @type function
-		 *  @param {element} nTd The TD node that has been created
-		 *  @param {*} sData The Data for the cell
-		 *  @param {array|object} oData The data for the whole row
-		 *  @param {int} iRow The row index for the aoData data store
-		 *  @param {int} iCol The column index for aoColumns
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ {
-		 *          "aTargets": [3],
-		 *          "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
-		 *            if ( sData == "1.7" ) {
-		 *              $(nTd).css('color', 'blue')
-		 *            }
-		 *          }
-		 *        } ]
-		 *      });
-		 *    } );
-		 */
-		"fnCreatedCell": null,
-	
-	
-		/**
-		 * Custom display function that will be called for the display of each cell in
-		 * this column.
-		 *  @type function
-		 *  @param {object} o Object with the following parameters:
-		 *  @param {int}    o.iDataRow The row in aoData
-		 *  @param {int}    o.iDataColumn The column in question
-		 *  @param {array}  o.aData The data for the row in question
-		 *  @param {object} o.oSettings The settings object for this DataTables instance
-		 *  @param {object} o.mDataProp The data property used for this column
-		 *  @param {*}      val The current cell value
-		 *  @returns {string} The string you which to use in the display
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          {
-		 *            "fnRender": function ( o, val ) {
-		 *              return o.aData[0] +' '+ o.aData[3];
-		 *            },
-		 *            "aTargets": [ 0 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "fnRender": function ( o, val ) {
-		 *            return o.aData[0] +' '+ o.aData[3];
-		 *          } },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"fnRender": null,
-	
-	
-		/**
-		 * The column index (starting from 0!) that you wish a sort to be performed
-		 * upon when this column is selected for sorting. This can be used for sorting
-		 * on hidden columns for example.
-		 *  @type int
-		 *  @default -1 <i>Use automatically calculated column index</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "iDataSort": 1, "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "iDataSort": 1 },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"iDataSort": -1,
-	
-	
-		/**
-		 * This property can be used to read data from any JSON data source property,
-		 * including deeply nested objects / properties. mDataProp can be given in a
-		 * number of different ways which effect its behaviour:
-		 *   <ul>
-		 *     <li>integer - treated as an array index for the data source. This is the
-		 *       default that DataTables uses (incrementally increased for each column).</li>
-		 *     <li>string - read an object property from the data source. Note that you can
-		 *       use Javascript dotted notation to read deep properties/arrays from the
-		 *       data source.</li>
-		 *     <li>null - the sDefaultContent option will be used for the cell (null
-		 *       by default, so you will need to specify the default content you want -
-		 *       typically an empty string). This can be useful on generated columns such 
-		 *       as edit / delete action columns.</li>
-		 *     <li>function - the function given will be executed whenever DataTables 
-		 *       needs to set or get the data for a cell in the column. The function 
-		 *       takes three parameters:
-		 *       <ul>
-		 *         <li>{array|object} The data source for the row</li>
-		 *         <li>{string} The type call data requested - this will be 'set' when
-		 *           setting data or 'filter', 'display', 'type', 'sort' or undefined when 
-		 *           gathering data. Note that when <i>undefined</i> is given for the type
-		 *           DataTables expects to get the raw data for the object back</li>
-		 *         <li>{*} Data to set when the second parameter is 'set'.</li>
-		 *       </ul>
-		 *       The return value from the function is not required when 'set' is the type
-		 *       of call, but otherwise the return is what will be used for the data
-		 *       requested.</li>
-		 *    </ul>
-		 *  @type string|int|function|null
-		 *  @default null <i>Use automatically calculated column index</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Read table data from objects
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/deep.txt",
-		 *        "aoColumns": [
-		 *          { "mDataProp": "engine" },
-		 *          { "mDataProp": "browser" },
-		 *          { "mDataProp": "platform.inner" },
-		 *          { "mDataProp": "platform.details.0" },
-		 *          { "mDataProp": "platform.details.1" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 * 
-		 *  @example
-		 *    // Using mDataProp as a function to provide different information for
-		 *    // sorting, filtering and display. In this case, currency (price)
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *        {
-		 *          "aTargets": [ 0 ],
-		 *          "mDataProp": function ( source, type, val ) {
-		 *            if (type === 'set') {
-		 *              source.price = val;
-		 *              // Store the computed dislay and filter values for efficiency
-		 *              source.price_display = val=="" ? "" : "$"+numberFormat(val);
-		 *              source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
-		 *              return;
-		 *            }
-		 *            else if (type === 'display') {
-		 *              return source.price_display;
-		 *            }
-		 *            else if (type === 'filter') {
-		 *              return source.price_filter;
-		 *            }
-		 *            // 'sort', 'type' and undefined all just use the integer
-		 *            return source.price;
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"mDataProp": null,
-	
-	
-		/**
-		 * Change the cell type created for the column - either TD cells or TH cells. This
-		 * can be useful as TH cells have semantic meaning in the table body, allowing them
-		 * to act as a header for a row (you may wish to add scope='row' to the TH elements).
-		 *  @type string
-		 *  @default td
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Make the first column use TH cells
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *        {
-		 *          "aTargets": [ 0 ],
-		 *          "sCellType": "th"
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sCellType": "td",
-	
-	
-		/**
-		 * Class to give to each cell in this column.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sClass": "my_class", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sClass": "my_class" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sClass": "",
-		
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer 
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 * Generally you shouldn't need this, and it is not documented on the 
-		 * general DataTables.net documentation
-		 *  @type string
-		 *  @default <i>Empty string<i>
-		 *  @dtopt Columns
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "sContentPadding": "mmm"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sContentPadding": "",
-	
-	
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because mDataProp
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          {
-		 *            "mDataProp": null,
-		 *            "sDefaultContent": "Edit",
-		 *            "aTargets": [ -1 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "mDataProp": null,
-		 *            "sDefaultContent": "Edit"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sDefaultContent": null,
-	
-	
-		/**
-		 * This parameter is only used in DataTables' server-side processing. It can
-		 * be exceptionally useful to know what columns are being displayed on the
-		 * client side, and to map these to database fields. When defined, the names
-		 * also allow DataTables to reorder information from the server if it comes
-		 * back in an unexpected order (i.e. if you switch your columns around on the
-		 * client-side, your server-side code does not also need updating).
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sName": "engine", "aTargets": [ 0 ] },
-		 *          { "sName": "browser", "aTargets": [ 1 ] },
-		 *          { "sName": "platform", "aTargets": [ 2 ] },
-		 *          { "sName": "version", "aTargets": [ 3 ] },
-		 *          { "sName": "grade", "aTargets": [ 4 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sName": "engine" },
-		 *          { "sName": "browser" },
-		 *          { "sName": "platform" },
-		 *          { "sName": "version" },
-		 *          { "sName": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sName": "",
-	
-	
-		/**
-		 * Defines a data source type for the sorting which can be used to read
-		 * realtime information from the table (updating the internally cached
-		 * version) prior to sorting. This allows sorting to occur on user editable
-		 * elements such as form inputs.
-		 *  @type string
-		 *  @default std
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *          { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] },
-		 *          { "sType": "numeric", "aTargets": [ 3 ] },
-		 *          { "sSortDataType": "dom-select", "aTargets": [ 4 ] },
-		 *          { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [
-		 *          null,
-		 *          null,
-		 *          { "sSortDataType": "dom-text" },
-		 *          { "sSortDataType": "dom-text", "sType": "numeric" },
-		 *          { "sSortDataType": "dom-select" },
-		 *          { "sSortDataType": "dom-checkbox" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sSortDataType": "std",
-	
-	
-		/**
-		 * The title of this column.
-		 *  @type string
-		 *  @default null <i>Derived from the 'TH' value for this column in the 
-		 *    original HTML table.</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sTitle": "My column title", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sTitle": "My column title" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sTitle": null,
-	
-	
-		/**
-		 * The type allows you to specify how the data for this column will be sorted.
-		 * Four types (string, numeric, date and html (which will strip HTML tags
-		 * before sorting)) are currently available. Note that only date formats
-		 * understood by Javascript's Date() object will be accepted as type date. For
-		 * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric',
-		 * 'date' or 'html' (by default). Further types can be adding through
-		 * plug-ins.
-		 *  @type string
-		 *  @default null <i>Auto-detected from raw data</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sType": "html", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sType": "html" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sType": null,
-	
-	
-		/**
-		 * Defining the width of the column, this parameter may take any CSS value
-		 * (3em, 20px etc). DataTables applys 'smart' widths to columns which have not
-		 * been given a specific width through this interface ensuring that the table
-		 * remains readable.
-		 *  @type string
-		 *  @default null <i>Automatic</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sWidth": "20%", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sWidth": "20%" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sWidth": null
-	};
-	
-	
-	
-	/**
-	 * DataTables settings object - this holds all the information needed for a
-	 * given table, including configuration, data and current application of the
-	 * table options. DataTables does not have a single instance for each DataTable
-	 * with the settings attached to that instance, but rather instances of the
-	 * DataTable "class" are created on-the-fly as needed (typically by a 
-	 * $().dataTable() call) and the settings object is then applied to that
-	 * instance.
-	 * 
-	 * Note that this object is related to {@link DataTable.defaults} but this 
-	 * one is the internal data store for DataTables's cache of columns. It should
-	 * NOT be manipulated outside of DataTables. Any configuration should be done
-	 * through the initialisation options.
-	 *  @namespace
-	 *  @todo Really should attach the settings object to individual instances so we
-	 *    don't need to create new instances on each $().dataTable() call (if the
-	 *    table already exists). It would also save passing oSettings around and
-	 *    into every single function. However, this is a very significant 
-	 *    architecture change for DataTables and will almost certainly break
-	 *    backwards compatibility with older installations. This is something that
-	 *    will be done in 2.0.
-	 */
-	DataTable.models.oSettings = {
-		/**
-		 * Primary features of DataTables and their enablement state.
-		 *  @namespace
-		 */
-		"oFeatures": {
-			
-			/**
-			 * Flag to say if DataTables should automatically try to calculate the
-			 * optimum table and columns widths (true) or not (false).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bAutoWidth": null,
-	
-			/**
-			 * Delay the creation of TR and TD elements until they are actually
-			 * needed by a driven page draw. This can give a significant speed
-			 * increase for Ajax source and Javascript source data, but makes no
-			 * difference at all fro DOM and server-side processing tables.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bDeferRender": null,
-			
-			/**
-			 * Enable filtering on the table or not. Note that if this is disabled
-			 * then there is no filtering at all on the table, including fnFilter.
-			 * To just remove the filtering input use sDom and remove the 'f' option.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bFilter": null,
-			
-			/**
-			 * Table information element (the 'Showing x of y records' div) enable
-			 * flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bInfo": null,
-			
-			/**
-			 * Present a user control allowing the end user to change the page size
-			 * when pagination is enabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bLengthChange": null,
-	
-			/**
-			 * Pagination enabled or not. Note that if this is disabled then length
-			 * changing must also be disabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bPaginate": null,
-			
-			/**
-			 * Processing indicator enable flag whenever DataTables is enacting a
-			 * user request - typically an Ajax request for server-side processing.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bProcessing": null,
-			
-			/**
-			 * Server-side processing enabled flag - when enabled DataTables will
-			 * get all data from the server for every draw - there is no filtering,
-			 * sorting or paging done on the client-side.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bServerSide": null,
-			
-			/**
-			 * Sorting enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSort": null,
-			
-			/**
-			 * Apply a class to the columns which are being sorted to provide a
-			 * visual highlight or not. This can slow things down when enabled since
-			 * there is a lot of DOM interaction.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSortClasses": null,
-			
-			/**
-			 * State saving enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bStateSave": null
-		},
-		
-	
-		/**
-		 * Scrolling settings for a table.
-		 *  @namespace
-		 */
-		"oScroll": {
-			/**
-			 * Indicate if DataTables should be allowed to set the padding / margin
-			 * etc for the scrolling header elements or not. Typically you will want
-			 * this.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bAutoCss": null,
-			
-			/**
-			 * When the table is shorter in height than sScrollY, collapse the
-			 * table container down to the height of the table (when true).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bCollapse": null,
-			
-			/**
-			 * Infinite scrolling enablement flag. Now deprecated in favour of
-			 * using the Scroller plug-in.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bInfinite": null,
-			
-			/**
-			 * Width of the scrollbar for the web-browser's platform. Calculated
-			 * during table initialisation.
-			 *  @type int
-			 *  @default 0
-			 */
-			"iBarWidth": 0,
-			
-			/**
-			 * Space (in pixels) between the bottom of the scrolling container and 
-			 * the bottom of the scrolling viewport before the next page is loaded
-			 * when using infinite scrolling.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type int
-			 */
-			"iLoadGap": null,
-			
-			/**
-			 * Viewport width for horizontal scrolling. Horizontal scrolling is 
-			 * disabled if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sX": null,
-			
-			/**
-			 * Width to expand the table to when using x-scrolling. Typically you
-			 * should not need to use this.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 *  @deprecated
-			 */
-			"sXInner": null,
-			
-			/**
-			 * Viewport height for vertical scrolling. Vertical scrolling is disabled
-			 * if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sY": null
-		},
-		
-		/**
-		 * Language information for the table.
-		 *  @namespace
-		 *  @extends DataTable.defaults.oLanguage
-		 */
-		"oLanguage": {
-			/**
-			 * Information callback function. See 
-			 * {@link DataTable.defaults.fnInfoCallback}
-			 *  @type function
-			 *  @default 
-			 */
-			"fnInfoCallback": null
-		},
-		
-		/**
-		 * Array referencing the nodes which are used for the features. The 
-		 * parameters of this object match what is allowed by sDom - i.e.
-		 *   <ul>
-		 *     <li>'l' - Length changing</li>
-		 *     <li>'f' - Filtering input</li>
-		 *     <li>'t' - The table!</li>
-		 *     <li>'i' - Information</li>
-		 *     <li>'p' - Pagination</li>
-		 *     <li>'r' - pRocessing</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aanFeatures": [],
-		
-		/**
-		 * Store data information - see {@link DataTable.models.oRow} for detailed
-		 * information.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoData": [],
-		
-		/**
-		 * Array of indexes which are in the current display (after filtering etc)
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplay": [],
-		
-		/**
-		 * Array of indexes for display - no filtering
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplayMaster": [],
-		
-		/**
-		 * Store information about each column that is in use
-		 *  @type array
-		 *  @default []
-		 */
-		"aoColumns": [],
-		
-		/**
-		 * Store information about the table's header
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeader": [],
-		
-		/**
-		 * Store information about the table's footer
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooter": [],
-		
-		/**
-		 * Search data array for regular expression searching
-		 *  @type array
-		 *  @default []
-		 */
-		"asDataSearch": [],
-		
-		/**
-		 * Store the applied global search information in case we want to force a 
-		 * research or compare the old search to a new one.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 */
-		"oPreviousSearch": {},
-		
-		/**
-		 * Store the applied search for each column - see 
-		 * {@link DataTable.models.oSearch} for the format that is used for the
-		 * filtering information for each column.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreSearchCols": [],
-		
-		/**
-		 * Sorting that is applied to the table. Note that the inner arrays are
-		 * used in the following manner:
-		 * <ul>
-		 *   <li>Index 0 - column number</li>
-		 *   <li>Index 1 - current sorting direction</li>
-		 *   <li>Index 2 - index of asSorting for this column</li>
-		 * </ul>
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @todo These inner arrays should really be objects
-		 */
-		"aaSorting": null,
-		
-		/**
-		 * Sorting that is always applied to the table (i.e. prefixed in front of
-		 * aaSorting).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array|null
-		 *  @default null
-		 */
-		"aaSortingFixed": null,
-		
-		/**
-		 * Classes to use for the striping of a table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"asStripeClasses": null,
-		
-		/**
-		 * If restoring a table - we should restore its striping classes as well
-		 *  @type array
-		 *  @default []
-		 */
-		"asDestroyStripes": [],
-		
-		/**
-		 * If restoring a table - we should restore its width 
-		 *  @type int
-		 *  @default 0
-		 */
-		"sDestroyWidth": 0,
-		
-		/**
-		 * Callback functions array for every time a row is inserted (i.e. on a draw).
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCallback": [],
-		
-		/**
-		 * Callback functions for the header on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeaderCallback": [],
-		
-		/**
-		 * Callback function for the footer on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooterCallback": [],
-		
-		/**
-		 * Array of callback functions for draw callback functions
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDrawCallback": [],
-		
-		/**
-		 * Array of callback functions for row created function
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCreatedCallback": [],
-		
-		/**
-		 * Callback functions for just before the table is redrawn. A return of 
-		 * false will be used to cancel the draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreDrawCallback": [],
-		
-		/**
-		 * Callback functions for when the table has been initialised.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoInitComplete": [],
-	
-		
-		/**
-		 * Callbacks for modifying the settings to be stored for state saving, prior to
-		 * saving state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSaveParams": [],
-		
-		/**
-		 * Callbacks for modifying the settings that have been stored for state saving
-		 * prior to using the stored values to restore the state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoadParams": [],
-		
-		/**
-		 * Callbacks for operating on the settings object once the saved state has been
-		 * loaded
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoaded": [],
-		
-		/**
-		 * Cache the table ID for quick access
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sTableId": "",
-		
-		/**
-		 * The TABLE node for the main table
-		 *  @type node
-		 *  @default null
-		 */
-		"nTable": null,
-		
-		/**
-		 * Permanent ref to the thead element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTHead": null,
-		
-		/**
-		 * Permanent ref to the tfoot element - if it exists
-		 *  @type node
-		 *  @default null
-		 */
-		"nTFoot": null,
-		
-		/**
-		 * Permanent ref to the tbody element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTBody": null,
-		
-		/**
-		 * Cache the wrapper node (contains all DataTables controlled elements)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTableWrapper": null,
-		
-		/**
-		 * Indicate if when using server-side processing the loading of data 
-		 * should be deferred until the second draw.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDeferLoading": false,
-		
-		/**
-		 * Indicate if all required information has been read in
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bInitialised": false,
-		
-		/**
-		 * Information about open rows. Each object in the array has the parameters
-		 * 'nTr' and 'nParent'
-		 *  @type array
-		 *  @default []
-		 */
-		"aoOpenRows": [],
-		
-		/**
-		 * Dictate the positioning of DataTables' control elements - see
-		 * {@link DataTable.model.oInit.sDom}.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sDom": null,
-		
-		/**
-		 * Which type of pagination should be used.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string 
-		 *  @default two_button
-		 */
-		"sPaginationType": "two_button",
-		
-		/**
-		 * The cookie duration (for bStateSave) in seconds.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type int
-		 *  @default 0
-		 */
-		"iCookieDuration": 0,
-		
-		/**
-		 * The cookie name prefix.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sCookiePrefix": "",
-		
-		/**
-		 * Callback function for cookie creation.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 *  @default null
-		 */
-		"fnCookieCallback": null,
-		
-		/**
-		 * Array of callback functions for state saving. Each array element is an 
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings
-		 *       and the JSON string to save that has been thus far created. Returns
-		 *       a JSON string to be inserted into a json object 
-		 *       (i.e. '"param": [ 0, 1, 2]')</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSave": [],
-		
-		/**
-		 * Array of callback functions for state loading. Each array element is an 
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings 
-		 *       and the object stored. May return false to cancel state loading</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoad": [],
-		
-		/**
-		 * State that was loaded from the cookie. Useful for back reference
-		 *  @type object
-		 *  @default null
-		 */
-		"oLoadedState": null,
-		
-		/**
-		 * Source url for AJAX data for the table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sAjaxSource": null,
-		
-		/**
-		 * Property from a given object from which to read the table data from. This
-		 * can be an empty string (when not server-side processing), in which case 
-		 * it is  assumed an an array is given directly.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sAjaxDataProp": null,
-		
-		/**
-		 * Note if draw should be blocked while getting data
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bAjaxDataGet": true,
-		
-		/**
-		 * The last jQuery XHR object that was used for server-side data gathering. 
-		 * This can be used for working with the XHR information in one of the 
-		 * callbacks
-		 *  @type object
-		 *  @default null
-		 */
-		"jqXHR": null,
-		
-		/**
-		 * Function to get the server-side data.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnServerData": null,
-		
-		/**
-		 * Functions which are called prior to sending an Ajax request so extra 
-		 * parameters can easily be sent to the server
-		 *  @type array
-		 *  @default []
-		 */
-		"aoServerParams": [],
-		
-		/**
-		 * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if 
-		 * required).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sServerMethod": null,
-		
-		/**
-		 * Format numbers for display.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnFormatNumber": null,
-		
-		/**
-		 * List of options that can be used for the user selectable length menu.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"aLengthMenu": null,
-		
-		/**
-		 * Counter for the draws that the table does. Also used as a tracker for
-		 * server-side processing
-		 *  @type int
-		 *  @default 0
-		 */
-		"iDraw": 0,
-		
-		/**
-		 * Indicate if a redraw is being done - useful for Ajax
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDrawing": false,
-		
-		/**
-		 * Draw index (iDraw) of the last error when parsing the returned data
-		 *  @type int
-		 *  @default -1
-		 */
-		"iDrawError": -1,
-		
-		/**
-		 * Paging display length
-		 *  @type int
-		 *  @default 10
-		 */
-		"_iDisplayLength": 10,
-	
-		/**
-		 * Paging start point - aiDisplay index
-		 *  @type int
-		 *  @default 0
-		 */
-		"_iDisplayStart": 0,
-	
-		/**
-		 * Paging end point - aiDisplay index. Use fnDisplayEnd rather than
-		 * this property to get the end point
-		 *  @type int
-		 *  @default 10
-		 *  @private
-		 */
-		"_iDisplayEnd": 10,
-		
-		/**
-		 * Server-side processing - number of records in the result set
-		 * (i.e. before filtering), Use fnRecordsTotal rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type int
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsTotal": 0,
-	
-		/**
-		 * Server-side processing - number of records in the current display set
-		 * (i.e. after filtering). Use fnRecordsDisplay rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type boolean
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsDisplay": 0,
-		
-		/**
-		 * Flag to indicate if jQuery UI marking and classes should be used.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 */
-		"bJUI": null,
-		
-		/**
-		 * The classes to use for the table
-		 *  @type object
-		 *  @default {}
-		 */
-		"oClasses": {},
-		
-		/**
-		 * Flag attached to the settings object so you can check in the draw 
-		 * callback if filtering has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bFiltered": false,
-		
-		/**
-		 * Flag attached to the settings object so you can check in the draw 
-		 * callback if sorting has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bSorted": false,
-		
-		/**
-		 * Indicate that if multiple rows are in the header and there is more than 
-		 * one unique cell per column, if the top one (true) or bottom one (false) 
-		 * should be used for sorting / title by DataTables.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 */
-		"bSortCellsTop": null,
-		
-		/**
-		 * Initialisation object that is used for the table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInit": null,
-		
-		/**
-		 * Destroy callback functions - for plug-ins to attach themselves to the
-		 * destroy so they can clean up markup and events.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDestroyCallback": [],
-	
-		
-		/**
-		 * Get the number of records in the current record set, before filtering
-		 *  @type function
-		 */
-		"fnRecordsTotal": function ()
-		{
-			if ( this.oFeatures.bServerSide ) {
-				return parseInt(this._iRecordsTotal, 10);
-			} else {
-				return this.aiDisplayMaster.length;
-			}
-		},
-		
-		/**
-		 * Get the number of records in the current record set, after filtering
-		 *  @type function
-		 */
-		"fnRecordsDisplay": function ()
-		{
-			if ( this.oFeatures.bServerSide ) {
-				return parseInt(this._iRecordsDisplay, 10);
-			} else {
-				return this.aiDisplay.length;
-			}
-		},
-		
-		/**
-		 * Set the display end point - aiDisplay index
-		 *  @type function
-		 *  @todo Should do away with _iDisplayEnd and calculate it on-the-fly here
-		 */
-		"fnDisplayEnd": function ()
-		{
-			if ( this.oFeatures.bServerSide ) {
-				if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) {
-					return this._iDisplayStart+this.aiDisplay.length;
-				} else {
-					return Math.min( this._iDisplayStart+this._iDisplayLength, 
-						this._iRecordsDisplay );
-				}
-			} else {
-				return this._iDisplayEnd;
-			}
-		},
-		
-		/**
-		 * The DataTables object for this table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInstance": null,
-		
-		/**
-		 * Unique identifier for each instance of the DataTables object. If there
-		 * is an ID on the table node, then it takes that value, otherwise an
-		 * incrementing internal counter is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sInstance": null,
-	
-		/**
-		 * tabindex attribute value that is added to DataTables control elements, allowing
-		 * keyboard navigation of the table and its controls.
-		 */
-		"iTabIndex": 0,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollHead": null,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollFoot": null
-	};
-
-	/**
-	 * Extension object for DataTables that is used to provide all extension options.
-	 * 
-	 * Note that the <i>DataTable.ext</i> object is available through
-	 * <i>jQuery.fn.dataTable.ext</i> where it may be accessed and manipulated. It is
-	 * also aliased to <i>jQuery.fn.dataTableExt</i> for historic reasons.
-	 *  @namespace
-	 *  @extends DataTable.models.ext
-	 */
-	DataTable.ext = $.extend( true, {}, DataTable.models.ext );
-	
-	$.extend( DataTable.ext.oStdClasses, {
-		"sTable": "dataTable",
-	
-		/* Two buttons buttons */
-		"sPagePrevEnabled": "paginate_enabled_previous",
-		"sPagePrevDisabled": "paginate_disabled_previous",
-		"sPageNextEnabled": "paginate_enabled_next",
-		"sPageNextDisabled": "paginate_disabled_next",
-		"sPageJUINext": "",
-		"sPageJUIPrev": "",
-		
-		/* Full numbers paging buttons */
-		"sPageButton": "paginate_button",
-		"sPageButtonActive": "paginate_active",
-		"sPageButtonStaticDisabled": "paginate_button paginate_button_disabled",
-		"sPageFirst": "first",
-		"sPagePrevious": "previous",
-		"sPageNext": "next",
-		"sPageLast": "last",
-		
-		/* Striping classes */
-		"sStripeOdd": "odd",
-		"sStripeEven": "even",
-		
-		/* Empty row */
-		"sRowEmpty": "dataTables_empty",
-		
-		/* Features */
-		"sWrapper": "dataTables_wrapper",
-		"sFilter": "dataTables_filter",
-		"sInfo": "dataTables_info",
-		"sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
-		"sLength": "dataTables_length",
-		"sProcessing": "dataTables_processing",
-		
-		/* Sorting */
-		"sSortAsc": "sorting_asc",
-		"sSortDesc": "sorting_desc",
-		"sSortable": "sorting", /* Sortable in both directions */
-		"sSortableAsc": "sorting_asc_disabled",
-		"sSortableDesc": "sorting_desc_disabled",
-		"sSortableNone": "sorting_disabled",
-		"sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
-		"sSortJUIAsc": "",
-		"sSortJUIDesc": "",
-		"sSortJUI": "",
-		"sSortJUIAscAllowed": "",
-		"sSortJUIDescAllowed": "",
-		"sSortJUIWrapper": "",
-		"sSortIcon": "",
-		
-		/* Scrolling */
-		"sScrollWrapper": "dataTables_scroll",
-		"sScrollHead": "dataTables_scrollHead",
-		"sScrollHeadInner": "dataTables_scrollHeadInner",
-		"sScrollBody": "dataTables_scrollBody",
-		"sScrollFoot": "dataTables_scrollFoot",
-		"sScrollFootInner": "dataTables_scrollFootInner",
-		
-		/* Misc */
-		"sFooterTH": "",
-		"sJUIHeader": "",
-		"sJUIFooter": ""
-	} );
-	
-	
-	$.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, {
-		/* Two buttons buttons */
-		"sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left",
-		"sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",
-		"sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right",
-		"sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",
-		"sPageJUINext": "ui-icon ui-icon-circle-arrow-e",
-		"sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w",
-		
-		/* Full numbers paging buttons */
-		"sPageButton": "fg-button ui-button ui-state-default",
-		"sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled",
-		"sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled",
-		"sPageFirst": "first ui-corner-tl ui-corner-bl",
-		"sPageLast": "last ui-corner-tr ui-corner-br",
-		
-		/* Features */
-		"sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
-			"ui-buttonset-multi paging_", /* Note that the type is postfixed */
-		
-		/* Sorting */
-		"sSortAsc": "ui-state-default",
-		"sSortDesc": "ui-state-default",
-		"sSortable": "ui-state-default",
-		"sSortableAsc": "ui-state-default",
-		"sSortableDesc": "ui-state-default",
-		"sSortableNone": "ui-state-default",
-		"sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n",
-		"sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s",
-		"sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s",
-		"sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n",
-		"sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s",
-		"sSortJUIWrapper": "DataTables_sort_wrapper",
-		"sSortIcon": "DataTables_sort_icon",
-		
-		/* Scrolling */
-		"sScrollHead": "dataTables_scrollHead ui-state-default",
-		"sScrollFoot": "dataTables_scrollFoot ui-state-default",
-		
-		/* Misc */
-		"sFooterTH": "ui-state-default",
-		"sJUIHeader": "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix",
-		"sJUIFooter": "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"
-	} );
-	
-	
-	/*
-	 * Variable: oPagination
-	 * Purpose:  
-	 * Scope:    jQuery.fn.dataTableExt
-	 */
-	$.extend( DataTable.ext.oPagination, {
-		/*
-		 * Variable: two_button
-		 * Purpose:  Standard two button (forward/back) pagination
-		 * Scope:    jQuery.fn.dataTableExt.oPagination
-		 */
-		"two_button": {
-			/*
-			 * Function: oPagination.two_button.fnInit
-			 * Purpose:  Initialise dom elements required for pagination with forward/back buttons only
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           node:nPaging - the DIV which contains this pagination control
-			 *           function:fnCallbackDraw - draw function which must be called on update
-			 */
-			"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
-			{
-				var oLang = oSettings.oLanguage.oPaginate;
-				var oClasses = oSettings.oClasses;
-				var fnClickHandler = function ( e ) {
-					if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
-					{
-						fnCallbackDraw( oSettings );
-					}
-				};
-	
-				var sAppend = (!oSettings.bJUI) ?
-					'<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+
-					'<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>'
-					:
-					'<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+
-					'<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>';
-				$(nPaging).append( sAppend );
-				
-				var els = $('a', nPaging);
-				var nPrevious = els[0],
-					nNext = els[1];
-				
-				oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
-				oSettings.oApi._fnBindAction( nNext,     {action: "next"},     fnClickHandler );
-				
-				/* ID the first elements only */
-				if ( !oSettings.aanFeatures.p )
-				{
-					nPaging.id = oSettings.sTableId+'_paginate';
-					nPrevious.id = oSettings.sTableId+'_previous';
-					nNext.id = oSettings.sTableId+'_next';
-	
-					nPrevious.setAttribute('aria-controls', oSettings.sTableId);
-					nNext.setAttribute('aria-controls', oSettings.sTableId);
-				}
-			},
-			
-			/*
-			 * Function: oPagination.two_button.fnUpdate
-			 * Purpose:  Update the two button pagination at the end of the draw
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           function:fnCallbackDraw - draw function to call on page change
-			 */
-			"fnUpdate": function ( oSettings, fnCallbackDraw )
-			{
-				if ( !oSettings.aanFeatures.p )
-				{
-					return;
-				}
-				
-				var oClasses = oSettings.oClasses;
-				var an = oSettings.aanFeatures.p;
-	
-				/* Loop over each instance of the pager */
-				for ( var i=0, iLen=an.length ; i<iLen ; i++ )
-				{
-					if ( an[i].childNodes.length !== 0 )
-					{
-						an[i].childNodes[0].className = ( oSettings._iDisplayStart === 0 ) ? 
-							oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled;
-						
-						an[i].childNodes[1].className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? 
-							oClasses.sPageNextDisabled : oClasses.sPageNextEnabled;
-					}
-				}
-			}
-		},
-		
-		
-		/*
-		 * Variable: iFullNumbersShowPages
-		 * Purpose:  Change the number of pages which can be seen
-		 * Scope:    jQuery.fn.dataTableExt.oPagination
-		 */
-		"iFullNumbersShowPages": 5,
-		
-		/*
-		 * Variable: full_numbers
-		 * Purpose:  Full numbers pagination
-		 * Scope:    jQuery.fn.dataTableExt.oPagination
-		 */
-		"full_numbers": {
-			/*
-			 * Function: oPagination.full_numbers.fnInit
-			 * Purpose:  Initialise dom elements required for pagination with a list of the pages
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           node:nPaging - the DIV which contains this pagination control
-			 *           function:fnCallbackDraw - draw function which must be called on update
-			 */
-			"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
-			{
-				var oLang = oSettings.oLanguage.oPaginate;
-				var oClasses = oSettings.oClasses;
-				var fnClickHandler = function ( e ) {
-					if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
-					{
-						fnCallbackDraw( oSettings );
-					}
-				};
-	
-				$(nPaging).append(
-					'<a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a>'+
-					'<a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+
-					'<span></span>'+
-					'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'+
-					'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a>'
-				);
-				var els = $('a', nPaging);
-				var nFirst = els[0],
-					nPrev = els[1],
-					nNext = els[2],
-					nLast = els[3];
-				
-				oSettings.oApi._fnBindAction( nFirst, {action: "first"},    fnClickHandler );
-				oSettings.oApi._fnBindAction( nPrev,  {action: "previous"}, fnClickHandler );
-				oSettings.oApi._fnBindAction( nNext,  {action: "next"},     fnClickHandler );
-				oSettings.oApi._fnBindAction( nLast,  {action: "last"},     fnClickHandler );
-				
-				/* ID the first elements only */
-				if ( !oSettings.aanFeatures.p )
-				{
-					nPaging.id = oSettings.sTableId+'_paginate';
-					nFirst.id =oSettings.sTableId+'_first';
-					nPrev.id =oSettings.sTableId+'_previous';
-					nNext.id =oSettings.sTableId+'_next';
-					nLast.id =oSettings.sTableId+'_last';
-				}
-			},
-			
-			/*
-			 * Function: oPagination.full_numbers.fnUpdate
-			 * Purpose:  Update the list of page buttons shows
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           function:fnCallbackDraw - draw function to call on page change
-			 */
-			"fnUpdate": function ( oSettings, fnCallbackDraw )
-			{
-				if ( !oSettings.aanFeatures.p )
-				{
-					return;
-				}
-				
-				var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages;
-				var iPageCountHalf = Math.floor(iPageCount / 2);
-				var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
-				var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
-				var sList = "";
-				var iStartButton, iEndButton, i, iLen;
-				var oClasses = oSettings.oClasses;
-				var anButtons, anStatic, nPaginateList;
-				var an = oSettings.aanFeatures.p;
-				var fnBind = function (j) {
-					oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
-						/* Use the information in the element to jump to the required page */
-						oSettings.oApi._fnPageChange( oSettings, e.data.page );
-						fnCallbackDraw( oSettings );
-						e.preventDefault();
-					} );
-				};
-				
-				/* Pages calculation */
-				if ( oSettings._iDisplayLength === -1 )
-				{
-					iStartButton = 1;
-					iEndButton = 1;
-					iCurrentPage = 1;
-				}
-				else if (iPages < iPageCount)
-				{
-					iStartButton = 1;
-					iEndButton = iPages;
-				}
-				else if (iCurrentPage <= iPageCountHalf)
-				{
-					iStartButton = 1;
-					iEndButton = iPageCount;
-				}
-				else if (iCurrentPage >= (iPages - iPageCountHalf))
-				{
-					iStartButton = iPages - iPageCount + 1;
-					iEndButton = iPages;
-				}
-				else
-				{
-					iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
-					iEndButton = iStartButton + iPageCount - 1;
-				}
-	
-				
-				/* Build the dynamic list */
-				for ( i=iStartButton ; i<=iEndButton ; i++ )
-				{
-					sList += (iCurrentPage !== i) ?
-						'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' :
-						'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>';
-				}
-				
-				/* Loop over each instance of the pager */
-				for ( i=0, iLen=an.length ; i<iLen ; i++ )
-				{
-					if ( an[i].childNodes.length === 0 )
-					{
-						continue;
-					}
-					
-					/* Build up the dynamic list forst - html and listeners */
-					$('span:eq(0)', an[i])
-						.html( sList )
-						.children('a').each( fnBind );
-					
-					/* Update the premanent botton's classes */
-					anButtons = an[i].getElementsByTagName('a');
-					anStatic = [
-						anButtons[0], anButtons[1], 
-						anButtons[anButtons.length-2], anButtons[anButtons.length-1]
-					];
-	
-					$(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled );
-					$([anStatic[0], anStatic[1]]).addClass( 
-						(iCurrentPage==1) ?
-							oClasses.sPageButtonStaticDisabled :
-							oClasses.sPageButton
-					);
-					$([anStatic[2], anStatic[3]]).addClass(
-						(iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ?
-							oClasses.sPageButtonStaticDisabled :
-							oClasses.sPageButton
-					);
-				}
-			}
-		}
-	} );
-	
-	$.extend( DataTable.ext.oSort, {
-		/*
-		 * text sorting
-		 */
-		"string-pre": function ( a )
-		{
-			if ( typeof a != 'string' ) {
-				a = (a !== null && a.toString) ? a.toString() : '';
-			}
-			return a.toLowerCase();
-		},
-	
-		"string-asc": function ( x, y )
-		{
-			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		},
-		
-		"string-desc": function ( x, y )
-		{
-			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		},
-		
-		
-		/*
-		 * html sorting (ignore html tags)
-		 */
-		"html-pre": function ( a )
-		{
-			return a.replace( /<.*?>/g, "" ).toLowerCase();
-		},
-		
-		"html-asc": function ( x, y )
-		{
-			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		},
-		
-		"html-desc": function ( x, y )
-		{
-			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		},
-		
-		
-		/*
-		 * date sorting
-		 */
-		"date-pre": function ( a )
-		{
-			var x = Date.parse( a );
-			
-			if ( isNaN(x) || x==="" )
-			{
-				x = Date.parse( "01/01/1970 00:00:00" );
-			}
-			return x;
-		},
-	
-		"date-asc": function ( x, y )
-		{
-			return x - y;
-		},
-		
-		"date-desc": function ( x, y )
-		{
-			return y - x;
-		},
-		
-		
-		/*
-		 * numerical sorting
-		 */
-		"numeric-pre": function ( a )
-		{
-			return (a=="-" || a==="") ? 0 : a*1;
-		},
-	
-		"numeric-asc": function ( x, y )
-		{
-			return x - y;
-		},
-		
-		"numeric-desc": function ( x, y )
-		{
-			return y - x;
-		}
-	} );
-	
-	
-	$.extend( DataTable.ext.aTypes, [
-		/*
-		 * Function: -
-		 * Purpose:  Check to see if a string is numeric
-		 * Returns:  string:'numeric' or null
-		 * Inputs:   mixed:sText - string to check
-		 */
-		function ( sData )
-		{
-			/* Allow zero length strings as a number */
-			if ( typeof sData === 'number' )
-			{
-				return 'numeric';
-			}
-			else if ( typeof sData !== 'string' )
-			{
-				return null;
-			}
-			
-			var sValidFirstChars = "0123456789-";
-			var sValidChars = "0123456789.";
-			var Char;
-			var bDecimal = false;
-			
-			/* Check for a valid first char (no period and allow negatives) */
-			Char = sData.charAt(0); 
-			if (sValidFirstChars.indexOf(Char) == -1) 
-			{
-				return null;
-			}
-			
-			/* Check all the other characters are valid */
-			for ( var i=1 ; i<sData.length ; i++ ) 
-			{
-				Char = sData.charAt(i); 
-				if (sValidChars.indexOf(Char) == -1) 
-				{
-					return null;
-				}
-				
-				/* Only allowed one decimal place... */
-				if ( Char == "." )
-				{
-					if ( bDecimal )
-					{
-						return null;
-					}
-					bDecimal = true;
-				}
-			}
-			
-			return 'numeric';
-		},
-		
-		/*
-		 * Function: -
-		 * Purpose:  Check to see if a string is actually a formatted date
-		 * Returns:  string:'date' or null
-		 * Inputs:   string:sText - string to check
-		 */
-		function ( sData )
-		{
-			var iParse = Date.parse(sData);
-			if ( (iParse !== null && !isNaN(iParse)) || (typeof sData === 'string' && sData.length === 0) )
-			{
-				return 'date';
-			}
-			return null;
-		},
-		
-		/*
-		 * Function: -
-		 * Purpose:  Check to see if a string should be treated as an HTML string
-		 * Returns:  string:'html' or null
-		 * Inputs:   string:sText - string to check
-		 */
-		function ( sData )
-		{
-			if ( typeof sData === 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1 )
-			{
-				return 'html';
-			}
-			return null;
-		}
-	] );
-	
-
-	// jQuery aliases
-	$.fn.DataTable = DataTable;
-	$.fn.dataTable = DataTable;
-	$.fn.dataTableSettings = DataTable.settings;
-	$.fn.dataTableExt = DataTable.ext;
-
-
-	// Information about events fired by DataTables - for documentation.
-	/**
-	 * Draw event, fired whenever the table is redrawn on the page, at the same point as
-	 * fnDrawCallback. This may be useful for binding events or performing calculations when
-	 * the table is altered at all.
-	 *  @name DataTable#draw
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Filter event, fired when the filtering applied to the table (using the build in global
-	 * global filter, or column filters) is altered.
-	 *  @name DataTable#filter
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Page change event, fired when the paging of the table is altered.
-	 *  @name DataTable#page
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Sort event, fired when the sorting applied to the table is altered.
-	 *  @name DataTable#sort
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * DataTables initialisation complete event, fired when the table is fully drawn,
-	 * including Ajax data loaded, if Ajax data is required.
-	 *  @name DataTable#init
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The JSON object request from the server - only
-	 *    present if client-side Ajax sourced data is used</li></ol>
-	 */
-
-	/**
-	 * State save event, fired when the table has changed state a new state save is required.
-	 * This method allows modification of the state saving object prior to actually doing the
-	 * save, including addition or other state properties (for plug-ins) or modification
-	 * of a DataTables core property.
-	 *  @name DataTable#stateSaveParams
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The state information to be saved
-	 */
-
-	/**
-	 * State load event, fired when the table is loading state from the stored data, but
-	 * prior to the settings object being modified by the saved state - allowing modification
-	 * of the saved state is required or loading of state for a plug-in.
-	 *  @name DataTable#stateLoadParams
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * State loaded event, fired when state has been loaded from stored data and the settings
-	 * object has been modified by the loaded data.
-	 *  @name DataTable#stateLoaded
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * Processing event, fired when DataTables is doing some kind of processing (be it,
-	 * sort, filter or anything else). Can be used to indicate to the end user that
-	 * there is something happening, or that something has finished.
-	 *  @name DataTable#processing
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {boolean} bShow Flag for if DataTables is doing processing or not
-	 */
-
-	/**
-	 * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to 
-	 * made to the server for new data (note that this trigger is called in fnServerData,
-	 * if you override fnServerData and which to use this event, you need to trigger it in
-	 * you success function).
-	 *  @name DataTable#xhr
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing
-	 * the bDestroy:true parameter in the initialisation object. This can be used to remove
-	 * bound events, added DOM nodes, etc.
-	 *  @name DataTable#destroy
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-}(jQuery, window, document, undefined));
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/jquery.fixheadertable.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/jquery.fixheadertable.js
deleted file mode 100644
index 9cfe00a5f2f845d1ae6015abf2db9e76404174a3..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/jquery.fixheadertable.js
+++ /dev/null
@@ -1,990 +0,0 @@
-/*
-* jquery.fixheadertable
-*
-* Copyright (c) 2010 Benjamin Léouzon
-* http://www.tablefixedheader.com/
-*
-* Licensed under MIT
-* http://www.opensource.org/licenses/mit-license.php
-* 
-* http://docs.jquery.com/Plugins/Authoring
-* jQuery authoring guidelines
-*
-* Launch  : December 2010
-* Version : 2.0
-*/
-
-(function($) { 
-
-	$.fn.fixheadertable = function(options) {
-
-		var defaults = {  
-				
-			caption		 : '',
-			
-			showhide	 : true,
-			
-			theme		 : 'ui',
-			
-			height		 : null,
-			
-			width		 : null, 
-			
-			minWidth	 : null,
-			
-			minWidthAuto : false,
-			
-			colratio	 : [],
-			
-			whiteSpace	 : 'nowrap',
-			
-			addTitles	 : false,
-			
-			zebra		 : false,
-			
-			zebraClass	 : 'ui-state-active',
-			
-			sortable	 : false, 
-			
-			sortedColId	 : null,
-			
-			sortType	 : [],
-			
-			dateFormat	 : 'd-m-y',
-			
-			pager		 : false,
-			
-			rowsPerPage	 : 10,
-			
-			resizeCol	 : false,
-			
-			minColWidth	 : 100,
-			
-			wrapper		 : true
-		};  
-		
-		var options = $.extend(defaults, options); 
-		
-		function util_getComputedStyle(element, property) {
-			
-			if (element.currentStyle) {
-				
-				var y = x.currentStyle[property];
-				
-			} else if (window.getComputedStyle) {
-				
-				var y = document.defaultView.getComputedStyle(element, null).getPropertyValue(property);
-			}
-			
-			return y;
-		}
-		
-		function util_getScrollbarWidth () {
-						
-			var inner = $('<p/>').addClass('t_fixed_header_scroll_inner');
-			
-			var outer = $('<div/>').addClass('t_fixed_header_scroll_outer');
-			
-			outer.append(inner);
-			
-			$(document.body).append(outer);
-			
-			var w1 = inner[0].offsetWidth;  
-			
-			outer.css('overflow', 'scroll');
-			
-			var w2 = inner[0].offsetWidth;  
-			
-			if (w1 == w2) w2 = outer[0].clientWidth;  
-			
-			outer.remove();
-			
-			return (w1 - w2);			
-		}
-		
-		function util_parseDate (format, date) {
-			
-			var tsp = {m : 1, d : 1, y : 1970, h : 0, i : 0, s : 0}, k, hl, dM;
-			
-			if(date && date !== null && date !== undefined){
-				
-				date = $.trim(date);
-				
-				date = date.split(/[\\\/:_;.\t\T\s-]/);
-				
-				format = format.split(/[\\\/:_;.\t\T\s-]/);
-				
-				var dfmt = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
-				
-				var afmt = ["am", "pm", "AM", "PM"];
-				
-				var h12to24 = function(ampm, h){
-					
-					if (ampm === 0){ if (h == 12) { h = 0;} }
-					
-					else { if (h != 12) { h += 12; } }
-					
-					return h;
-				};
-				
-				for (k=0, hl=format.length; k < hl; k++){
-					
-					if(format[k] == 'M') {
-						
-						dM = $.inArray(date[k],dfmt);
-						
-						if(dM !== -1 && dM < 12){date[k] = dM+1;}
-					}
-					
-					if(format[k] == 'F') {
-						
-						dM = $.inArray(date[k],dfmt);
-						
-						if(dM !== -1 && dM > 11){date[k] = dM+1-12;}
-					}
-					
-					if(format[k] == 'a') {
-						
-						dM = $.inArray(date[k],afmt);
-						
-						if(dM !== -1 && dM < 2 && date[k] == afmt[dM]){
-							
-							date[k] = dM;
-							
-							tsp.h = h12to24(date[k], tsp.h);
-						}
-					}
-					
-					if(format[k] == 'A') {
-						
-						dM = $.inArray(date[k],afmt);
-						
-						if(dM !== -1 && dM > 1 && date[k] == afmt[dM]){
-							
-							date[k] = dM-2;
-							
-							tsp.h = h12to24(date[k], tsp.h);
-						}
-					}
-					
-					if(date[k] !== undefined) {
-						
-						tsp[format[k].toLowerCase()] = parseInt(date[k],10);
-					}
-				}
-				
-				tsp.m = parseInt(tsp.m,10)-1;
-				
-				var ty = tsp.y;
-				
-				if (ty >= 70 && ty <= 99) {tsp.y = 1900 + tsp.y;}
-				
-				else if (ty >=0 && ty <=69) {tsp.y= 2000 + tsp.y;}
-			}
-			
-			return new Date(tsp.y, tsp.m, tsp.d, tsp.h, tsp.i, tsp.s,0);
-		}
-		
-		return this.each(function() {
-			
-			var _table				= $(this);
-			
-			var main_wrapper		= null;
-			
-			var nbcol 				= $('thead th', this).length;
-			
-			var _initialWidth		= $(this).width();
-			
-			var _wrapper 			= null;
-			
-			var _headerscontainer	= null;
-			
-			var _fillScrollbar 		= null;
-			
-			var _body 				= null;
-			
-			var _headers			= null;
-			
-			var _scrollWidth		= util_getScrollbarWidth();
-			
-			var _colgroup			= buildColgroup(nbcol);
-			
-			var _colgroup_body		= null;
-			
-			var _nbRowsPerPage		= 10;
-			
-			var _new_nbRowsPerPage  = null;
-			
-			var _nbpages			= null;
-			
-			var _nbpagesDiv			= null;
-			
-			var _currentpage 		= null;
-			
-			var _pager				= null;
-			
-			var _objectTable		= null;
-			
-			var _stripNum 			= /[\$,%]/g;
-			
-			var _resizeInfo 		= null;
-			
-			var _resizeGhost		= null;
-			
-			function buildTop (table) {
-				
-				_fillScrollbar = $('<div class="headtable ui-state-default" style="margin-right : 0px"></div>');
-				
-				_headerscontainer = _fillScrollbar;
-				
-				_headerscontainer.insertBefore(table);
-			}
-			
-			function buildColgroup (nbcol) {
-					
-				var colgroup = $('<colgroup />');				
-				
-				if (options.colratio.length == 0) {
-				
-					var temp = null;
-					
-					for (var i = 0; i < nbcol; i++) {
-						
-						temp = $('<col style="width : ' + (100/nbcol) + '%" />');
-						
-						colgroup.append(temp);
-
-						temp = null;
-					}
-				
-				} else if (options.colratio.length == nbcol) {
-					
-					var cw = 0;
-					
-					for (var i = 0; i < nbcol; i++) {
-						
-						temp = $('<col style="width : ' + options.colratio[i] + 'px" />');
-						
-						colgroup.append(temp);
-
-						temp = null;
-						
-						cw += parseInt(options.colratio[i]);
-					}
-					
-					$(_table).css('width', cw + 'px');
-				}
-				
-				return colgroup;
-			}
-			
-			function sortColumn (table, number, sens, th) {
-				
-				if ((options.sortType.length != 0) && (options.sortType.length == nbcol)) {
-					
-					var type = options.sortType[number];
-					
-					if (type == 'float') {						
-						
-						getSortKey = function(cell) {
-							
-							var key = parseFloat( String(cell).replace(_stripNum, ''));
-							
-							return isNaN(key) ? 0.00 : key;
-						}
-						
-					} else if (type == 'integer') {
-						
-						getSortKey = function(cell) {
-							
-							return cell ? parseFloat(String(cell).replace(_stripNum, '')) : 0;							
-						}
-						
-					} else if (type == 'date') {
-						
-						getSortKey = function(cell) {
-							
-							return util_parseDate(options.dateFormat, cell).getTime();
-						}
-						
-					} else {
-						
-						getSortKey = function(cell) {
-							
-							if(!cell) { cell =""; }
-							
-							return $.trim(String(cell).toLowerCase());
-						}
-					}
-					
-				} else {
-					
-					getSortKey = function(cell) {
-						
-						if(!cell) { cell =""; }
-						
-						return $.trim(String(cell).toLowerCase());
-					}
-				}
-				
-				_objectTable.sort(function(a, b){
-										
-					var x = getSortKey(a[number]);
-					
-				    var y = getSortKey(b[number]);
-				    
-				    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-				})
-					
-				if(sens == 'DESC'){
-					
-					_objectTable.reverse();
-				}
-				
-				(options.pager) ? moveToPage(table) : objectToTable(_objectTable, table);
-			}
-			
-			function objectToTable(objectArray, table) {
-				
-				var body = $('tbody', table);
-								
-				body.children().remove();
-				
-				if(options.zebra){
-					
-					for (var i = 0; i < objectArray.length; i++){
-						
-						(i%2) ? (tr = $('<tr class="' + options.zebraClass + '"></tr>')) : (tr = $('<tr></tr>'));									
-						
-						for (var j in objectArray[i]){
-							
-							tr.append($('<td class="ui-widget-content"></td>').html(objectArray[i][j]));
-						}	
-						
-						body.append(tr);
-					}
-					
-				} else {
-				
-					for (var i = 0; i < objectArray.length; i++){
-							
-						tr = $('<tr></tr>');				
-						
-						for (var j in objectArray[i]){
-							
-							tr.append($('<td class="ui-widget-content"></td>').html(objectArray[i][j]));
-						}	
-						
-						body.append(tr);
-					}
-				}
-			}
-			
-			function tableToObject(table) {
-
-				var objectArray = [];
-				
-				$('tr', table).each(function(i){
-					
-					var data = {};
-					
-					$('td', this).each(function(j){
-						
-						data[j] = $(this).html();
-					})
-					
-					objectArray.push(data);
-				});	
-
-				return objectArray;
-			}
-			
-			function buildHeaders(table) {
-				
-				_headers = $('<table class="head"/>').append(_colgroup).append($('thead', table));
-				
-				_headerscontainer.append(_headers);	
-				
-				_headers.wrap('<div></div>');
-				
-				var tab_headers = $('th', _headers);
-				
-				tab_headers.addClass('ui-widget-content ui-state-default');
-								
-				if(options.sortable){
-					
-					var th_div_sort = null;
-					
-					tab_headers.each(function(i){
-						
-						$(this).contents().wrapAll('<div class="ui-sort"></div>');
-						
-						th_div_sort = $('div.ui-sort', this);
-						
-						th_div_sort.click(function(){
-							
-							tab_headers.removeClass('ui-state-hover');
-							
-							$(this).parent().removeClass('ui-state-active').addClass('ui-state-hover');
-							
-							$('span.ui-icon', tab_headers).remove();
-							
-							if($(this).hasClass('sortedUp')){
-								
-								sortColumn(table, i, "DESC", this);
-								
-								$(this).removeClass('sortedUp').addClass('sortedDown');
-								
-								$(this).append('<span style="display : inline-block; vertical-align : middle" class="ui-icon ui-icon-triangle-1-s"></span>');
-								
-							} else {
-								
-								sortColumn(table, i, "ASC", this);
-								
-								$(this).removeClass('sortedDown').addClass('sortedUp');
-								
-								$(this).append('<span style="display : inline-block; vertical-align : middle" class="ui-icon ui-icon-triangle-1-n"></span>');
-							}
-							
-							_headerscontainer[0].scrollLeft = _body[0].scrollLeft;
-						})
-					});
-				    
-					$('div.ui-sort', tab_headers).addClass('hover');
-				}
-				
-				if(options.resizeCol && (options.colratio.length == nbcol)){
-					
-					tab_headers.each(function(i){
-						
-						var resizer = $('<span class="ui-resize"></span>');
-						
-						$(this).prepend(resizer);
-						
-						resizer.mousedown(function(e){
-							
-							dragStart(i, e);
-							
-							return false;
-						})						
-					});
-					
-					_main_wrapper.mousemove(function(e){
-						
-						if (_resizeInfo){
-							
-							dragMove(e);
-							
-							return false;
-						}
-					}).mouseup(function(){
-						
-						if (_resizeInfo){
-							
-							dragEnd();
-							
-							return false;
-						}
-						
-						return true;
-					});
-					
-					function getOffset(col){
-						
-						var ret = 0, cell = $('col', _colgroup), handler = $('th > span.ui-resize', _headers)[col], bso = _body[0].scrollLeft;
-						
-						for(var i = 0; i < col; i++){
-							
-							ret += parseInt(cell[i].style.width);
-						}
-						
-						return handler.offsetLeft + 5 + ret - bso;
-					}
-					
-					function dragStart(i, x){
-						
-						_resizeInfo = { id : i, startX : x.clientX , initTableWidth : getColratioWidth(), offset : getOffset(i) };
-						
-						_resizeGhost.css({ display : 'block', height : _headerscontainer.height() + _body.height() + 2 + 'px', left : _resizeInfo.offset + 'px', cursor : 'col-resize' });
-					}
-					
-					function dragMove(x){
-						
-						var diff = x.clientX - _resizeInfo.startX;
-						
-						_resizeInfo.newWidth = parseInt($('col', _colgroup)[_resizeInfo.id].style.width) + diff;
-						
-						_resizeInfo.newTableWidth = _resizeInfo.initTableWidth + diff;
-						
-						if(_resizeInfo.newWidth > parseInt(options.minColWidth)){
-						
-							_resizeGhost.css({ left :  _resizeInfo.offset + diff + 'px' });
-							
-						} else {
-							
-							_resizeInfo.newWidth = parseInt(options.minColWidth);
-						}
-					}
-					
-					function dragEnd(){
-						
-						$(_colgroup.children()[_resizeInfo.id]).css({ width : _resizeInfo.newWidth + 'px' });
-						
-						$(_colgroup_body.children()[_resizeInfo.id]).css({ width : _resizeInfo.newWidth + 'px' });
-						
-						var wrapper_width = _resizeInfo.newTableWidth;
-						
-						_headers.css({ 'width' : wrapper_width + 'px' });
-						
-						$(_table).css({ 'width'	: wrapper_width + 'px' });
-							
-						_resizeInfo = null;
-						
-						_resizeGhost.css({ display : 'none' });
-						
-						_headerscontainer[0].scrollLeft = _body[0].scrollLeft;
-					}
-				}
-			}
-
-			function isIE6_7() {
-				
-				if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
-					
-	        		var ieversion = new Number(RegExp.$1);
-	        		 
-	 				if (ieversion == 7 || ieversion == 6) {
-	 					
-	        				return true;
-	        				
-	        		} else {
-	        				return false;
-	        		}
-	        	}
-			}
-			
-			function isIE8() {
-				
-				if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
-					
-	        		var ieversion = new Number(RegExp.$1);
-	        		 
-	 				if (ieversion == 8) {
-	 					
-	        				return true;
-	        				
-	        		} else {
-	        				return false;
-	        		}
-	        	}
-			}
-			
-			function buildBody (table) {
-				
-				_body = $('<div class="body ui-widget-content"></div>').insertBefore(table).append(table);
-				
-				if(options.height != null &&  !isNaN(parseInt(options.height))) {
-				
-					_body.css('height', options.height + 'px');
-				}
-				
-				_colgroup_body = _colgroup.clone();
-				
-				$(table).prepend(_colgroup_body);
-				
-				$('td', table).addClass('ui-widget-content');
-				
-				$(table).wrap('<div></div>');
-				
-				if (options.addTitles == true) {
-				
-					$('td', table).each(function() {
-						
-							$(this).attr('title', $(this).text());
-					});			
-				}
-				
-				if (options.zebra) {
-					
-					$('tr:odd', table).addClass(options.zebraClass);
-				}
-			}
-			
-			function adaptScroll (table) {
-				
-				var scrollwidth = _scrollWidth;
-	        	
-	        	if(isIE6_7()){
-	        		
-	        		scrollwidth = 0; 
-	        	}
-	        	
-	        	var width = 0;
-	        							
-				if (parseInt($(table).height()) > parseInt(options.height)) { 
-									
-					width = scrollwidth;
-					
-					overflow = 'scroll';
-					
-				} else { 
-									
-					width = 0;
-						
-					overflow = 'auto';
-				}
-				
-				if($.browser.msie && options.height) {
-				
-					width = scrollwidth;
-					
-					overflow = 'scroll';
-				}
-				
-				_fillScrollbar.css('margin-right', width);
-				
-				return overflow;				
-			}
-			
-			function restrictRows(table, nbrows) {
-							
-				var length = _objectTable.length;
-				
-				var limit = 0;
-				
-				if(length < nbrows) {
-					
-					limit = length;
-				
-				} else {
-					
-					limit = nbrows;
-				}
-				
-				var _objectTableSliced = _objectTable.slice(0, limit);
-				
-				objectToTable(_objectTableSliced, table);	
-				
-				_nbpages = Math.ceil(length / nbrows);
-				
-				_currentpage = 1;
-				
-				_nbpagesDiv.html('Showing page ' + _currentpage + ' of ' + _nbpages);
-				
-				_body.css('overflow-y', adaptScroll(table));
-				
-				$('tr:last td', table).css('border-bottom-width', '1px');
-			}
-			
-			function moveToNextPage(table) {
-				
-				_currentpage++;
-				
-				if(_currentpage >= (_nbpages)) {
-					
-					_currentpage = (_nbpages);
-				}
-					
-				moveToPage(table);
-			}
-			
-			function moveToPreviousPage(table) {
-				
-				_currentpage--;
-				
-				if(_currentpage <= 1) {
-					
-					_currentpage = 1;
-				}
-				
-				moveToPage(table);
-			}
-			
-			function moveToPage(table) {
-				
-				var length = _objectTable.length;
-				
-				var start, limit = 0;
-				
-				start = (_currentpage - 1) * _new_nbRowsPerPage;
-				
-				if(length < (_currentpage * _new_nbRowsPerPage)) {
-					
-					limit = length;
-				
-				} else {
-					
-					limit = (_currentpage * _new_nbRowsPerPage);
-				}
-				
-				var _objectTableSliced = _objectTable.slice(start, limit);
-				
-				objectToTable(_objectTableSliced, table);
-				
-				_nbpagesDiv.html('Showing page ' + _currentpage + ' of ' + _nbpages);
-				
-				_body.css('overflow-y', adaptScroll(table));	
-				
-				$('tr:last td', table).css('border-bottom-width', '1px');
-			}
-			
-			function buildNavButton(className, callbackClick, buttonClass) {
-				
-				var button = $('<div class="button ui-state-default ' + buttonClass + '"><span class="ui-icon ' + className + '">&nbsp;</span></div>');
-				
-				_pager.append(button);
-				
-				button.mouseover(function(){
-						
-					$(this).addClass('ui-state-hover');
-						
-				}).mousedown(function(){
-						
-					$(this).addClass('ui-state-active');
-						
-				}).mouseup(function(){
-						
-					$(this).removeClass('ui-state-active');
-						
-				}).mouseout(function(){
-					
-					$(this).removeClass('ui-state-active');
-					
-					$(this).removeClass('ui-state-hover');
-					
-				}).click(callbackClick);	
-			}
-			
-			function buildPager(table) {
-				
-				_pager = $('<div class="pager ui-widget-header ui-corner-bottom ui-widget-content"></div>');
-				
-				_main_wrapper.append(_pager);
-				
-				buildNavButton('ui-icon-arrowthickstop-1-e', function(){
-					
-					_currentpage = _nbpages;
-					
-					moveToPage(table);
-				}, 'ui-corner-right');
-				
-				buildNavButton('ui-icon ui-icon-arrowthick-1-e', function(){
-					
-					moveToNextPage(table);
-				}, 'noborder');
-				
-				buildNavButton('ui-icon ui-icon-arrowthick-1-w', function(){
-					
-					moveToPreviousPage(table);
-				}, 'noborder');
-				
-				buildNavButton('ui-icon-arrowthickstop-1-w', function(){
-					
-					_currentpage = 1;
-					
-					moveToPage(table);
-				}, 'ui-corner-left noborder');
-				
-				_button_set = 
-				
-				$('<div id="' + table.id + '_radio" style="float : left">' + 
-				
-					'<input type="radio" id="' + table.id + '_show_10_rows" name="' + table.id + '_radio"/><label for="'  + table.id + '_show_10_rows">10</label>' + 
-					'<input type="radio" id="' + table.id + '_show_25_rows" name="' + table.id + '_radio"/><label for="'  + table.id + '_show_25_rows">25</label>' + 
-					'<input type="radio" id="' + table.id + '_show_50_rows" name="' + table.id + '_radio" /><label for="' + table.id + '_show_50_rows">50</label>' + 
-					'<input type="radio" id="' + table.id + '_show_100_rows" name="' + table.id + '_radio"/><label for="' + table.id + '_show_100_rows">100</label>' + 
-				
-				'</div>');
-									
-				_pager.append(_button_set);
-				
-				$('#' + table.id + '_show_10_rows', _pager).click(function(){
-						
-						_new_nbRowsPerPage = _nbRowsPerPage;
-						
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				$('#' + table.id + '_show_25_rows', _pager).click(function(){
-						
-						_new_nbRowsPerPage = _nbRowsPerPage * 2.5;
-						
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				$('#' + table.id + '_show_50_rows', _pager).click(function(){
-					
-						_new_nbRowsPerPage = _nbRowsPerPage * 5;
-					
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				$('#' + table.id + '_show_100_rows', _pager).click(function(){
-					
-						_new_nbRowsPerPage = _nbRowsPerPage * 10;
-					
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				_nbpagesDiv = $('<div class="page_infos"></div>');
-				
-				_pager.append(_nbpagesDiv);
-				
-				_new_nbRowsPerPage = _nbRowsPerPage;
-				
-				$('#' + table.id + '_show_' + options.rowsPerPage + '_rows', _pager).click();
-				
-				_button_set.buttonset();
-			}
-			
-			function getColratioWidth(){
-				
-				var tw = 0;
-				
-				for(var i = 0; i < options.colratio.length; i++){
-					
-					tw += parseInt(options.colratio[i]);
-				}
-				
-				return tw;
-			}
-
-			/***********************/
-			/********* MAIN ********/
-			/***********************/
-			
-			_wrapper = $('<div/>').addClass('t_fixed_header ui-state-default default ' + options.theme).insertBefore(this).append(this);
-			
-			_wrapper.css('border', 'none').css('font-weight', 'normal');
-			
-			_main_wrapper = $('<div class="t_fixed_header_main_wrapper ui-widget ui-widget-header ' + options.theme + '"></div>');
-			
-			if (options.whiteSpace == 'normal') {
-			
-				_wrapper.addClass('t_fixed_header_wrap');
-			}		
-			
-			buildTop(this);
-			
-			buildHeaders(this);	
-			
-			buildBody(this);
-			
-			if(options.wrapper){
-			
-				var tampon = _wrapper.wrap('<div class="ui-widget ui-widget-content ui-corner-all" style="padding : 5px; font-size : 1em;"></div>').parent();
-				
-			} else {
-				
-				var tampon = _wrapper.wrap('<div></div>').parent();
-			}
-			
-			if (options.width != null && !isNaN(parseInt(options.width)) && options.width > 0) {
-				
-				tampon.css('width', options.width + 'px');	
-			}
-			
-			var res = _wrapper.detach();
-			
-			var main_wrapper_child = $('<div class="t_fixed_header_main_wrapper_child"></div>');
-			
-			_main_wrapper.append(main_wrapper_child);
-			
-			main_wrapper_child.append(res);
-			
-			tampon.append(_main_wrapper);	
-			
-			if(isIE6_7()){
-			
-				_body.css('margin-bottom', 17 + 'px');
-			}
-			
-			if (options.caption != '') {
-				
-				var caption = $('<div class="t_fixed_header_caption ui-widget-header ui-corner-top">' + options.caption + '</div>');
-				
-				_main_wrapper.prepend(caption).addClass('ui-corner-all');
-				
-				if (options.showhide) {
-				
-					var showhide = $('<div style="cursor : pointer; display : inline-block; vertical-align : middle; background : none; border : none;" class="ui-state-active"><span class="ui-icon ui-icon-triangle-1-n">&nbsp;</span></div>');
-					
-					caption.append(showhide);
-					
-					showhide.click(function(){
-						
-						main_wrapper_child.toggle();
-						
-						caption.toggleClass('toggle')
-						
-						if(_pager) _pager.toggle();
-						
-						$('span', showhide).toggleClass('ui-icon-triangle-1-s');
-					});
-				
-				}
-			} 	
-						
-			if (options.sortable || options.pager) {
-				
-				_objectTable = tableToObject(this);
-			}
-			
-			if (options.pager) {
-				
-				buildPager(this);
-			}
-			
-			if(options.sortable && !isNaN(parseInt(options.sortedColId))) {
-				
-				var cur_th = $('th', _headers)[options.sortedColId];
-				
-				$(cur_th).addClass('ui-state-hover')
-				
-				$('div.ui-sort', cur_th).click();
-			}
-			
-			if(options.resizeCol && (options.colratio.length == nbcol)){
-			
-				_resizeGhost = $('<div class="ui-resize-ghost ui-widget-header" style="height : ' + _main_wrapper.parent().height() + 'px"></div>');
-				
-				_wrapper.append(_resizeGhost);
-			}
-			
-			_body.css('overflow-y', adaptScroll(this));
-			
-			if (options.minWidth != null && !isNaN(parseInt(options.minWidth)) && options.minWidth > 0) {
-				
-				var minWidth = options.minWidth + 'px';
-				
-			} else if (options.minWidthAuto) {
-				
-				if (options.colratio.length == nbcol) {
-					
-					var minWidth =  $(this).width() + 'px';
-					
-				} else {
-					
-					var minWidth = (_initialWidth + 150) + 'px';
-				}
-			}
-						
-			_headerscontainer.children().first().css('min-width', minWidth);
-			
-			_body.children().first().css('min-width', minWidth);
-			
-			_body.scroll(function(){
-				
-				_headerscontainer[0].scrollLeft = _body[0].scrollLeft;
-			});
-			
-			if (options.colratio.length == nbcol) {
-								
-				_wrapper.removeClass('default');
-				
-				$(_headers).css('width', getColratioWidth() + 'px');
-			}
-		});
-	};
-
-})(jQuery);
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/media-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/media-body-style.css
deleted file mode 100644
index 4fadb07da79ed7002c26094ae35a6a3332dccf62..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/media-body-style.css
+++ /dev/null
@@ -1,131 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E0E0E0;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color:#B2B2B2;;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.media-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#media-table tr:nth-child(odd) td{
-  background-color:#E0E0E0;
-}
-
-
-#media-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#media-table tr.media-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#media-table td{
-
-padding:5px;
-}
-
-#media-table tr.media-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#A8A8A8;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/media-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/media-browser.html
deleted file mode 100644
index e495bc9b618e344aee412fad3aab95b6cdc2227d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/media-browser.html
+++ /dev/null
@@ -1,965 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Media Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="media-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	<div id = "title" style="padding-top:20px"> MEDIA </div>
-	<div id ="sectionsContainer"><div>
-
-	
-<!--  
-		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Antibody Name</td><td> <input style="width: 200px" id="antibodyName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-	-->	
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table id="media-table" style="float: left">
-			  <tr class="media-table-header"><th>Code</th><th>Name</th><th>Storage</th><th>For What</th><th>Organism</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All media
-var medias = null;
-
-/// The media that are currently being inspected
-var inspectedMedias = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				console.log(sample.properties.SOLUTIONS_BUFFERS_PARENTS)
-			}	  
-			
-			   
-}								
-			
-	
-};
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    media = objectOrId;
-  } else {
-  	media = mediasById[objectOrId];
-  }
-  
-  return media;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the medias variable */
-function initializeMedias(result)
-{
-      // Construct a map of all medias by id
-  mediasById = {};
-
-	// Split the medias into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpMedias = [], otherMedias = [];
-	var frpRegex = /^FRM[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        mediasById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the mediasById map
-	    theSample = mediasById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpMedias.push(theSample);
-		} else {
-			otherMedias.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherMedias.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpMedias.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of medias
-	medias = frpMedias.concat(otherMedias);
-}
-
-
-
-
-/** Set the size of the media-table based on whether or not inspectors are visible */
-function resizeMediaTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var mediaTableTransition = d3.selectAll('div.media-table-data-cell');
-	mediaTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectMedia(media)
-{
-	if (inspectedMedias.indexOf(media) < 0) {
-		inspectedMedias.push(media);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var mediaToSend = $.extend({}, media);
-		delete mediaToSend.parents;
-		delete mediaToSend.children;
-	
-	}
-	resizeMediaTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(media)
-{
-	var index = inspectedMedias.indexOf(media);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedMedias.splice(index, 1);
-	resizeMediaTable();
-	updateInspectors(1000);
-}
-
-
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedMedias, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectMedia(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectMedia(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeMedias(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (medias.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#media-table").selectAll("tr.media-table-data").data(medias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "media-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectMedia)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.STORAGE, sample.properties.FOR_WHAT, sample.properties.ORGANISM]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "media-table-data-cell")
-			.text(String)
-
-}
-
-function mediaFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#media-table").selectAll("tr.media-table-data").data(medias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedMedias) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "MEDIA" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/oligo-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/oligo-body-style.css
deleted file mode 100644
index a721e5602534ec2f8acff4cde1ca732ed71029ae..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/oligo-body-style.css
+++ /dev/null
@@ -1,129 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
- padding-top:10px;
- width:100%;
- 
-}
-
-
-.properties td:nth-child(odd) {
-  background-color:#CCFFFF;
-  width: 30%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width: 70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.oligo-table-data-cell {
-	overflow: hidden;
-}
-
-
-#oligo-table tr:nth-child(odd) {
-  background-color:#CCFFFF;
-}
-
-#oligo-table tr:nth-child(even) {
-  background-color:#F7F7F7;
-}
-
-
-
-#oligo-table tr.oligo-table-data:hover {
-  font-weight: bold;
-  
-}
-
-
-#oligo-table td{
-
-padding:5px;
-}
-
-#oligo-table tr.oligo-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#0099CC;	
-}
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/oligo-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/oligo-browser.html
deleted file mode 100644
index 151a550f471bf3302761fd54040b4e7451bdfe13..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/oligo-browser.html
+++ /dev/null
@@ -1,578 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Oligo Browser</title>
-	<link type="text/css" rel="stylesheet" href="oligo-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-			<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All oligos
-var oligos = null;
-
-/// The oligos that are currently being inspected
-var inspectedOligos = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		//.style("float", "right")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-		
-	order1 = ["TARGET", "DIRECTION", "RESTRICTION_ENZYME", "MODIFICATIONS", "SEQUENCE",  "PROJECT"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-	
-	order2 = [ "BOX_NUMBER",  "ROW",  "COLUMN","REGISTRATION_DATE"]
-	new_list2 = []
-	for (var a in order2) {
-		for (var b in pairs) {
-			if (pairs[b][0] == order2[a]) {
-				new_list2.push(pairs[b]);
-				break;
-			}
-		}
-	}
-	
-	return new_list2;
-}
-
-
-
-/** Initialize the oligos variable */
-function initializeOligos(result)
-{
-	// Split the oligos into two groups, the ones that start with FRO in their sample name and the other ones.
-	var froOligos = [], otherOligos = [];
-	var froRegex = /^FRO[0-9]+/;
-	froRegex.compile(froRegex);
-	result.forEach(function(sample) { 
-		if (froRegex.test(sample.code)) {
-			froOligos.push(sample);
-		} else {
-			otherOligos.push(sample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherOligos.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	froOligos.sort(function(a, b) {
-		// Sort based on the FRO number
-		var froNumberA = parseInt(a.code.substring(3));
-		var froNumberB = parseInt(b.code.substring(3));
-		return (froNumberA < froNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of oligos
-	oligos = froOligos.concat(otherOligos);
-}
-
-/** Set the size of the oligo-table based on whether or not inspectors are visible */
-function resizeOligoTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%"
-	areInspectorsVisible = true;
-		
-	var oligoTableTransition = d3.selectAll('div.oligo-table-data-cell');
-	oligoTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectOligo(oligo)
-{
-	if (inspectedOligos.indexOf(oligo) < 0) {
-		inspectedOligos.push(oligo);
-		openbisServer.listDataSetsForSample(oligo, true, dataset.curry(oligo));
-	}
-	resizeOligoTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(oligo)
-{
-	var index = inspectedOligos.indexOf(oligo);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedOligos.splice(index, 1);
-	resizeOligoTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedOligos, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-		
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-				
-
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-			
-
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeOligos(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (oligos.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#oligo-table").selectAll("tr.oligo-table-data").data(oligos);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "oligo-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectOligo)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.TARGET, sample.properties.DIRECTION,sample.properties.RESTRICTION_ENZYME, sample.properties.PROJECT]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "oligo-table-data-cell")
-			.text(String)
-
-}
-
-function oligoFilter(filter, property, element, index, array) {
-
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText, targetFilterText, directionFilterText, enzymeFilterText, projectFilterText)
-{
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-
-	if (targetFilterText == undefined) 
-	{
-		targetFilterText = "";
-	}
-
-	if (directionFilterText == undefined) 
-	{
-		directionFilterText = "";
-	}
-	
-	if (enzymeFilterText == undefined) 
-	{
-		enzymeFilterText = "";
-	}
-	
-	if (projectFilterText == undefined) 
-	{
-		projectFilterText = "";
-	}
-		
-	var displayedOligos = oligos.filter(oligoFilter.curry(codeFilterText, "CODE"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(targetFilterText, "TARGET"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(directionFilterText, "DIRECTION"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(enzymeFilterText, "RESTRICTION_ENZYME"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(projectFilterText, "PROJECT"));	
-
-
-	var selection2 = d3.select("#vis").select("#oligo-table").selectAll("tr.oligo-table-data").data(oligos);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedOligos) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-		
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
- 
- function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "OLIGO" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamples(sampleCriteria, displayReturnedSamples);
-
-}
- 
- 
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});	
-		
-	$('#target_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-	
-	$('#direction_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-
-  $('#enzyme_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-	
-	$('#project_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-
-
-
-
-
-
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> OLIGOS </div>
-	  <div id ="sectionsContainer"><div>
-
-			
-
-
-		
-
-		<div id="filter-button"	style="position:absolute; padding-top: 570px; left: 400px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="position:absolute; top: 680px; left: 400px"><td style="font-weight: bold; width: 200px">Target</td><td><input style="width: 200px" id="target_filter" type="text"></td></tr> 		
-			  <tr style="position:absolute; top: 720px; left: 400px"><td style="font-weight: bold;  width: 200px">Direction</td><td><input style="width: 200px" id="direction_filter" type="text"></td></tr>
-				<tr style="position:absolute; top: 760px; left: 400px"><td style="font-weight: bold; width: 200px">Restriction Enzyme</td><td> <input style="width: 200px" id="enzyme_filter" type="text"></td></tr> 		
-      	<tr style="position:absolute; top: 800px; left: 400px; padding-bottom:20px"><td style="font-weight: bold;  width: 200px">Project</td><td> <input style="width: 200px" id="project_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-		
-		    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-			<table id="oligo-table" style="float: left">
-			  <tr class="oligo-table-header"><th>Code</th><th>Target</th><th>Direction</th><th>Restriction Enzyme</th><th>Project</th></tr>
-			</table>
-			</div>
-			
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/pcr-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/pcr-body-style.css
deleted file mode 100644
index addc0b12fc2bd2b3d990a764df1dd4d692e153cc..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/pcr-body-style.css
+++ /dev/null
@@ -1,131 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E5FFCC;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color:#B2B2B2;;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.pcr-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#pcr-table tr:nth-child(odd) td{
-  background-color:#E5FFCC;
-}
-
-
-#pcr-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#pcr-table tr.pcr-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#pcr-table td{
-
-padding:5px;
-}
-
-#pcr-table tr.pcr-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:black;
-  background-color:	#CCFFCC;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/pcr-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/pcr-browser.html
deleted file mode 100644
index ec8399ba929b052293d7b2b95765d1cb73e7b53f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/pcr-browser.html
+++ /dev/null
@@ -1,996 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>PCR Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="pcr-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> PCR </div>
-	  <div id ="sectionsContainer"><div>		
-
-
-	
-<!--  
-		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Antibody Name</td><td> <input style="width: 200px" id="antibodyName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-	-->	
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px; height: 500px; top: 100px; overflow: auto">
-		  <table id="pcr-table" style="float: left">
-			  <tr class="pcr-table-header"><th>Code</th><th>Name</th><th>For What</th><th>Template</th><th>Publication</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All pcr
-var pcrs = null;
-
-/// The pcr that are currently being inspected
-var inspectedpcrs = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				
-			}	  
-			
-			   
-}								
-	
-	
-
-
-	
-};
-
-function reformatString(sample)
-{
-
-
-  		sample.properties.WHAT_FOR = [];
-  		console.log(sample.properties.FOR_WHAT)
- 	
-			if (sample.properties.FOR_WHAT != "undefined") {
-				newArray = sample.properties.FOR_WHAT.split(/\d/);
-				for(i=0; i<newArray.length; i++) {
-   				WHAT_FOR = i+' '+newArray[i]+ "\n";
-   				sample.properties.WHAT_FOR.push(WHAT_FOR)
-   				
-				}
-				
-			console.log(sample.properties.WHAT_FOR)
-			//sample.properties.WHAT_FOR.push(sample.properties.WHAT_FOR)
-			}
-			
-			
-
-}
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION", "MATERIALS", "ORGANISM"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["PROCEDURE",  "pcr_EVALUATION", "DETAILS", "COMMENTS", "PUBLICATION"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS", "GENERAL_pcr_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","SUGGESTIONS", "pcr_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    pcr = objectOrId;
-  } else {
-  	pcr = pcrsById[objectOrId];
-  }
-  
-  return pcr;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the pcrs variable */
-function initializepcrs(result)
-{
-      // Construct a map of all pcrs by id
-  pcrsById = {};
-
-	// Split the pcrs into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frppcrs = [], otherpcrs = [];
-	var frpRegex = /^FRPROT[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        pcrsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the pcrsById map
-	    theSample = pcrsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frppcrs.push(theSample);
-		} else {
-			otherpcrs.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		reformatString(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherpcrs.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frppcrs.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(6));
-		var frpNumberB = parseInt(b.code.substring(6));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of pcrs
-	pcrs = frppcrs.concat(otherpcrs);
-}
-
-
-
-
-/** Set the size of the pcr-table based on whether or not inspectors are visible */
-function resizepcrTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var pcrTableTransition = d3.selectAll('div.pcr-table-data-cell');
-	pcrTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectpcr(pcr)
-{
-	if (inspectedpcrs.indexOf(pcr) < 0) {
-		inspectedpcrs.push(pcr);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var pcrToSend = $.extend({}, pcr);
-		delete pcrToSend.parents;
-		delete pcrToSend.children;
-	
-	}
-	resizepcrTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(pcr)
-{
-	var index = inspectedpcrs.indexOf(pcr);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedpcrs.splice(index, 1);
-	resizepcrTable();
-	updateInspectors(1000);
-}
-
-
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedpcrs, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectpcr(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectpcr(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializepcrs(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (pcrs.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#pcr-table").selectAll("tr.pcr-table-data").data(pcrs);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "pcr-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectpcr)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.WHAT_FOR, sample.properties.TEMPLATE, sample.properties.PUBLICATION]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "pcr-table-data-cell")
-			.text(String)
-
-}
-
-function pcrFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#pcr-table").selectAll("tr.pcr-table-data").data(pcrs);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedpcrs) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "PCR" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/plasmid-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/plasmid-body-style.css
deleted file mode 100644
index 14f3fd885a156abdc6213c5436ffd8cbc7393d4d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/plasmid-body-style.css
+++ /dev/null
@@ -1,131 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color: #ffe5cc;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.plasmid-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#plasmid-table tr:nth-child(odd) td{
-  background-color:#ffe5cc;
-}
-
-
-#plasmid-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#plasmid-table tr.plasmid-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#plasmid-table td{
-
-padding:5px;
-}
-
-#plasmid-table tr.plasmid-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:#000000;
-  background-color:#ffcb99;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/plasmid-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/plasmid-browser.html
deleted file mode 100644
index e7cfb99bf964549398049a67f89b35a685c76252..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/plasmid-browser.html
+++ /dev/null
@@ -1,801 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Plasmid Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="plasmid-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> PLASMIDS </div>
-		<div id ="sectionsContainer"><div>	
-
-		<div id="filter-button"	style="position:absolute; padding-top: 570px; left: 400px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="position:absolute; top: 680px; left: 400px"><td style="font-weight: bold; width: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="position:absolute; top: 720px; left: 400px"><td style="font-weight: bold; width: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="position:absolute; top: 760px; left: 400px"><td style="font-weight: bold; width: 200px">Plasmid Name</td><td> <input style="width: 200px" id="plasmidName_filter" type="text"></td></tr> 		
-      	<tr style="position:absolute; top: 800px; left: 400px"><td style="font-weight: bold; width: 200px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="position:absolute; top: 840px; left: 400px"><td style="font-weight: bold; width: 200px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="position:absolute; top: 880px; left: 400px"><td style="font-weight: bold; width: 200px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-		
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table id="plasmid-table" >
-			  <tr class="plasmid-table-header"><th>Code</th><th>Owner</th><th>Owner Number</th><th>Plasmid Name</th><th>Backbone</th><th>Bacterial Antibiotic Resistance</th><th>(Yeast) Marker</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-//openbisServer = new openbis('https://localhost:8443/openbis/openbis', 'https://bs-mbp156.ethz.ch:8443/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All plasmids
-var plasmids = null;
-
-/// The plasmids that are currently being inspected
-var inspectedPlasmids = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		//.style("float", "right")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "COMMENTS", "PROJECT",  "PLASMIDS", "YEAST_PARENTS", "PLASMID_NAME",  "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    plasmid = objectOrId;
-  } else {
-  	plasmid = plasmidsById[objectOrId];
-  }
-  
-  return plasmid;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the plasmids variable */
-function initializePlasmids(result)
-{
-      // Construct a map of all plasmids by id
-  plasmidsById = {};
-
-	// Split the plasmids into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        plasmidsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the plasmidsById map
-	    theSample = plasmidsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of plasmids
-	plasmids = frpPlasmids.concat(otherPlasmids);
-}
-
-
-
-
-/** Set the size of the plasmid-table based on whether or not inspectors are visible */
-function resizePlasmidTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	if (inspectedPlasmids.length > 0) {
-		cellWidth = ((getAppWidth() - inspectorsWidth) / 9) - padding + "px";
-		console.log(cellWidth)
-		areInspectorsVisible = true;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var plasmidTableTransition = d3.selectAll('div.plasmid-table-data-cell');
-	plasmidTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectPlasmid(plasmid)
-{
-	if (inspectedPlasmids.indexOf(plasmid) < 0) {
-		inspectedPlasmids.push(plasmid);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var plasmidToSend = $.extend({}, plasmid);
-		delete plasmidToSend.parents;
-		delete plasmidToSend.children;
-		openbisServer.listDataSetsForSample(plasmidToSend, true, dataset.curry(plasmid));
-	}
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(plasmid)
-{
-	var index = inspectedPlasmids.indexOf(plasmid);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedPlasmids.splice(index, 1);
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedPlasmids, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializePlasmids(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (plasmids.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#plasmid-table").selectAll("tr.plasmid-table-data").data(plasmids);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "plasmid-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectPlasmid)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.OWNER.split('_').join(" "), sample.properties.OWNER_NUMBER, sample.properties.PLASMID_NAME, sample.properties.BACKBONE.split('_').join(' '), sample.properties.BACTERIAL_ANTIBIOTIC_RESISTANCE,sample.properties.YEAST_MARKER]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "plasmid-table-data-cell")
-			.text(String)
-
-}
-
-function plasmidFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, plasmidNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (plasmidNameFilterText == undefined) 
-	{
-		plasmidNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedPlasmids = plasmids.filter(plasmidFilter.curry(ownerFilterText, "OWNER"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(plasmidNameFilterText, "PLASMID_NAME"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#plasmid-table").selectAll("tr.plasmid-table-data").data(plasmids);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedPlasmids) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "PLASMID" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#plasmidName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/reset-min.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/reset-min.css
deleted file mode 100644
index 00c38928735a824b65249efaf3dd11bc10570bbc..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/reset-min.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
-Copyright (c) 2010, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.com/yui/license.html
-version: 3.3.0
-build: 3167
-*/
-html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/search-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/search-body-style.css
deleted file mode 100644
index 69626e5eb4b86b055f231a2a3e0cd1a92ae4b34f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/search-body-style.css
+++ /dev/null
@@ -1,128 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-
-.properties td:nth-child(odd) {
-  background-color:	#FFFFCC;
-  width:30%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-
-
-
-.eachsample-table-data-cell {
-	overflow: hidden;
-		
-}
-
-#eachsample-table tr:nth-child(odd) td{
-   background-color:	#FFFFCC;
-}
-
-#eachsample-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-
-#eachsample-table tr.eachsample-table-data:hover {
-  font-weight: bold;
-}
-
-
-
-#eachsample-table td{
-padding:5px;
-}
-
-#eachsample-table tr.eachsample-table-header {
- 
-  font-size:18px;
-  font-weight: bold;
-  color:black;
-  background-color:	#FFFF99;
-
-}
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/search-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/search-browser.html
deleted file mode 100644
index 77d21f9457c0dda8db05688c95dbe1853ed863e6..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/search-browser.html
+++ /dev/null
@@ -1,392 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Search</title>
-	<link type="text/css" rel="stylesheet" href="search-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="d3.tsv.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" language="javascript" src="jquery.dataTables.js"></script>
-	
-	<!--<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>-->
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-//openbisServer = new openbis("/openbis/openbis", "https://localhost:8444/datastore_server")
-// Some global variables we refer to
-
-/// All eachsamples
-var eachsamples = null;
-
-/// The eachsamples that are currently being inspected
-var inspectedEachsamples = [];
-
-
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-/** Initialize the eachsamples variable */
-function initializeEachsamples(result)
-{
-	// Split the eachsamples into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all eachsamples by id
-  eachsamplesById = {};
-
-	// Split the eachsamples into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryEachsamples = [], otherEachsamples = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        eachsamplesById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the eachsamplesById map
-	    theSample = eachsamplesById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryEachsamples.push(theSample);
-		} else {
-			otherEachsamples.push(theSample);
-		}
-		
-	});
-	
-	// Sort each of the groups
-	otherEachsamples.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryEachsamples.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of eachsamples
-	eachsamples = fryEachsamples.concat(otherEachsamples);
-	console.log(eachsamples)	
-}
-
-
-
-/** Set the size of the eachsample-table based on whether or not inspectors are visible */
-
-
-function inspectEachsample(eachsample)
-{
-  if (null == eachsample) {
-  	// Ignore this -- it is not a eachsample
-  	return;
-  }
- 
- 
-	 
-  window.open(eachsample.sampleTypeCode.toLowerCase() +"-browser.html?code=" + eachsample.code, "_blank");
-  
-
-}
-
-function closeInspector(eachsample)
-{
-	var index = inspectedEachsamples.indexOf(eachsample);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedEachsamples.splice(index, 1);
-	resizeEachsampleTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{ 
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeEachsamples(data.result);
-	
-	
-
- 
-	d3.select("#vis").select("#eachsample-table").selectAll("tr.eachsample-table-data").remove();
-	var selection = d3.select("#vis").select("#eachsample-table").selectAll("tr.eachsample-table-data").data(eachsamples);
-		// Code under enter is run if there is no HTML element for a data element
-
-
-var searchText = $('#search').val();
-var searchRegexpText = ("*" + searchText + "*").replace(/\*/g, ".*");
-var searchRegexp = new RegExp(searchRegexpText, "i");
-
-selection
-	  .enter()
-		.append("tr")	  
-	 	.attr("class", "eachsample-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectEachsample)
-		.selectAll("td").data(function(sample) { return [sample.sampleTypeCode, sample.identifier.slice(11,50), sample.properties, sample.properties ]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "eachsample-table-data-cell")
-			.text(function(d, index){
-			  if(index == 2){
-			    if(searchText && searchText.length > 0 && d){
-				    for(propertyName in d){
-				    	  var propertyValue = d[propertyName];
-				        if(propertyValue && searchRegexp.test(propertyValue)){
-							    return propertyValue;
-								  }			    
-				    }
-					}	    
-			  }
-			  else if (index ==3){
-			    if(searchText && searchText.length > 0 && d){
-				    for(propertyName in d){
-				    	  var propertyValue = d[propertyName];
-				        if(propertyValue && searchRegexp.test(propertyValue)){
-							    return propertyName;
-								  }			    
-				    }
-					}	    
-			  }
-			  else{
-			    return d;
-			  }
-			  
-			  return "" 
-			})
-			
-}
-
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-function showSearchedSamples()
-{
-	var sampleCriteria = 
-	{
-   matchClauses : 
-            [ {"@type":"AnyFieldMatchClause",
-                fieldType : "ANY_FIELD",
-                desiredValue : "*" + $("#search").val() + "*"
-            }
-            ],
-        operator : "MATCH_ANY_CLAUSES"
-};
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-	
-}
-
-
-
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",
-				attribute:"TYPE",			
-				desiredValue : "*" 
-			}
-			],
-		operator : "MATCH_ANY_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-
-}
-
-function showMatchingField()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",
-				attribute:"TYPE",			
-				desiredValue : "*" 
-			}
-			],
-		operator : "MATCH_ANY_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-
-}
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	populateMenu();
-	
-	//showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$("#search").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('#search').submit();
-			return false;
-		} else {
-			return true;
-		}
-	});
-	
-	$('#search').submit(function() {
-		showSearchedSamples();
-	});
-	
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-  
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS Yeast Lab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> SEARCH ALL SAMPLE TYPES </div>
-		<div id ="sectionsContainer"><div>	
-							
-
-
-	    
-	    <div id="search-field" ">
-	    <table>
-			  <tr style="position:absolute; top: 100px; left: 200px"><td style="font-weight: bold; width: 100px">Search</td><td><form><input style="width: 200px" id="search" type="text"></form></td></tr> 		
-		</table>
-	    </div>
-	    
-
- 		<div id="vis">
- 		   <div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 150px; overflow: auto">
-  	 	  <table id="eachsample-table" cellpadding="0" cellspacing="0" border="1" bordercolor="white" class="display" width="100%">
-			  <thead >
-					<tr class="eachsample-table-header"><th>Sample Type</th><th>Code</th><th>Matched Text</th><th>Matching Field</th></tr>
-				</thead> 
-				<tbody></tbody>
-			</table>
-	 		</div>
-	 		
-			
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/simplified-yeast-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/simplified-yeast-browser.html
deleted file mode 100644
index 5c69177f52ccc8c16e2f7fc34b6386d2f38267dd..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/simplified-yeast-browser.html
+++ /dev/null
@@ -1,353 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Yeast Browser</title>
-	<link type="text/css" rel="stylesheet" href="yeast-body-style-modified.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="d3.tsv.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" language="javascript" src="jquery.dataTables.js"></script>
-	
-	<!--<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>-->
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-
-	didCreateVis = true;
-}
-
-
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-//position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto 
-
-
-
-var titles = ["Code", "Owner", "Owner Number", "Yeast Strain Name", "Project", "Plasmids", "Yeast Parents", "Genetic Background", "Mating Type"]
-
- var th = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(titles)
-     .enter()
-     .append("th")
-     .style( "font-size","18px")
-      .style("font-weight", "bold")
-     .style("color", "#fff")
-     .style("background-color","#5C5C1F")
-     .attr("class", "yeast-table-header")
-     .text(String)
- 
- 
-	var selection = d3.select("#vis")
-  
-    .select("#yeast-table")
-    .style("position","absolute").style("width", "400px").style("left", "200px").style("top", "100px").style("height", "200px").style("overflow", "auto")
-    .selectAll("tr.yeast-table-data").data(yeasts)
-	  .enter()
-	 	.append("tr")	  
-	 	
-	 	
-	 	.attr("class", "yeast-table-data")
-		.style("cursor", "pointer")
-    .on("click", inspectYeast)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.OWNER, sample.properties.OWNER_NUMBER, sample.properties.YEAST_STRAIN_NAME, sample.properties.PROJECT, sample.properties.PLASMIDS, sample.properties.YEAST_PARENTS, sample.properties.GENETIC_BACKGROUND, sample.properties.MATING_TYPE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "yeast-table-data-cell")
-			.text(String)
-	
-
-	
-	
-			
-};
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "YEAST" 
-			}],
-		operator : "MATCH_ANY_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis();
-	
-	//showChildrenSamples();
-
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-  
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> YEASTS </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;;top:10px">Logout</button>
-		</div>
-		<div id="chemical_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/chemicals-browser.html">Chemicals</a> 
-		</div>   		
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/oligo-browser.html">Oligos</a>  
-		</div>		
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:200px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/plasmid-browser.html">Plasmids</a>  
-		</div>		
-		<div id="yeast_browser" style="position: absolute; left:10px; top:250px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/yeast-browser.html">Yeasts</a>  
-		</div>		
-
-	   
-
- 		<div id="vis">
-  	 	  <table id="yeast-table" cellpadding="0" cellspacing="0" border="1" bordercolor="white" class="display" width="100%">
-			 	</table>
-	 		</div>
-	 	 		
-	 		
-		
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/solutions_buffers-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/solutions_buffers-browser.html
deleted file mode 100644
index 3261063c4a2e6ad3d7541d4cd67625556c1bce0b..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/solutions_buffers-browser.html
+++ /dev/null
@@ -1,971 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Solutions Buffers Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="buffer-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> SOLUTIONS BUFFERS </div>
-	  <div id ="sectionsContainer"><div>
-
-
-<!-- 		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">buffer Name</td><td> <input style="width: 200px" id="bufferName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
--->		
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table id="buffer-table" style="float: left">
-			  <tr class="buffer-table-header"><th>Code</th><th>Name</th><th>Storage</th><th>For What</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All buffers
-var buffers = null;
-
-/// The buffers that are currently being inspected
-var inspectedbuffers = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				console.log(sample.properties.SOLUTIONS_BUFFERS_PARENTS)
-			}	  
-			
-			   
-}								
-			
-	
-};
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    buffer = objectOrId;
-  } else {
-  	buffer = buffersById[objectOrId];
-  }
-  
-  return buffer;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the buffers variable */
-function initializebuffers(result)
-{
-      // Construct a map of all buffers by id
-  buffersById = {};
-
-	// Split the buffers into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpbuffers = [], otherbuffers = [];
-	var frpRegex = /^FRSOB[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        buffersById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the buffersById map
-	    theSample = buffersById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpbuffers.push(theSample);
-		} else {
-			otherbuffers.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-	});
-	
-	// Sort each of the groups
-	otherbuffers.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpbuffers.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(5));
-		var frpNumberB = parseInt(b.code.substring(5));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of buffers
-	buffers = frpbuffers.concat(otherbuffers);
-}
-
-
-
-/** Set the size of the buffer-table based on whether or not inspectors are visible */
-function resizebufferTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var bufferTableTransition = d3.selectAll('div.buffer-table-data-cell');
-	bufferTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectbuffer(buffer)
-{
-	if (inspectedbuffers.indexOf(buffer) < 0) {
-		inspectedbuffers.push(buffer);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var bufferToSend = $.extend({}, buffer);
-		delete bufferToSend.parents;
-		delete bufferToSend.children;
-		openbisServer.listDataSetsForSample(bufferToSend, true, dataset.curry(buffer));
-	}
-	resizebufferTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(buffer)
-{
-	var index = inspectedbuffers.indexOf(buffer);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedbuffers.splice(index, 1);
-	resizebufferTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedbuffers, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbuffer(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbuffer(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-							
-	
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-//	var dataSetRow = box.select("table.properties").append("tr");
-//	dataSetRow
-//				.append("td")
-//					.attr("class", "property")
-//					.text("DATA_SETS");
-//	dataSetRow
-//				.append("td")
-//					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializebuffers(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (buffers.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#buffer-table").selectAll("tr.buffer-table-data").data(buffers);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "buffer-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectbuffer)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.STORAGE, sample.properties.FOR_WHAT]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "buffer-table-data-cell")
-			.text(String)
-
-}
-
-function bufferFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, bufferNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (bufferNameFilterText == undefined) 
-	{
-		bufferNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedbuffers = buffers.filter(bufferFilter.curry(ownerFilterText, "OWNER"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(bufferNameFilterText, "buffer_NAME"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#buffer-table").selectAll("tr.buffer-table-data").data(buffers);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedbuffers) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "SOLUTIONS_BUFFERS" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#bufferName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/template_sample-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/template_sample-browser.html
deleted file mode 100644
index 768f45e18754dc1f6e7db80c9d6061f0a2327d3c..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/template_sample-browser.html
+++ /dev/null
@@ -1,913 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Yeast Browser</title>
-	<link type="text/css" rel="stylesheet" href="yeast-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="d3.tsv.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" language="javascript" src="jquery.dataTables.js"></script>
-	
-	<!--<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>-->
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-// Some global variables we refer to
-var SAMPLE_TYPE = "TEMPLATE_SAMPLE";
-var SAMPLE_TYPE_PROPERTIES = ["TEMPLATE_DESCRIPTION", "TEMPLATE_NUMBER", "TEMPLATE_TEXT"];
-var SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME = ["Description", "Number", "Text"];
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var plasmidValue = sample.properties.PLASMIDS;
-  sample.properties.PLASMIDS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(plasmidValue))
-		return;
-
-  globalValue = plasmidValue;
-	var plasmidXml = xmlParser.parseFromString(plasmidValue, "text/xml");
-	
-	
-	for (i=1; i < plasmidXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = plasmidXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	 		   		
-						if (sampleNode.attributes.getNamedItem("annotation") != null)  {
-	 	  				 var annotation = sampleNode.attributes.getNamedItem("annotation").value;
-						}	 		   		
-						else{
-								var annotation = "";
-						}
-						if (sampleNode.attributes.getNamedItem("rel") != null) {
-								var relationship = sampleNode.attributes.getNamedItem("rel").value;
-						}	
-						else{
-								var relationship = "";
-						}  	  		
-				 }
-			
-			  var PLASMIDS_PARENTS = null;
-			
-				if (relationship == "INT"){
-				  PLASMIDS_PARENTS = " " + code + "::" + annotation;
-				}
-				if (relationship == "MOD"){
-			   	PLASMIDS_PARENTS = " " + code + "_" + annotation;
-				}
-				if (relationship == "DEL"){
-			  	 PLASMIDS_PARENTS = " " + code + "_D_" + annotation;
-				}
-				if (relationship == "") {
-						PLASMIDS_PARENTS = code;
-				}
-				
-				sample.properties.PLASMIDS_PARENTS.push(PLASMIDS_PARENTS);
-	
-}			
-			
-			
-			var yeastParentsValue = sample.properties.YEAST_PARENTS;
- 	   sample.properties.YEASTS_PARENTS = [];
-  
-	
-	if (!xmlValueRegex.test(yeastParentsValue))
-		return;
-
- 		 globalValue2 = yeastParentsValue;
-		 var yeastParentsXml = xmlParser.parseFromString(yeastParentsValue, "text/xml");
-	
-		for (i=1; i < yeastParentsXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	
-			var sampleYeastNode = yeastParentsXml.childNodes.item(0).childNodes.item(i);
-			
- 		  var yeastsDisplay = null;
-  
-			if (sampleYeastNode.attributes.getNamedItem("code") != null ) {
-					var yeastCode = sampleYeastNode.attributes.getNamedItem("code").value;
-			}
-			
-	yeastsDisplay = yeastCode;
-		
-	sample.properties.YEASTS_PARENTS.push(yeastsDisplay);
-
-	}
-	
-};
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = SAMPLE_TYPE_PROPERTIES
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order5 = ["YEASTS_PARENTS"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-		return new_list5;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    yeast = objectOrId;
-  
-  } else {
-  	yeast = yeastsById[objectOrId];
-  
-  }
-  
- 
-  return yeast;
-}
-
-
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list5=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list5.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list5;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list6=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-		data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list6.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list6;
-}
-
-
-
-
-
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(yeast)
-{
-	var index = inspectedYeasts.indexOf(yeast);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedYeasts.splice(index, 1);
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedYeasts, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-	
-
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-				
-				var propsTable5 = box.append("table").attr("class", "properties");
-	      propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-	   	.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					 	
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTable2 = box.append("table").attr("class", "properties");
-	propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-
-	var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	
-
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	
-
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
- 
-
-	var selection = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-		
-selection
-	  .enter()
-		.append("tr")	  
-	 	.attr("class", "yeast-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectYeast)
-		.selectAll("td").data(function(sample) {
-			var tableFields = [sample.code];
-			for(var i=0; i<SAMPLE_TYPE_PROPERTIES.length; i++) {
-				tableFields[tableFields.length] = sample.properties[SAMPLE_TYPE_PROPERTIES[i]];
-			}
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "yeast-table-data-cell")
-			.text(String)
-			
-}
-
-
-/**
- * Filters
- */
- 
- 
-function yeastFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
- 
- 
-
-
-/**
- * Function visualize filters 
- */
-function visualize(filterResults)
-{
-	var displayedYeasts;
-	
-	for(var i=0; i < SAMPLE_TYPE_PROPERTIES.length;i++) {
-		if(i == 0) {
-			displayedYeasts = yeasts.filter(yeastFilter.curry(((filterResults[i] == undefined)?"":filterResults[i]), SAMPLE_TYPE_PROPERTIES[i]));
-		} else {
-			displayedYeasts = displayedYeasts.filter(yeastFilter.curry((filterResults[i] == undefined)?"":filterResults[i],SAMPLE_TYPE_PROPERTIES[i]));
-		}
-	}
-	
-	var selection2 = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-	
-		selection2.style("display", function(data) {
-		 		if ($.inArray(data, displayedYeasts) != -1) {
-					return "table-row"
-				} 
-				else {
-					return  "none"
-				}
-			});
-			
-};
-
-
-
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : SAMPLE_TYPE
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	//showChildrenSamples();
-	populateMenu();
-	createTableFromProperties();
-	createTableFilterFromProperties();
-	createVisualizeFiltersFromProperties();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	
-	
-	$('#search').keyup(function() {
-		visualize($('#search').val());
-	});
-	
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-
-
-
-
-/**
- * Show and Hide the filters when clicking on the Filters button 
- */
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-    
-  
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;"/>
-	<div id="login-form-div" style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  	<div id = "title" style="padding-top:20px"> TEMPLATE_SAMPLE </div>
-		<div id ="sectionsContainer"><div>
-		<div id='filter-button' style='padding-top: 570px; padding-left: 400px; font-weight:bold; padding-bottom:30px;'> <a onclick ="javascript:ShowHide('HiddenDiv')"  href='javascript:;' >Filters</a> </div>
-		<div class="mid" id="HiddenDiv" style="display: none;"> <table id="filterContainer"></table></div>
-		
- 		<div id="vis">
- 		   <div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-			   <div id="tableContainer"></div>
-	 	   </div>
-	 		
-			<div id="inspectorsContainer" style="float:right "></div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/webapp.js b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/webapp.js
deleted file mode 100644
index 1fe2e0bad4ea699d52ebeec6aac084b6538eeecf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/webapp.js
+++ /dev/null
@@ -1,59 +0,0 @@
-
-function showSamplesRecursively(top, samples, depth)
-{
-	if (depth > 2) return;
-	
-	var sampEnter = 
-		top.selectAll("div.samp")
-			.data(samples)
-		.enter()
-			.append("div")
-				.attr("class", "samp")
-				.style("left", depth > 0 ? "40px" : 0)
-				.text(function(d) { return d.identifier});
-	
-	showSamplesRecursively(sampEnter, function(d) {return d.parents ? d.parents : [] }, depth + 1);
-}
-
-function showSamplesWithParents(samples) {
-	var top = d3.select("#main");
-	samples = samples.filter(function(d) {return d.parents != null});
-	showSamplesRecursively(top, samples, 0);
-}
-
-function retrieveAndShowSamplesWithParents() {
-	
-	var samplesWithParentsSc = 
-	{
-		operator : "MATCH_ALL_CLAUSES",
-		subCriterias: [
-			{
-				targetEntityKind: "SAMPLE_PARENT",
-				criteria: {
-					matchClauses : [ 
-						{"@type":"AttributeMatchClause",
-							attribute : "CODE",
-							fieldType : "ATTRIBUTE",
-							desiredValue : "FR*" 
-						}]}
-			}
-		]
-	};
-	
-	openbisServer.searchForSamplesWithFetchOptions(
-		samplesWithParentsSc,
-		["PROPERTIES", "ANCESTORS"],
-		function(data) { showSamplesWithParents(data.result) });
-	
-}
-
-
-function enterApp()
-{
-	$("#login-form-div").hide();
-	$("#main").show();
-	$('#openbis-logo').height(50);
-	
-	retrieveAndShowSamplesWithParents();
-}
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/western_blotting-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/western_blotting-body-style.css
deleted file mode 100644
index ce803fd5ed52cc755ee65f293b443b9140e6b2e2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/western_blotting-body-style.css
+++ /dev/null
@@ -1,131 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#E5FFCC;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color:#B2B2B2;;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-/* Table */
-
-
-.western_blotting-table-data-cell {
-	overflow: hidden;
-	
-}
-
-
-#western_blotting-table tr:nth-child(odd) td{
-  background-color:#E5FFCC;
-}
-
-
-#western_blotting-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-#western_blotting-table tr.western_blotting-table-data:hover {
-   font-weight: bold;
-  
-}
-
-#western_blotting-table td{
-
-padding:5px;
-}
-
-#western_blotting-table tr.western_blotting-table-header {
-  font-size:18px;
-  font-weight: bold;
-  color:black;
-  background-color:	#CCFFCC;	
-  
- 
-  
-}
-
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/western_blotting-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/western_blotting-browser.html
deleted file mode 100644
index 1709eec67197dbdc702cdfeea3d29792cf95d4d2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/western_blotting-browser.html
+++ /dev/null
@@ -1,1044 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Genereal Protocol Browser</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<link type="text/css" rel="stylesheet" href="western_blotting-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-</head>
-
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> WESTERN BLOTTING </div>
-	  <div id ="sectionsContainer"><div>	
-
-	
-				
-
-<!--  
-		<div id="filter-button"	style="padding-left:400px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 400px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 400px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-				<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 400px">Antibody Name</td><td> <input style="width: 200px" id="antibodyName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 400px">Backbone</td><td> <input style="width: 200px" id="backbone_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 400px">Bacterial Antibitioc Resistance</td><td> <input style="width: 200px" id="antibiotic_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 400px">(Yeast) Marker</td><td> <input style="width: 200px" id="marker_filter" type="text"></td></tr> 		
-   	  </table> 		
-    </div>	
-	-->	
-		
-	
-    
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px; height: 500px; top: 100px; overflow: auto">
-		  <table id="western_blotting-table" style="float: left">
-			  <tr class="western_blotting-table-header"><th>Code</th><th>Name</th><th>For What</th><th>Storage</th><th>Publication</th></tr>
-				</table>
-			</div>
-			<span id="inspectorsContainer"></span>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All western_blotting
-var western_blottings = null;
-
-/// The western_blotting that are currently being inspected
-var inspectedwestern_blottings = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var antibodyValue = sample.properties.ANTIBODIES;
-  	sample.properties.ANTIBODY_PARENTS = [];
-	
-		if (!xmlValueRegex.test(antibodyValue))
-		return;
-
- 	  globalValue = antibodyValue;
-		var antibodyXml = xmlParser.parseFromString(antibodyValue, "text/xml");
-	
-	
-		for (i=1; i < antibodyXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = antibodyXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var ANTIBODY_PARENTS = null;
-			
-				
-				ANTIBODY_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.ANTIBODY_PARENTS.push(ANTIBODY_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				
-			}	  
-			
-			   
-}								
-	
-	
-				
-	
-
-	
-};
-
-function reformatString(sample)
-{
-
-
-  		sample.properties.WHAT_FOR = [];
-  		console.log(sample.properties.FOR_WHAT)
- 	
-			if (sample.properties.FOR_WHAT != "undefined") {
-				newArray = sample.properties.FOR_WHAT.split(/\d/);
-				for(i=0; i<newArray.length; i++) {
-   				WHAT_FOR = i+' '+newArray[i]+ "\n";
-   				sample.properties.WHAT_FOR.push(WHAT_FOR)
-   				
-				}
-				
-			console.log(sample.properties.WHAT_FOR)
-			//sample.properties.WHAT_FOR.push(sample.properties.WHAT_FOR)
-			}
-			
-			
-
-}
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
- 					
- 					
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION", "MATERIALS", "ORGANISM", "KIT"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	order2 = ["PROCEDURE",  "PROTOCOL_EVALUATION","DETAILS", "EPITOPE",  "CLONALITY", "ISOTYPE", "COMMENTS",  "PUBLICATION"   ]
-	
-	
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","ANTIBODY_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order4 = ["MEMBRANE","ANTIBODY_DILUTION","ANTIBODY_SOLUTION", "COMMENTS" ]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order5 = [ "XMLCOMMENTS","SUGGESTIONS", "PROTOCOL_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list5;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    western_blotting = objectOrId;
-  } else {
-  	western_blotting = western_blottingsById[objectOrId];
-  }
-  
-  return western_blotting;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the western_blottings variable */
-function initializewestern_blottings(result)
-{
-      // Construct a map of all western_blottings by id
-  western_blottingsById = {};
-
-	// Split the western_blottings into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpwestern_blottings = [], otherwestern_blottings = [];
-	var frpRegex = /^FRWB[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        western_blottingsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the western_blottingsById map
-	    theSample = western_blottingsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpwestern_blottings.push(theSample);
-		} else {
-			otherwestern_blottings.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		reformatString(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherwestern_blottings.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpwestern_blottings.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(6));
-		var frpNumberB = parseInt(b.code.substring(6));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of western_blottings
-	western_blottings = frpwestern_blottings.concat(otherwestern_blottings);
-}
-
-
-
-
-/** Set the size of the western_blotting-table based on whether or not inspectors are visible */
-function resizewestern_blottingTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var western_blottingTableTransition = d3.selectAll('div.western_blotting-table-data-cell');
-	western_blottingTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectwestern_blotting(western_blotting)
-{
-	if (inspectedwestern_blottings.indexOf(western_blotting) < 0) {
-		inspectedwestern_blottings.push(western_blotting);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var western_blottingToSend = $.extend({}, western_blotting);
-		delete western_blottingToSend.parents;
-		delete western_blottingToSend.children;
-	
-	}
-	resizewestern_blottingTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(western_blotting)
-{
-	var index = inspectedwestern_blottings.indexOf(western_blotting);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedwestern_blottings.splice(index, 1);
-	resizewestern_blottingTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedwestern_blottings, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectwestern_blotting(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectwestern_blotting(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	var propsTable5 = box.append("table").attr("class", "properties");
-	propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-					
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializewestern_blottings(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (western_blottings.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#western_blotting-table").selectAll("tr.western_blotting-table-data").data(western_blottings);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "western_blotting-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectwestern_blotting)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.WHAT_FOR, sample.properties.STORAGE, sample.properties.PUBLICATION]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "western_blotting-table-data-cell")
-			.text(String)
-
-}
-
-function western_blottingFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#western_blotting-table").selectAll("tr.western_blotting-table-data").data(western_blottings);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedwestern_blottings) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "WESTERN_BLOTTING" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenu();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-body-style-modified.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-body-style-modified.css
deleted file mode 100644
index 6826f412199c98a5ef9ca00e25cc2117fadf48cd..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-body-style-modified.css
+++ /dev/null
@@ -1,61 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-
-
-
-
-/**#yeast-table{ position:absolute; left:200px; width: 100px; height: 100px; top: 100px; overflow: auto;}**/
-
-yeast.table { counter-reset: line-number; }
-
-.yeast-table-data-cell {
-	overflow: hidden;
-		
-}
-
-#yeast-table tr:nth-of-type(odd) {
-   background-color:#A6A64D;
-}
-
-#yeast-table tr:nth-of-type(even) {
-   background-color:#ECEFEF;
-}
-
-
-#yeast-table tr.yeast-table-data:hover {
-  font-weight: bold;
-}
-
-
-#yeast-table tr.yeast-table-data td {
-  padding: 5px;
-}
-
-#yeast-table tr.yeast-table-data:hover td {
-  padding: 5px 2px;
-}
-
-#yeast-table td{
-
-padding:5px;
-
-}
-
-
-#yeast-table th {
- 
-  padding-left:5px;
-  padding-right:5px;
-}
-
-
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-body-style.css b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-body-style.css
deleted file mode 100644
index e89acd78af9895eb8d3eab6cf4ffdec37f3de186..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-body-style.css
+++ /dev/null
@@ -1,128 +0,0 @@
-body { font: 14px "Trebuchet MS", sans-serif; }
-
-h1 { font: 16px; }
-h3 { font: 12px; }
-
-div#vis { 
-	padding-top: 10px;
-	font: 12px "Verdana", sans-serif; }	
-}
-div#vis div { padding-top: 2px;}
-
-/* Inspector */
-
-div.inspector {
-	font: 14px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-
-.properties td:nth-child(odd) {
-  background-color:	#FFFFCC;
-  width:30%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#F7F7F7;
-  width:70%;
-}
-
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color: #E3E3E3;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
-
-/*
-.downloads caption {
-	text-align: left;
-}
-*/
-
-
-.downloads tr {
-	padding: 0px;
-}
-
-.downloads td {
-	border: 2px solid #FFFFFF;	
-	padding: 2px;
-}
-
-.downloads td:hover {
-	cursor: pointer;
-	text-decoration: underline
-}
-
-input:focus{
-background-color: white;
-}
-
-
-
-
-.yeast-table-data-cell {
-	overflow: hidden;
-		
-}
-
-#yeast-table tr:nth-child(odd) td{
-   background-color:	#FFFFCC;
-}
-
-#yeast-table tr:nth-child(even) td{
-  background-color:#F7F7F7;
-}
-
-
-#yeast-table tr.yeast-table-data:hover {
-  font-weight: bold;
-}
-
-
-
-#yeast-table td{
-padding:5px;
-}
-
-#yeast-table tr.yeast-table-header {
- 
-  font-size:18px;
-  font-weight: bold;
-  color:black;
-  background-color:	#FFFF99;
-
-}
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-d3table.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-d3table.html
deleted file mode 100644
index 1d4acd5a1ec70406a6215dbe27329d0afae44143..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-d3table.html
+++ /dev/null
@@ -1,986 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Yeast Browser</title>
-	<link type="text/css" rel="stylesheet" href="yeast-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="d3.tsv.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" language="javascript" src="jquery.dataTables.js"></script>
-	
-	<!--<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>-->
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "COMMENTS", "PROJECT",  "PLASMIDS", "PLASMID_NAME",  "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order5 = ["YEAST_PARENTS"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-		return new_list5;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    yeast = objectOrId;
-  //  plasmid =objectOrId;
-  } else {
-  	yeast = yeastsById[objectOrId];
- // 	plasmid = plasmidsById[objectOrId];
-  }
-  
-  //return yeast, plasmid;
-  return yeast;
-}
-
-
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list5=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list5.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list5;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list6=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-		data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list6.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list6;
-}
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-		
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-function initializePlasmids(result)
-{
-      // Construct a map of all plasmids by id
-  plasmidsById = {};
-
-	// Split the plasmids into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        plasmidsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the plasmidsById map
-	    theSample = plasmidsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of plasmids
-	plasmids = frpPlasmids.concat(otherPlasmids);
-}
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(yeast)
-{
-	var index = inspectedYeasts.indexOf(yeast);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedYeasts.splice(index, 1);
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedYeasts, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-	
-
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-				
-				var propsTable5 = box.append("table").attr("class", "properties");
-	      propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-	   	.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	//return d.identifier.slice(11,50);
-					 	return d.identifier
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTable2 = box.append("table").attr("class", "properties");
-	propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-
-	var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	
-
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	
-
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-	
-	
-	
-	
- 
-  var yeastdataset = yeasts;
-  data(function(sample) { 
-		   return [sample.identifier.slice(11,50), sample.properties.OWNER]} 
-	
-	var id = sample.identifier.slice(11,50)
-	var owner = sample.properties.OWNER
-	var own_num = sample.properties.OWNER_NUMBER
-	
-	
-	
-	
-	var data = [
-	    {Code: id, Owner: Owner, OwnerNumber: own_num}
-	
-	]
-	
-	function transform(attrName) {
-    d3.select("tbody").selectAll("tr").remove();
-
-// Header
-    var th = d3.select("thead").selectAll("th")
-            .data(jsonToArray(data[0]))
-            .enter().append("th")
-            .attr("onclick", function (d, i) { return "transform('" + d[0] + "');";})
-            .text(function(d) { return d[0]; })
-
-// Rows
-    var tr = d3.select("tbody").selectAll("tr")
-            .data(data)
-            .enter().append("tr")
-            .sort(function (a, b) { return a == null || b == null ? 0 : stringCompare(a[attrName], b[attrName]); });
-
-// Cells
-    var td = tr.selectAll("td")
-            .data(function(d) { return jsonToArray(d); })
-            .enter().append("td")
-            .attr("onclick", function (d, i) { return "transform('" + d[0] + "');";})
-            .text(function(d) { return d[1]; });
-
-}
-
-function stringCompare(a, b) {
-    a = a.toLowerCase();
-    b = b.toLowerCase();
-    return a > b ? 1 : a == b ? 0 : -1;
-}
-
-function jsonKeyValueToArray(k, v) {return [k, v];}
-
-function jsonToArray(json) {
-    var ret = new Array();
-    var key;
-    for (key in json) {
-        if (json.hasOwnProperty(key)) {
-            ret.push(jsonKeyValueToArray(key, json[key]));
-        }
-    }
-    return ret;
-};
-	
-	
-	
-	
-	
-}
-
-
-/**
- * Filters
- */
-function yeastFilter(filter, property, element, index, array) {
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-/**
- * Function visualize filters 
- */
-function visualize(ownerFilterText, ownerNumFilterText, yeastNameFilterText, projectFilterText, plasmidsFilterText, yeastParentsFilterText, geneticBackgroundFilterText, matingTypeFilterText )
-{
-
-
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (yeastNameFilterText == undefined) 
-	{
-		yeastNameFilterText = "";
-	}
-
-	if (projectFilterText == undefined) 
-	{
-		projectFilterText = "";
-	}
-	
-	if (plasmidsFilterText == undefined) 
-	{
-		plasmidsFilterText = "";
-	}
-
-	if (yeastParentsFilterText == undefined) 
-	{
-		yeastParentsFilterText = "";
-	}
-	
-		if (geneticBackgroundFilterText == undefined) 
-	{
-		geneticBackgroundFilterText = "";
-	}
-
-	if (matingTypeFilterText == undefined) 
-	{
-		matingTypeFilterText = "";
-	}
-	
-	var displayedYeasts = yeasts.filter(yeastFilter.curry(ownerFilterText, "OWNER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastNameFilterText, "YEAST_STRAIN_NAME"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(projectFilterText, "PROJECT"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(plasmidsFilterText, "PLASMIDS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastParentsFilterText, "YEAST_PARENTS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(geneticBackgroundFilterText, "GENETIC_BACKGROUND"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(matingTypeFilterText, "MATING_TYPE"));
-	
-	
-	var selection2 = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-	
-		selection2.style("display", function(data) {
-		 		if ($.inArray(data, displayedYeasts) != -1) {
-					return "table-row"
-				} 
-				else {
-					return  "none"
-				}
-			});
-			
-	  
-};
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "YEAST" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis();
-	
-	//showChildrenSamples();
-
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-
-  $('#yeastName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#project_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#plasmids_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#yeastParents_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-  $('#geneticBackground_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#matingType_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-
-
-
-
-/**
- * Show and Hide the filters when clicking on the Filters button 
- */
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-    
-  
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> YEASTS </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;;top:10px">Logout</button>
-		</div>
-		<div id="chemical_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/chemicals-browser.html">Chemicals</a> 
-		</div>   		
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/oligo-browser.html">Oligos</a>  
-		</div>		
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:200px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/plasmid-browser.html">Plasmids</a>  
-		</div>		
-		<div id="yeast_browser" style="position: absolute; left:10px; top:250px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/yeast-browser.html">Yeasts</a>  
-		</div>		
-
-		
-		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Yeast Strain Name</td><td> <input style="width: 200px" id="yeastName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Project</td><td> <input style="width: 200px" id="project_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Plasmids</td><td> <input style="width: 200px" id="plasmids_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Yeast Parents</td><td> <input style="width: 200px" id="yeastParents_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Genetic Background</td><td> <input style="width: 200px" id="geneticBackground_filter" type="text"></td></tr>		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Mating Type</td><td> <input style="width: 200px" id="matingType_filter" type="text"></td></tr> 		
- 	</table>
- 	</div>
- 	
- 		  
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-		  <table id="yeast-table" cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
-			  <thead >
-					<!-- <tr class="yeast-table-header"><th>Yeast Code</th><th>Owner</th><th>Owner Number</th><th>Yeast Strain Name</th><th>Project</th><th>Plasmids</th><th>Yeast Parents</th><th>Genetic Background</th><th>Mating Type</th></tr>-->
-				</thead> 
-				<tbody></tbody>
-			</table>
-	 		</div>
-	
-		 
-			<div id="inspectorsContainer" style="float:right "></div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-fixedheader.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-fixedheader.html
deleted file mode 100644
index 51be66aa94c473019fd7f1771c4b8532eb5cf7d4..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-fixedheader.html
+++ /dev/null
@@ -1,965 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Yeast Browser</title>
-	<link type="text/css" rel="stylesheet" href="yeast-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="d3.tsv.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" language="javascript" src="jquery.dataTables.js"></script>
-	
-	<!--<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>-->
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "COMMENTS", "PROJECT",  "PLASMIDS", "PLASMID_NAME",  "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order5 = ["YEAST_PARENTS"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-		return new_list5;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    yeast = objectOrId;
-  //  plasmid =objectOrId;
-  } else {
-  	yeast = yeastsById[objectOrId];
- // 	plasmid = plasmidsById[objectOrId];
-  }
-  
-  //return yeast, plasmid;
-  return yeast;
-}
-
-
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list5=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list5.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list5;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list6=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-		data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list6.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list6;
-}
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-function initializePlasmids(result)
-{
-      // Construct a map of all plasmids by id
-  plasmidsById = {};
-
-	// Split the plasmids into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        plasmidsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the plasmidsById map
-	    theSample = plasmidsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of plasmids
-	plasmids = frpPlasmids.concat(otherPlasmids);
-}
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(yeast)
-{
-	var index = inspectedYeasts.indexOf(yeast);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedYeasts.splice(index, 1);
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedYeasts, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-	
-
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-				
-				var propsTable5 = box.append("table").attr("class", "properties");
-	      propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-	   	.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	//return d.identifier.slice(11,50);
-					 	return d.identifier
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTable2 = box.append("table").attr("class", "properties");
-	propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-
-	var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	
-
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	
-
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
- 
-
-	var selection = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-		
-selection
-	  .enter()
-		.append("tr")	  
-	 	.attr("class", "yeast-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectYeast)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.OWNER, sample.properties.OWNER_NUMBER, sample.properties.YEAST_STRAIN_NAME, sample.properties.PROJECT, sample.properties.PLASMIDS, sample.properties.YEAST_PARENTS, sample.properties.GENETIC_BACKGROUND, sample.properties.MATING_TYPE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "yeast-table-data-cell")
-			.text(String)
-			
-}
-
-
-/**
- * Filters
- */
-function yeastFilter(filter, property, element, index, array) {
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-/**
- * Function visualize filters 
- */
-function visualize(ownerFilterText, ownerNumFilterText, yeastNameFilterText, projectFilterText, plasmidsFilterText, yeastParentsFilterText, geneticBackgroundFilterText, matingTypeFilterText )
-{
-
-
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (yeastNameFilterText == undefined) 
-	{
-		yeastNameFilterText = "";
-	}
-
-	if (projectFilterText == undefined) 
-	{
-		projectFilterText = "";
-	}
-	
-	if (plasmidsFilterText == undefined) 
-	{
-		plasmidsFilterText = "";
-	}
-
-	if (yeastParentsFilterText == undefined) 
-	{
-		yeastParentsFilterText = "";
-	}
-	
-		if (geneticBackgroundFilterText == undefined) 
-	{
-		geneticBackgroundFilterText = "";
-	}
-
-	if (matingTypeFilterText == undefined) 
-	{
-		matingTypeFilterText = "";
-	}
-	
-	var displayedYeasts = yeasts.filter(yeastFilter.curry(ownerFilterText, "OWNER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastNameFilterText, "YEAST_STRAIN_NAME"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(projectFilterText, "PROJECT"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(plasmidsFilterText, "PLASMIDS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastParentsFilterText, "YEAST_PARENTS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(geneticBackgroundFilterText, "GENETIC_BACKGROUND"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(matingTypeFilterText, "MATING_TYPE"));
-	
-	
-	var selection2 = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-	
-		selection2.style("display", function(data) {
-		 		if ($.inArray(data, displayedYeasts) != -1) {
-					return "table-row"
-				} 
-				else {
-					return  "none"
-				}
-			});
-			
-	  
-};
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "YEAST" 
-			} ],
-		operator : "MATCH_ANY_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis();
-	
-	//showChildrenSamples();
-
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-
-  $('#yeastName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#project_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#plasmids_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#yeastParents_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-  $('#geneticBackground_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#matingType_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-
-
-
-
-/**
- * Show and Hide the filters when clicking on the Filters button 
- */
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-    
-  
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> YEASTS </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;;top:10px">Logout</button>
-		</div>
-		<div id="chemical_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/chemicals-browser.html">Chemicals</a> 
-		</div>   		
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/oligo-browser.html">Oligos</a>  
-		</div>		
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:200px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/plasmid-browser.html">Plasmids</a>  
-		</div>		
-		<div id="yeast_browser" style="position: absolute; left:10px; top:250px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/yeast-browser.html">Yeasts</a>  
-		</div>		
-
-		
-		<div id="filter-button"	style="padding-left:200px; padding-top: 620px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Yeast Strain Name</td><td> <input style="width: 200px" id="yeastName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Project</td><td> <input style="width: 200px" id="project_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Plasmids</td><td> <input style="width: 200px" id="plasmids_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Yeast Parents</td><td> <input style="width: 200px" id="yeastParents_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Genetic Background</td><td> <input style="width: 200px" id="geneticBackground_filter" type="text"></td></tr>		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Mating Type</td><td> <input style="width: 200px" id="matingType_filter" type="text"></td></tr> 		
- 	</table>
- 	</div>
-
-    <div id ="theads">
-	    <div style = "position:absolute; left:201px; top: 100px " >
-	    <table id = "theaders" cellpadding="0" cellspacing="0" border="1" bordercolor="white" class="display" width="100%" >
-					<!-- <tr class="yeast-table-header"><th>Yeast Code</th><th>Owner</th><th>Owner Number</th><th>Yeast Strain Name</th><th>Project</th><th>Plasmids</th><th>Yeast Parents</th><th>Genetic Background</th><th>Mating Type</th></tr>-->
-				<tr>
-				<td style="font-weight: bold; padding-left: 10px; width: 45px">Yeast Code</td>
-				<td style="font-weight: bold; padding-left: 60px; width: 113px">Owner</td>
-				<td  style="font-weight: bold; padding-left: 10px; width: 59px">Owner Number</td>
-				<td  style="font-weight: bold; padding-left: 30px; width: 151px">Yeast Strain Name</td>
-				<td  style="font-weight: bold; padding-left: 10px; width: 73px">Project</td>
-				<td  style="font-weight: bold; padding-left: 100px; width: 143px">Plasmids</td>
-				<td  style="font-weight: bold; padding-left: 70px; width: 140px">Yeast Parents</td>
-				<td  style="font-weight: bold; padding-left: 0px; width: 30px">Genetic Background</td>
-				<td  style="font-weight: bold; padding-left: 20px; width: 55px">Mating Type</td>
-				</tr>
-				</table> 
-	    </div> 	
-	    
-	    
-	    
-<!-- 	   		<td style="font-weight: bold; padding-left: 10px; width: 20px">Yeast Code</td>
-				<td style="font-weight: bold; padding-left: 80px; width: 50px">Owner</td>
-				<td  style="font-weight: bold; padding-left: 70px; width: 50px">Owner Number</td>
-				<td  style="font-weight: bold; padding-left: 80px; width: 100px">Yeast Strain Name</td>
-				<td  style="font-weight: bold; padding-left: 30px; width: 50px">Project</td>
-				<td  style="font-weight: bold; padding-left: 100px; width: 50px">Plasmids</td>
-				<td  style="font-weight: bold; padding-left: 150px; width: 100px">Yeast Parents</td>
-				<td  style="font-weight: bold; padding-left: 70px; width: 30px">Genetic Background</td>
-				<td  style="font-weight: bold; padding-left: 20px; width: 55px">Mating Type</td>-->
-	  
- 		  
-	<div id="vis">
-  	 	<div style="position:absolute; left:200px; width: 1200px;height: 500px; top: 135px; overflow: auto">
-		  <table id="yeast-table" cellpadding="0" cellspacing="0" border="1" bordercolor="white" class="display" width="100%">
-			</table>
-	 		</div>
-	
-
-			<div id="inspectorsContainer" style="float:right "></div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-tables-redone.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-tables-redone.html
deleted file mode 100644
index b858d2446da0add2e4d0f231bd45a20c234b535e..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser-tables-redone.html
+++ /dev/null
@@ -1,950 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Yeast Browser</title>
-	<link type="text/css" rel="stylesheet" href="yeast-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="base.css" />
-	<link type="text/css" rel="stylesheet" href="reset-min.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="d3.tsv.js"></script>
-	<script type="text/javascript" src="jquery.dataTables.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" language="javascript" src="jquery.dataTables.js"></script>
-	<script type="text/javascript" charset="utf-8">
-			$(document).ready(function() {
-				$('#example').dataTable( {
-					"sPaginationType": "full_numbers"
-				} );
-			} );
-		</script>
-	<!--<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>-->
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "relative")
-		.style("overflow", "auto")
-		.style("float", "right")
-		.style("top", "20px")		
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "COMMENTS", "PROJECT",  "PLASMIDS", "PLASMID_NAME",  "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order5 = ["YEAST_PARENTS"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-		return new_list5;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    yeast = objectOrId;
-  //  plasmid =objectOrId;
-  } else {
-  	yeast = yeastsById[objectOrId];
- // 	plasmid = plasmidsById[objectOrId];
-  }
-  
-  //return yeast, plasmid;
-  return yeast;
-}
-
-
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list5=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list5.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list5;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list6=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-		data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list6.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list6;
-}
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-function initializePlasmids(result)
-{
-      // Construct a map of all plasmids by id
-  plasmidsById = {};
-
-	// Split the plasmids into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        plasmidsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the plasmidsById map
-	    theSample = plasmidsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of plasmids
-	plasmids = frpPlasmids.concat(otherPlasmids);
-}
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(yeast)
-{
-	var index = inspectedYeasts.indexOf(yeast);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedYeasts.splice(index, 1);
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedYeasts, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-	
-
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-				
-				var propsTable5 = box.append("table").attr("class", "properties");
-	      propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-	   	.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	//return d.identifier.slice(11,50);
-					 	return d.identifier
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTable2 = box.append("table").attr("class", "properties");
-	propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-
-	var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	
-
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	
-
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#example").selectAll("tr.example-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-			
-	selection
-	  .enter()
-		.append("tr")	  
-	 	.attr("class", "example-data")
-		.style("cursor", "pointer")
-		.on("click", inspectYeast)
-		.selectAll("td").data(function(sample) { 
-		var string = sample.properties
-		
-		console.log(string) 
-		return [sample.identifier.slice(11,50), sample.properties.OWNER, sample.properties.OWNER_NUMBER, sample.properties.YEAST_STRAIN_NAME, sample.properties.PROJECT, sample.properties.PLASMIDS, sample.properties.YEAST_PARENTS, sample.properties.GENETIC_BACKGROUND, sample.properties.MATING_TYPE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "example-data-cell")
-			.text(String)
-
-
-}
-
-
-/**
- * Filters
- */
-function yeastFilter(filter, property, element, index, array) {
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-/**
- * Function visualize filters 
- */
-function visualize(ownerFilterText, ownerNumFilterText, yeastNameFilterText, projectFilterText, plasmidsFilterText, yeastParentsFilterText, geneticBackgroundFilterText, matingTypeFilterText )
-{
-
-
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (yeastNameFilterText == undefined) 
-	{
-		yeastNameFilterText = "";
-	}
-
-	if (projectFilterText == undefined) 
-	{
-		projectFilterText = "";
-	}
-	
-	if (plasmidsFilterText == undefined) 
-	{
-		plasmidsFilterText = "";
-	}
-
-	if (yeastParentsFilterText == undefined) 
-	{
-		yeastParentsFilterText = "";
-	}
-	
-		if (geneticBackgroundFilterText == undefined) 
-	{
-		geneticBackgroundFilterText = "";
-	}
-
-	if (matingTypeFilterText == undefined) 
-	{
-		matingTypeFilterText = "";
-	}
-	
-	var displayedYeasts = yeasts.filter(yeastFilter.curry(ownerFilterText, "OWNER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastNameFilterText, "YEAST_STRAIN_NAME"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(projectFilterText, "PROJECT"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(plasmidsFilterText, "PLASMIDS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastParentsFilterText, "YEAST_PARENTS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(geneticBackgroundFilterText, "GENETIC_BACKGROUND"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(matingTypeFilterText, "MATING_TYPE"));
-	
-	
-	var selection2 = d3.select("#vis").select("#example").selectAll("tr.example-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-	
-		selection2.style("display", function(data) {
-		 		if ($.inArray(data, displayedYeasts) != -1) {
-					return "table-row"
-				} 
-				else {
-					return  "none"
-				}
-			});
-			
-	  
-};
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "YEAST" 
-			} ],
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "PARENTS", "CHILDREN"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	$('#openbis-logo').height(30);
-	
-	createVis();
-	
-	//showChildrenSamples();
-
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-
-  $('#yeastName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#project_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#plasmids_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#yeastParents_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-  $('#geneticBackground_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#matingType_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-
-
-
-
-/**
- * Show and Hide the filters when clicking on the Filters button 
- */
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-    
-  
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; height: 100px;"/>
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-	<div id="main">
-	  <div id = "title" style="padding-top:20px"> YEASTS </div>
-		<div id="button-group">	
-			<button id="logout-button" style="position: absolute; right:10px;;top:10px">Logout</button>
-		</div>
-		<div id="chemical_browser"	style="position: absolute; left:10px; top:100px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/chemicals-browser.html">Chemicals</a> 
-		</div>   		
-		<div id="oligo_browser"	style="position: absolute; left:10px; top:150px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/oligo-browser.html">Oligos</a>  
-		</div>		
-		<div id="plasmid_browser"	style="position: absolute; left:10px; top:200px">
-		  <a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/plasmid-browser.html">Plasmids</a>  
-		</div>		
-		<div id="yeast_browser" style="position: absolute; left:10px; top:250px">
-		 	<a href="file:///Users/barillac/workspace/plasmid/source/html/yeastlabbrowser/yeast-browser.html">Yeasts</a>  
-		</div>		
-
-		
-		<div id="filter-button"	style="padding-left:200px; padding-top: 570px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 		
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-			  <tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Yeast Strain Name</td><td> <input style="width: 200px" id="yeastName_filter" type="text"></td></tr> 		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Project</td><td> <input style="width: 200px" id="project_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Plasmids</td><td> <input style="width: 200px" id="plasmids_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Yeast Parents</td><td> <input style="width: 200px" id="yeastParents_filter" type="text"></td></tr> 		
-   	  	<tr style="padding-top: 15px"><td style="font-weight: bold; padding-left: 200px">Genetic Background</td><td> <input style="width: 200px" id="geneticBackground_filter" type="text"></td></tr>		
-      	<tr style="padding-top: 15px"><td style="font-weight: bold;  padding-left: 200px">Mating Type</td><td> <input style="width: 200px" id="matingType_filter" type="text"></td></tr> 		
- 	</table>
- 	</div>
- 	
- 		  
-		<div id="vis">
-  	 	<div style="position:absolute; left:200px">
-		 <table id="example" border="0" cellpadding="0" cellspacing="0" class="pretty">
-			  <thead >
-					<tr><th>Yeast Code</th><th>Owner</th><th>Owner Number</th><th>Yeast Strain Name</th><th>Project</th><th>Plasmids</th><th>Yeast Parents</th><th>Genetic Background</th><th>Mating Type</th></tr>
-				</thead> 
-				<tbody></tbody>
-			</table>
-	 		</div>
-	
-		 
-			<div id="inspectorsContainer" style="float:right "></div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser.html
deleted file mode 100644
index 5e0b9bd482e5ccd4dfc329fc996c1878f72f3658..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/html/yeast-browser.html
+++ /dev/null
@@ -1,1017 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<title>Yeast Browser</title>
-	<link type="text/css" rel="stylesheet" href="yeast-body-style.css" />
-	<link type="text/css" rel="stylesheet" href="button.css" />
-	<script type="text/javascript" src="d3.js"></script>
-	<script type="text/javascript" src="d3.layout.js"></script>
-	<script type="text/javascript" src="d3.time.js"></script>
-	<script type="text/javascript" src="d3.tsv.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="infra.js"></script>
-	<script type="text/javascript" src="common.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<script type="text/javascript" language="javascript" src="jquery.dataTables.js"></script>
-	
-	<!--<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>-->
-	<!-- To speed development, cache the requests -->
-	<!-- <script type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-// Some global variables we refer to
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("position", "absolute")
-		.style("overflow", "auto")
-		.style("left", "1250px")
-		.style("top", "100px")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var plasmidValue = sample.properties.PLASMIDS;
-  sample.properties.PLASMIDS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(plasmidValue))
-		return;
-
-  globalValue = plasmidValue;
-	var plasmidXml = xmlParser.parseFromString(plasmidValue, "text/xml");
-	
-	
-	for (i=1; i < plasmidXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = plasmidXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	 		   		
-						if (sampleNode.attributes.getNamedItem("annotation") != null)  {
-	 	  				 var annotation = sampleNode.attributes.getNamedItem("annotation").value;
-						}	 		   		
-						else{
-								var annotation = "";
-						}
-						if (sampleNode.attributes.getNamedItem("rel") != null) {
-								var relationship = sampleNode.attributes.getNamedItem("rel").value;
-						}	
-						else{
-								var relationship = "";
-						}  	  		
-				 }
-			
-			  var PLASMIDS_PARENTS = null;
-			
-				if (relationship == "INT"){
-				  PLASMIDS_PARENTS = " " + code + "::" + annotation;
-				}
-				if (relationship == "MOD"){
-			   	PLASMIDS_PARENTS = " " + code + "_" + annotation;
-				}
-				if (relationship == "DEL"){
-			  	 PLASMIDS_PARENTS = " " + code + "_D_" + annotation;
-				}
-				if (relationship == "") {
-						PLASMIDS_PARENTS = code;
-				}
-				
-				sample.properties.PLASMIDS_PARENTS.push(PLASMIDS_PARENTS);
-	
-}			
-			
-			
-			var yeastParentsValue = sample.properties.YEAST_PARENTS;
- 	   sample.properties.YEASTS_PARENTS = [];
-  
-	
-	if (!xmlValueRegex.test(yeastParentsValue))
-		return;
-
- 		 globalValue2 = yeastParentsValue;
-		 var yeastParentsXml = xmlParser.parseFromString(yeastParentsValue, "text/xml");
-	
-		for (i=1; i < yeastParentsXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	
-			var sampleYeastNode = yeastParentsXml.childNodes.item(0).childNodes.item(i);
-			
- 		  var yeastsDisplay = null;
-  
-			if (sampleYeastNode.attributes.getNamedItem("code") != null ) {
-					var yeastCode = sampleYeastNode.attributes.getNamedItem("code").value;
-			}
-			
-	yeastsDisplay = yeastCode;
-		
-	sample.properties.YEASTS_PARENTS.push(yeastsDisplay);
-
-	}
-	
-};
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "COMMENTS", "PROJECT",  "PLASMIDS_PARENTS", "PLASMID_NAME",  "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order5 = ["YEASTS_PARENTS"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-		return new_list5;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    yeast = objectOrId;
-  
-  } else {
-  	yeast = yeastsById[objectOrId];
-  
-  }
-  
- 
-  return yeast;
-}
-
-
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list5=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list5.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list5;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list6=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-		data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list6.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list6;
-}
-
-
-
-
-
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(yeast)
-{
-	var index = inspectedYeasts.indexOf(yeast);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedYeasts.splice(index, 1);
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedYeasts, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-	
-
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-				
-				var propsTable5 = box.append("table").attr("class", "properties");
-	      propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-	   	.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					 	
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTable2 = box.append("table").attr("class", "properties");
-	propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-
-	var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	
-
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	
-
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
- 
-
-	var selection = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-		
-selection
-	  .enter()
-		.append("tr")	  
-	 	.attr("class", "yeast-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectYeast)
-		.selectAll("td").data(function(sample) { return [sample.identifier.slice(11,50), sample.properties.OWNER.split('_').join(" "), sample.properties.OWNER_NUMBER, sample.properties.YEAST_STRAIN_NAME, sample.properties.PROJECT, sample.properties.PLASMIDS_PARENTS, sample.properties.YEASTS_PARENTS, sample.properties.GENETIC_BACKGROUND, sample.properties.MATING_TYPE]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "yeast-table-data-cell")
-			.text(String)
-			
-}
-
-
-/**
- * Filters
- */
- 
- 
-function yeastFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
- 
- 
-
-
-/**
- * Function visualize filters 
- */
-function visualize(ownerFilterText, ownerNumFilterText, yeastNameFilterText, projectFilterText, plasmidsFilterText, yeastParentsFilterText, geneticBackgroundFilterText, matingTypeFilterText )
-{
-
-
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (yeastNameFilterText == undefined) 
-	{
-		yeastNameFilterText = "";
-	}
-
-	if (projectFilterText == undefined) 
-	{
-		projectFilterText = "";
-	}
-	
-	if (plasmidsFilterText == undefined) 
-	{
-		plasmidsFilterText = "";
-	}
-
-	if (yeastParentsFilterText == undefined) 
-	{
-		yeastParentsFilterText = "";
-	}
-	
-		if (geneticBackgroundFilterText == undefined) 
-	{
-		geneticBackgroundFilterText = "";
-	}
-
-	if (matingTypeFilterText == undefined) 
-	{
-		matingTypeFilterText = "";
-	}
-	
-	var displayedYeasts = yeasts.filter(yeastFilter.curry(ownerFilterText, "OWNER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastNameFilterText, "YEAST_STRAIN_NAME"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(projectFilterText, "PROJECT"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(plasmidsFilterText, "PLASMIDS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastParentsFilterText, "YEAST_PARENTS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(geneticBackgroundFilterText, "GENETIC_BACKGROUND"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(matingTypeFilterText, "MATING_TYPE"));
-	
-	
-	var selection2 = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-	
-		selection2.style("display", function(data) {
-		 		if ($.inArray(data, displayedYeasts) != -1) {
-					return "table-row"
-				} 
-				else {
-					return  "none"
-				}
-			});
-			
-	  
-};
-
-
-
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-
-
-
-
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "YEAST" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	//showChildrenSamples();
-	
-	populateMenu();
-
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-
-  $('#yeastName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#project_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#plasmids_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#yeastParents_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-  $('#geneticBackground_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#matingType_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#search').keyup(function() {
-		visualize($('#search').val());
-	});
-	
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-
-
-
-
-/**
- * Show and Hide the filters when clicking on the Filters button 
- */
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-    
-  
-</script>
-
-</head>
-<body>
-	<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; left: 10px; width: 120px;">
-	<div id="login-form-div"style="position: absolute; left: 300px; top: 200px;">
-		<h1>openBIS YeastLab</h1>
-		<form id="login-form" action="javascript:">
-			<input id="username" type="text" required="required"> 
-			<input id="password" type="password" required="required"> 
-			<button class="login-button" id="login-button" type="submit">Login</button>
-		</form>
-	</div>
-
-<div id="main">
-	  <div id = "title" style="padding-top:20px"> YEASTS </div>
-		<div id ="sectionsContainer"><div>	
-
-
-
-		<div id="filter-button"	style=" padding-top: 570px; padding-left: 400px; font-weight:bold; padding-bottom:30px;">
-		  <a onclick ="javascript:ShowHide('HiddenDiv')"  href="javascript:;" >Filters</a> 
-		</div> 	
-
-	 <div class="mid" id="HiddenDiv" style="DISPLAY: none;"> 
-		<table>
-			  <tr style="position:absolute; top: 680px; left: 400px"><td style="font-weight: bold; width: 200px">Owner</td><td><input style="width: 200px" id="owner_filter" type="text"></td></tr> 		
-			  <tr style="position:absolute; top: 720px; left: 400px"><td style="font-weight: bold;  width:200px">Owner Number</td><td><input style="width: 200px" id="ownerNum_filter" type="text"></td></tr>
-			  <tr style="position:absolute; top: 760px; left: 400px"><td style="font-weight: bold; width: 200px">Yeast Strain Name</td><td> <input style="width: 200px" id="yeastName_filter" type="text"></td></tr> 		
-      	<tr style="position:absolute; top: 800px; left: 400px"><td style="font-weight: bold;  width: 200px">Project</td><td> <input style="width: 200px" id="project_filter" type="text"></td></tr> 		
-   	  	<tr style="position:absolute; top: 840px; left: 400px"><td style="font-weight: bold; width: 200px">Plasmids</td><td> <input style="width: 200px" id="plasmids_filter" type="text"></td></tr> 		
-   	  	<tr style="position:absolute; top: 880px; left: 400px"><td style="font-weight: bold;  width: 200px">Yeast Parents</td><td> <input style="width: 200px" id="yeastParents_filter" type="text"></td></tr> 		
-   	  	<tr style="position:absolute; top: 920px; left: 400px"><td style="font-weight: bold; width: 200px">Genetic Background</td><td> <input style="width: 200px" id="geneticBackground_filter" type="text"></td></tr>		
-      	<tr style="position:absolute; top: 960px; left: 400px; padding-bottom:20px"><td style="font-weight: bold;  width: 200px">Mating Type</td><td> <input style="width: 200px" id="matingType_filter" type="text"></td></tr> 		
- 	</table>
- 	</div>
-
-	    
-	    
-	    
-
- 		<div id="vis">
- 		   <div style="position:absolute; left:200px; width: 1000px;height: 500px; top: 100px; overflow: auto">
-  	 	  <table id="yeast-table" cellpadding="0" cellspacing="0" border="1" bordercolor="white" class="display" width="100%">
-			  <thead >
-					<tr class="yeast-table-header"><th>Code</th><th>Owner</th><th>Owner Number</th><th>Yeast Strain Name</th><th>Project</th><th>Plasmids</th><th>Yeast Parents</th><th>Genetic Background</th><th>Mating Type</th></tr>
-				</thead> 
-				<tbody></tbody>
-			</table>
-	 		</div>
-	 		
-	 		
-	 		
-			<div id="inspectorsContainer" style="float:right "></div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/plugin.properties b/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/plugin.properties
deleted file mode 100644
index 9a94ff03bf056593809e33328f4b5346335829e1..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/1/as/webapps/yeastlabbrowser/plugin.properties
+++ /dev/null
@@ -1 +0,0 @@
-webapp-folder = html
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/antibody-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/antibody-browser.html
deleted file mode 100644
index 5a017993a15b5c7f3223f70ff3cffcd03364e44c..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/antibody-browser.html
+++ /dev/null
@@ -1,847 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-	
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Antibodies</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="antibody-table-header"><th>Code</th><th>Name</th><th>Storage</th><th>Host</th><th>For What</th></tr>
-								</thead>
-								<tbody id='antibody-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All antibodys
-var antibodys = null;
-
-/// The antibodys that are currently being inspected
-var inspectedAntibodys = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT", "MATERIALS" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["PROCEDURE",  "PROTOCOL_EVALUATION","DETAILS", "EPITOPE",  "CLONALITY", "ISOTYPE", "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order4 = ["MEMBRANE","ANTIBODY_DILUTION","ANTIBODY_SOLUTION", "COMMENTS" ]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order5 = [ "XMLCOMMENTS","SUGGESTIONS", "PROTOCOL_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list5;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    antibody = objectOrId;
-  } else {
-  	antibody = antibodysById[objectOrId];
-  }
-  
-  return antibody;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the antibodys variable */
-function initializeAntibodys(result)
-{
-      // Construct a map of all antibodys by id
-  antibodysById = {};
-
-	// Split the antibodys into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpAntibodys = [], otherAntibodys = [];
-	var frpRegex = /^FRAB[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        antibodysById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the antibodysById map
-	    theSample = antibodysById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpAntibodys.push(theSample);
-		} else {
-			otherAntibodys.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherAntibodys.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpAntibodys.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(4));
-		var frpNumberB = parseInt(b.code.substring(4));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of antibodys
-	antibodys = frpAntibodys.concat(otherAntibodys);
-}
-
-
-
-/** Set the size of the antibody-table based on whether or not inspectors are visible */
-function resizeAntibodyTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var antibodyTableTransition = d3.selectAll('div.antibody-table-data-cell');
-	antibodyTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectAntibody(antibody)
-{
-	if (inspectedAntibodys.indexOf(antibody) < 0) {
-		inspectedAntibodys.push(antibody);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var antibodyToSend = $.extend({}, antibody);
-		delete antibodyToSend.parents;
-		delete antibodyToSend.children;
-		openbisServer.listDataSetsForSample(antibodyToSend, true, dataset.curry(antibody));
-	}
-	resizeAntibodyTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(antibody)
-{
-	var index = inspectedAntibodys.indexOf(antibody);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedAntibodys.splice(index, 1);
-	resizeAntibodyTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedAntibodys, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectAntibody(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectAntibody(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-			
-			var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-							
-			
-			var propsTable5 = box.append("table").attr("class", "properties");
-	propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeAntibodys(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (antibodys.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#antibody-table").selectAll("tr.antibody-table-data").data(antibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "antibody-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectAntibody)
-		.selectAll("td").data(function(sample) {
-			tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.STORAGE, sample.properties.HOST, sample.properties.FOR_WHAT];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "antibody-table-data-cell")
-			.html(String)
-			
-	$('a').click(function(e){
-		e.stopPropagation();
-	});
-}
-
-function antibodyFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#antibody-table").selectAll("tr.antibody-table-data").data(antibodys);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedAntibodys) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "ANTIBODY" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bacteria-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bacteria-browser.html
deleted file mode 100644
index fbd3a7bbc91d855074441e289e79ab396321d491..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bacteria-browser.html
+++ /dev/null
@@ -1,846 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-	
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Bacteria</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="bacteria-table-header"><th>Code</th><th>Bacteria Strain Name</th><th>Bacteria Genotype</th><th>For What</th><th>Supplier</th><th>Art. Number</th><th>Comments</th><th></th></tr>
-								</thead>
-								<tbody id='bacteria-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All bacterias
-var bacterias = null;
-
-/// The bacterias that are currently being inspected
-var inspectedbacterias = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["BOX_NUMBER", "ROW", "COLUMN"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order4 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_lis4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order5 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list5;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    bacteria = objectOrId;
-  } else {
-  	bacteria = bacteriasById[objectOrId];
-  }
-  
-  return bacteria;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the bacterias variable */
-function initializebacterias(result)
-{
-      // Construct a map of all bacterias by id
-  bacteriasById = {};
-
-	// Split the bacterias into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpbacterias = [], otherbacterias = [];
-	var frpRegex = /^FRE[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        bacteriasById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the bacteriasById map
-	    theSample = bacteriasById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpbacterias.push(theSample);
-		} else {
-			otherbacterias.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherbacterias.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpbacterias.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(4));
-		var frpNumberB = parseInt(b.code.substring(4));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of bacterias
-	bacterias = frpbacterias.concat(otherbacterias);
-}
-
-
-
-/** Set the size of the bacteria-table based on whether or not inspectors are visible */
-function resizebacteriaTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var bacteriaTableTransition = d3.selectAll('div.bacteria-table-data-cell');
-	bacteriaTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectbacteria(bacteria)
-{
-	if (inspectedbacterias.indexOf(bacteria) < 0) {
-		inspectedbacterias.push(bacteria);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var bacteriaToSend = $.extend({}, bacteria);
-		delete bacteriaToSend.parents;
-		delete bacteriaToSend.children;
-		openbisServer.listDataSetsForSample(bacteriaToSend, true, dataset.curry(bacteria));
-	}
-	resizebacteriaTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(bacteria)
-{
-	var index = inspectedbacterias.indexOf(bacteria);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedbacterias.splice(index, 1);
-	resizebacteriaTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedbacterias, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbacteria(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbacteria(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-			var propsTable5 = box.append("table").attr("class", "properties");
-	propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");					
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializebacterias(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (bacterias.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#bacteria-table").selectAll("tr.bacteria-table-data").data(bacterias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "bacteria-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectbacteria)
-		.selectAll("td").data(function(sample) {
-			tableFields = [sample.identifier.slice(11,50), sample.properties.BACTERIA_STRAIN_NAME, sample.properties.BACTERIA_GENOTYPE, sample.properties.WHAT_FOR, sample.properties.SUPPLIER, sample.properties.ARTICLE_NUMBER, sample.properties.COMMENTS];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "bacteria-table-data-cell")
-			.html(String)
-
-	$('a').click(function(e){
-		e.stopPropagation();
-	});
-}
-
-function bacteriaFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, bacteriaNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (bacteriaNameFilterText == undefined) 
-	{
-		bacteriaNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedbacterias = bacterias.filter(bacteriaFilter.curry(ownerFilterText, "OWNER"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(bacteriaNameFilterText, "bacteria_NAME"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedbacterias = displayedbacterias.filter(bacteriaFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#bacteria-table").selectAll("tr.bacteria-table-data").data(bacterias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedbacterias) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "BACTERIA" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  	$('#bacteriaName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bacteriaName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap-responsive.css b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap-responsive.css
deleted file mode 100644
index c0bba15b36ec511ed667d80f98bfd06c787ba037..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap-responsive.css
+++ /dev/null
@@ -1,1109 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * Copyright 2013 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world by @mdo and @fat.
- */
-
-.clearfix {
-  *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.clearfix:after {
-  clear: both;
-}
-
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: 30px;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-@-ms-viewport {
-  width: device-width;
-}
-
-.hidden {
-  display: none;
-  visibility: hidden;
-}
-
-.visible-phone {
-  display: none !important;
-}
-
-.visible-tablet {
-  display: none !important;
-}
-
-.hidden-desktop {
-  display: none !important;
-}
-
-.visible-desktop {
-  display: inherit !important;
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
-  .hidden-desktop {
-    display: inherit !important;
-  }
-  .visible-desktop {
-    display: none !important ;
-  }
-  .visible-tablet {
-    display: inherit !important;
-  }
-  .hidden-tablet {
-    display: none !important;
-  }
-}
-
-@media (max-width: 767px) {
-  .hidden-desktop {
-    display: inherit !important;
-  }
-  .visible-desktop {
-    display: none !important;
-  }
-  .visible-phone {
-    display: inherit !important;
-  }
-  .hidden-phone {
-    display: none !important;
-  }
-}
-
-.visible-print {
-  display: none !important;
-}
-
-@media print {
-  .visible-print {
-    display: inherit !important;
-  }
-  .hidden-print {
-    display: none !important;
-  }
-}
-
-@media (min-width: 1200px) {
-  .row {
-    margin-left: -30px;
-    *zoom: 1;
-  }
-  .row:before,
-  .row:after {
-    display: table;
-    line-height: 0;
-    content: "";
-  }
-  .row:after {
-    clear: both;
-  }
-  [class*="span"] {
-    float: left;
-    min-height: 1px;
-    margin-left: 30px;
-  }
-  .container,
-  .navbar-static-top .container,
-  .navbar-fixed-top .container,
-  .navbar-fixed-bottom .container {
-    width: 1170px;
-  }
-  .span12 {
-    width: 1170px;
-  }
-  .span11 {
-    width: 1070px;
-  }
-  .span10 {
-    width: 970px;
-  }
-  .span9 {
-    width: 870px;
-  }
-  .span8 {
-    width: 770px;
-  }
-  .span7 {
-    width: 670px;
-  }
-  .span6 {
-    width: 570px;
-  }
-  .span5 {
-    width: 470px;
-  }
-  .span4 {
-    width: 370px;
-  }
-  .span3 {
-    width: 270px;
-  }
-  .span2 {
-    width: 170px;
-  }
-  .span1 {
-    width: 70px;
-  }
-  .offset12 {
-    margin-left: 1230px;
-  }
-  .offset11 {
-    margin-left: 1130px;
-  }
-  .offset10 {
-    margin-left: 1030px;
-  }
-  .offset9 {
-    margin-left: 930px;
-  }
-  .offset8 {
-    margin-left: 830px;
-  }
-  .offset7 {
-    margin-left: 730px;
-  }
-  .offset6 {
-    margin-left: 630px;
-  }
-  .offset5 {
-    margin-left: 530px;
-  }
-  .offset4 {
-    margin-left: 430px;
-  }
-  .offset3 {
-    margin-left: 330px;
-  }
-  .offset2 {
-    margin-left: 230px;
-  }
-  .offset1 {
-    margin-left: 130px;
-  }
-  .row-fluid {
-    width: 100%;
-    *zoom: 1;
-  }
-  .row-fluid:before,
-  .row-fluid:after {
-    display: table;
-    line-height: 0;
-    content: "";
-  }
-  .row-fluid:after {
-    clear: both;
-  }
-  .row-fluid [class*="span"] {
-    display: block;
-    float: left;
-    width: 100%;
-    min-height: 30px;
-    margin-left: 2.564102564102564%;
-    *margin-left: 2.5109110747408616%;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .row-fluid [class*="span"]:first-child {
-    margin-left: 0;
-  }
-  .row-fluid .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 2.564102564102564%;
-  }
-  .row-fluid .span12 {
-    width: 100%;
-    *width: 99.94680851063829%;
-  }
-  .row-fluid .span11 {
-    width: 91.45299145299145%;
-    *width: 91.39979996362975%;
-  }
-  .row-fluid .span10 {
-    width: 82.90598290598291%;
-    *width: 82.8527914166212%;
-  }
-  .row-fluid .span9 {
-    width: 74.35897435897436%;
-    *width: 74.30578286961266%;
-  }
-  .row-fluid .span8 {
-    width: 65.81196581196582%;
-    *width: 65.75877432260411%;
-  }
-  .row-fluid .span7 {
-    width: 57.26495726495726%;
-    *width: 57.21176577559556%;
-  }
-  .row-fluid .span6 {
-    width: 48.717948717948715%;
-    *width: 48.664757228587014%;
-  }
-  .row-fluid .span5 {
-    width: 40.17094017094017%;
-    *width: 40.11774868157847%;
-  }
-  .row-fluid .span4 {
-    width: 31.623931623931625%;
-    *width: 31.570740134569924%;
-  }
-  .row-fluid .span3 {
-    width: 23.076923076923077%;
-    *width: 23.023731587561375%;
-  }
-  .row-fluid .span2 {
-    width: 14.52991452991453%;
-    *width: 14.476723040552828%;
-  }
-  .row-fluid .span1 {
-    width: 5.982905982905983%;
-    *width: 5.929714493544281%;
-  }
-  .row-fluid .offset12 {
-    margin-left: 105.12820512820512%;
-    *margin-left: 105.02182214948171%;
-  }
-  .row-fluid .offset12:first-child {
-    margin-left: 102.56410256410257%;
-    *margin-left: 102.45771958537915%;
-  }
-  .row-fluid .offset11 {
-    margin-left: 96.58119658119658%;
-    *margin-left: 96.47481360247316%;
-  }
-  .row-fluid .offset11:first-child {
-    margin-left: 94.01709401709402%;
-    *margin-left: 93.91071103837061%;
-  }
-  .row-fluid .offset10 {
-    margin-left: 88.03418803418803%;
-    *margin-left: 87.92780505546462%;
-  }
-  .row-fluid .offset10:first-child {
-    margin-left: 85.47008547008548%;
-    *margin-left: 85.36370249136206%;
-  }
-  .row-fluid .offset9 {
-    margin-left: 79.48717948717949%;
-    *margin-left: 79.38079650845607%;
-  }
-  .row-fluid .offset9:first-child {
-    margin-left: 76.92307692307693%;
-    *margin-left: 76.81669394435352%;
-  }
-  .row-fluid .offset8 {
-    margin-left: 70.94017094017094%;
-    *margin-left: 70.83378796144753%;
-  }
-  .row-fluid .offset8:first-child {
-    margin-left: 68.37606837606839%;
-    *margin-left: 68.26968539734497%;
-  }
-  .row-fluid .offset7 {
-    margin-left: 62.393162393162385%;
-    *margin-left: 62.28677941443899%;
-  }
-  .row-fluid .offset7:first-child {
-    margin-left: 59.82905982905982%;
-    *margin-left: 59.72267685033642%;
-  }
-  .row-fluid .offset6 {
-    margin-left: 53.84615384615384%;
-    *margin-left: 53.739770867430444%;
-  }
-  .row-fluid .offset6:first-child {
-    margin-left: 51.28205128205128%;
-    *margin-left: 51.175668303327875%;
-  }
-  .row-fluid .offset5 {
-    margin-left: 45.299145299145295%;
-    *margin-left: 45.1927623204219%;
-  }
-  .row-fluid .offset5:first-child {
-    margin-left: 42.73504273504273%;
-    *margin-left: 42.62865975631933%;
-  }
-  .row-fluid .offset4 {
-    margin-left: 36.75213675213675%;
-    *margin-left: 36.645753773413354%;
-  }
-  .row-fluid .offset4:first-child {
-    margin-left: 34.18803418803419%;
-    *margin-left: 34.081651209310785%;
-  }
-  .row-fluid .offset3 {
-    margin-left: 28.205128205128204%;
-    *margin-left: 28.0987452264048%;
-  }
-  .row-fluid .offset3:first-child {
-    margin-left: 25.641025641025642%;
-    *margin-left: 25.53464266230224%;
-  }
-  .row-fluid .offset2 {
-    margin-left: 19.65811965811966%;
-    *margin-left: 19.551736679396257%;
-  }
-  .row-fluid .offset2:first-child {
-    margin-left: 17.094017094017094%;
-    *margin-left: 16.98763411529369%;
-  }
-  .row-fluid .offset1 {
-    margin-left: 11.11111111111111%;
-    *margin-left: 11.004728132387708%;
-  }
-  .row-fluid .offset1:first-child {
-    margin-left: 8.547008547008547%;
-    *margin-left: 8.440625568285142%;
-  }
-  input,
-  textarea,
-  .uneditable-input {
-    margin-left: 0;
-  }
-  .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 30px;
-  }
-  input.span12,
-  textarea.span12,
-  .uneditable-input.span12 {
-    width: 1156px;
-  }
-  input.span11,
-  textarea.span11,
-  .uneditable-input.span11 {
-    width: 1056px;
-  }
-  input.span10,
-  textarea.span10,
-  .uneditable-input.span10 {
-    width: 956px;
-  }
-  input.span9,
-  textarea.span9,
-  .uneditable-input.span9 {
-    width: 856px;
-  }
-  input.span8,
-  textarea.span8,
-  .uneditable-input.span8 {
-    width: 756px;
-  }
-  input.span7,
-  textarea.span7,
-  .uneditable-input.span7 {
-    width: 656px;
-  }
-  input.span6,
-  textarea.span6,
-  .uneditable-input.span6 {
-    width: 556px;
-  }
-  input.span5,
-  textarea.span5,
-  .uneditable-input.span5 {
-    width: 456px;
-  }
-  input.span4,
-  textarea.span4,
-  .uneditable-input.span4 {
-    width: 356px;
-  }
-  input.span3,
-  textarea.span3,
-  .uneditable-input.span3 {
-    width: 256px;
-  }
-  input.span2,
-  textarea.span2,
-  .uneditable-input.span2 {
-    width: 156px;
-  }
-  input.span1,
-  textarea.span1,
-  .uneditable-input.span1 {
-    width: 56px;
-  }
-  .thumbnails {
-    margin-left: -30px;
-  }
-  .thumbnails > li {
-    margin-left: 30px;
-  }
-  .row-fluid .thumbnails {
-    margin-left: 0;
-  }
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
-  .row {
-    margin-left: -20px;
-    *zoom: 1;
-  }
-  .row:before,
-  .row:after {
-    display: table;
-    line-height: 0;
-    content: "";
-  }
-  .row:after {
-    clear: both;
-  }
-  [class*="span"] {
-    float: left;
-    min-height: 1px;
-    margin-left: 20px;
-  }
-  .container,
-  .navbar-static-top .container,
-  .navbar-fixed-top .container,
-  .navbar-fixed-bottom .container {
-    width: 724px;
-  }
-  .span12 {
-    width: 724px;
-  }
-  .span11 {
-    width: 662px;
-  }
-  .span10 {
-    width: 600px;
-  }
-  .span9 {
-    width: 538px;
-  }
-  .span8 {
-    width: 476px;
-  }
-  .span7 {
-    width: 414px;
-  }
-  .span6 {
-    width: 352px;
-  }
-  .span5 {
-    width: 290px;
-  }
-  .span4 {
-    width: 228px;
-  }
-  .span3 {
-    width: 166px;
-  }
-  .span2 {
-    width: 104px;
-  }
-  .span1 {
-    width: 42px;
-  }
-  .offset12 {
-    margin-left: 764px;
-  }
-  .offset11 {
-    margin-left: 702px;
-  }
-  .offset10 {
-    margin-left: 640px;
-  }
-  .offset9 {
-    margin-left: 578px;
-  }
-  .offset8 {
-    margin-left: 516px;
-  }
-  .offset7 {
-    margin-left: 454px;
-  }
-  .offset6 {
-    margin-left: 392px;
-  }
-  .offset5 {
-    margin-left: 330px;
-  }
-  .offset4 {
-    margin-left: 268px;
-  }
-  .offset3 {
-    margin-left: 206px;
-  }
-  .offset2 {
-    margin-left: 144px;
-  }
-  .offset1 {
-    margin-left: 82px;
-  }
-  .row-fluid {
-    width: 100%;
-    *zoom: 1;
-  }
-  .row-fluid:before,
-  .row-fluid:after {
-    display: table;
-    line-height: 0;
-    content: "";
-  }
-  .row-fluid:after {
-    clear: both;
-  }
-  .row-fluid [class*="span"] {
-    display: block;
-    float: left;
-    width: 100%;
-    min-height: 30px;
-    margin-left: 2.7624309392265194%;
-    *margin-left: 2.709239449864817%;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .row-fluid [class*="span"]:first-child {
-    margin-left: 0;
-  }
-  .row-fluid .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 2.7624309392265194%;
-  }
-  .row-fluid .span12 {
-    width: 100%;
-    *width: 99.94680851063829%;
-  }
-  .row-fluid .span11 {
-    width: 91.43646408839778%;
-    *width: 91.38327259903608%;
-  }
-  .row-fluid .span10 {
-    width: 82.87292817679558%;
-    *width: 82.81973668743387%;
-  }
-  .row-fluid .span9 {
-    width: 74.30939226519337%;
-    *width: 74.25620077583166%;
-  }
-  .row-fluid .span8 {
-    width: 65.74585635359117%;
-    *width: 65.69266486422946%;
-  }
-  .row-fluid .span7 {
-    width: 57.18232044198895%;
-    *width: 57.12912895262725%;
-  }
-  .row-fluid .span6 {
-    width: 48.61878453038674%;
-    *width: 48.56559304102504%;
-  }
-  .row-fluid .span5 {
-    width: 40.05524861878453%;
-    *width: 40.00205712942283%;
-  }
-  .row-fluid .span4 {
-    width: 31.491712707182323%;
-    *width: 31.43852121782062%;
-  }
-  .row-fluid .span3 {
-    width: 22.92817679558011%;
-    *width: 22.87498530621841%;
-  }
-  .row-fluid .span2 {
-    width: 14.3646408839779%;
-    *width: 14.311449394616199%;
-  }
-  .row-fluid .span1 {
-    width: 5.801104972375691%;
-    *width: 5.747913483013988%;
-  }
-  .row-fluid .offset12 {
-    margin-left: 105.52486187845304%;
-    *margin-left: 105.41847889972962%;
-  }
-  .row-fluid .offset12:first-child {
-    margin-left: 102.76243093922652%;
-    *margin-left: 102.6560479605031%;
-  }
-  .row-fluid .offset11 {
-    margin-left: 96.96132596685082%;
-    *margin-left: 96.8549429881274%;
-  }
-  .row-fluid .offset11:first-child {
-    margin-left: 94.1988950276243%;
-    *margin-left: 94.09251204890089%;
-  }
-  .row-fluid .offset10 {
-    margin-left: 88.39779005524862%;
-    *margin-left: 88.2914070765252%;
-  }
-  .row-fluid .offset10:first-child {
-    margin-left: 85.6353591160221%;
-    *margin-left: 85.52897613729868%;
-  }
-  .row-fluid .offset9 {
-    margin-left: 79.8342541436464%;
-    *margin-left: 79.72787116492299%;
-  }
-  .row-fluid .offset9:first-child {
-    margin-left: 77.07182320441989%;
-    *margin-left: 76.96544022569647%;
-  }
-  .row-fluid .offset8 {
-    margin-left: 71.2707182320442%;
-    *margin-left: 71.16433525332079%;
-  }
-  .row-fluid .offset8:first-child {
-    margin-left: 68.50828729281768%;
-    *margin-left: 68.40190431409427%;
-  }
-  .row-fluid .offset7 {
-    margin-left: 62.70718232044199%;
-    *margin-left: 62.600799341718584%;
-  }
-  .row-fluid .offset7:first-child {
-    margin-left: 59.94475138121547%;
-    *margin-left: 59.838368402492065%;
-  }
-  .row-fluid .offset6 {
-    margin-left: 54.14364640883978%;
-    *margin-left: 54.037263430116376%;
-  }
-  .row-fluid .offset6:first-child {
-    margin-left: 51.38121546961326%;
-    *margin-left: 51.27483249088986%;
-  }
-  .row-fluid .offset5 {
-    margin-left: 45.58011049723757%;
-    *margin-left: 45.47372751851417%;
-  }
-  .row-fluid .offset5:first-child {
-    margin-left: 42.81767955801105%;
-    *margin-left: 42.71129657928765%;
-  }
-  .row-fluid .offset4 {
-    margin-left: 37.01657458563536%;
-    *margin-left: 36.91019160691196%;
-  }
-  .row-fluid .offset4:first-child {
-    margin-left: 34.25414364640884%;
-    *margin-left: 34.14776066768544%;
-  }
-  .row-fluid .offset3 {
-    margin-left: 28.45303867403315%;
-    *margin-left: 28.346655695309746%;
-  }
-  .row-fluid .offset3:first-child {
-    margin-left: 25.69060773480663%;
-    *margin-left: 25.584224756083227%;
-  }
-  .row-fluid .offset2 {
-    margin-left: 19.88950276243094%;
-    *margin-left: 19.783119783707537%;
-  }
-  .row-fluid .offset2:first-child {
-    margin-left: 17.12707182320442%;
-    *margin-left: 17.02068884448102%;
-  }
-  .row-fluid .offset1 {
-    margin-left: 11.32596685082873%;
-    *margin-left: 11.219583872105325%;
-  }
-  .row-fluid .offset1:first-child {
-    margin-left: 8.56353591160221%;
-    *margin-left: 8.457152932878806%;
-  }
-  input,
-  textarea,
-  .uneditable-input {
-    margin-left: 0;
-  }
-  .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 20px;
-  }
-  input.span12,
-  textarea.span12,
-  .uneditable-input.span12 {
-    width: 710px;
-  }
-  input.span11,
-  textarea.span11,
-  .uneditable-input.span11 {
-    width: 648px;
-  }
-  input.span10,
-  textarea.span10,
-  .uneditable-input.span10 {
-    width: 586px;
-  }
-  input.span9,
-  textarea.span9,
-  .uneditable-input.span9 {
-    width: 524px;
-  }
-  input.span8,
-  textarea.span8,
-  .uneditable-input.span8 {
-    width: 462px;
-  }
-  input.span7,
-  textarea.span7,
-  .uneditable-input.span7 {
-    width: 400px;
-  }
-  input.span6,
-  textarea.span6,
-  .uneditable-input.span6 {
-    width: 338px;
-  }
-  input.span5,
-  textarea.span5,
-  .uneditable-input.span5 {
-    width: 276px;
-  }
-  input.span4,
-  textarea.span4,
-  .uneditable-input.span4 {
-    width: 214px;
-  }
-  input.span3,
-  textarea.span3,
-  .uneditable-input.span3 {
-    width: 152px;
-  }
-  input.span2,
-  textarea.span2,
-  .uneditable-input.span2 {
-    width: 90px;
-  }
-  input.span1,
-  textarea.span1,
-  .uneditable-input.span1 {
-    width: 28px;
-  }
-}
-
-@media (max-width: 767px) {
-  body {
-    padding-right: 20px;
-    padding-left: 20px;
-  }
-  .navbar-fixed-top,
-  .navbar-fixed-bottom,
-  .navbar-static-top {
-    margin-right: -20px;
-    margin-left: -20px;
-  }
-  .container-fluid {
-    padding: 0;
-  }
-  .dl-horizontal dt {
-    float: none;
-    width: auto;
-    clear: none;
-    text-align: left;
-  }
-  .dl-horizontal dd {
-    margin-left: 0;
-  }
-  .container {
-    width: auto;
-  }
-  .row-fluid {
-    width: 100%;
-  }
-  .row,
-  .thumbnails {
-    margin-left: 0;
-  }
-  .thumbnails > li {
-    float: none;
-    margin-left: 0;
-  }
-  [class*="span"],
-  .uneditable-input[class*="span"],
-  .row-fluid [class*="span"] {
-    display: block;
-    float: none;
-    width: 100%;
-    margin-left: 0;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .span12,
-  .row-fluid .span12 {
-    width: 100%;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .row-fluid [class*="offset"]:first-child {
-    margin-left: 0;
-  }
-  .input-large,
-  .input-xlarge,
-  .input-xxlarge,
-  input[class*="span"],
-  select[class*="span"],
-  textarea[class*="span"],
-  .uneditable-input {
-    display: block;
-    width: 100%;
-    min-height: 30px;
-    -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-            box-sizing: border-box;
-  }
-  .input-prepend input,
-  .input-append input,
-  .input-prepend input[class*="span"],
-  .input-append input[class*="span"] {
-    display: inline-block;
-    width: auto;
-  }
-  .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 0;
-  }
-  .modal {
-    position: fixed;
-    top: 20px;
-    right: 20px;
-    left: 20px;
-    width: auto;
-    margin: 0;
-  }
-  .modal.fade {
-    top: -100px;
-  }
-  .modal.fade.in {
-    top: 20px;
-  }
-}
-
-@media (max-width: 480px) {
-  .nav-collapse {
-    -webkit-transform: translate3d(0, 0, 0);
-  }
-  .page-header h1 small {
-    display: block;
-    line-height: 20px;
-  }
-  input[type="checkbox"],
-  input[type="radio"] {
-    border: 1px solid #ccc;
-  }
-  .form-horizontal .control-label {
-    float: none;
-    width: auto;
-    padding-top: 0;
-    text-align: left;
-  }
-  .form-horizontal .controls {
-    margin-left: 0;
-  }
-  .form-horizontal .control-list {
-    padding-top: 0;
-  }
-  .form-horizontal .form-actions {
-    padding-right: 10px;
-    padding-left: 10px;
-  }
-  .media .pull-left,
-  .media .pull-right {
-    display: block;
-    float: none;
-    margin-bottom: 10px;
-  }
-  .media-object {
-    margin-right: 0;
-    margin-left: 0;
-  }
-  .modal {
-    top: 10px;
-    right: 10px;
-    left: 10px;
-  }
-  .modal-header .close {
-    padding: 10px;
-    margin: -10px;
-  }
-  .carousel-caption {
-    position: static;
-  }
-}
-
-@media (max-width: 979px) {
-  body {
-    padding-top: 0;
-  }
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    position: static;
-  }
-  .navbar-fixed-top {
-    margin-bottom: 20px;
-  }
-  .navbar-fixed-bottom {
-    margin-top: 20px;
-  }
-  .navbar-fixed-top .navbar-inner,
-  .navbar-fixed-bottom .navbar-inner {
-    padding: 5px;
-  }
-  .navbar .container {
-    width: auto;
-    padding: 0;
-  }
-  .navbar .brand {
-    padding-right: 10px;
-    padding-left: 10px;
-    margin: 0 0 0 -5px;
-  }
-  .nav-collapse {
-    clear: both;
-  }
-  .nav-collapse .nav {
-    float: none;
-    margin: 0 0 10px;
-  }
-  .nav-collapse .nav > li {
-    float: none;
-  }
-  .nav-collapse .nav > li > a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > .divider-vertical {
-    display: none;
-  }
-  .nav-collapse .nav .nav-header {
-    color: #777777;
-    text-shadow: none;
-  }
-  .nav-collapse .nav > li > a,
-  .nav-collapse .dropdown-menu a {
-    padding: 9px 15px;
-    font-weight: bold;
-    color: #777777;
-    -webkit-border-radius: 3px;
-       -moz-border-radius: 3px;
-            border-radius: 3px;
-  }
-  .nav-collapse .btn {
-    padding: 4px 10px 4px;
-    font-weight: normal;
-    -webkit-border-radius: 4px;
-       -moz-border-radius: 4px;
-            border-radius: 4px;
-  }
-  .nav-collapse .dropdown-menu li + li a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > li > a:hover,
-  .nav-collapse .nav > li > a:focus,
-  .nav-collapse .dropdown-menu a:hover,
-  .nav-collapse .dropdown-menu a:focus {
-    background-color: #f2f2f2;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a,
-  .navbar-inverse .nav-collapse .dropdown-menu a {
-    color: #999999;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a:hover,
-  .navbar-inverse .nav-collapse .nav > li > a:focus,
-  .navbar-inverse .nav-collapse .dropdown-menu a:hover,
-  .navbar-inverse .nav-collapse .dropdown-menu a:focus {
-    background-color: #111111;
-  }
-  .nav-collapse.in .btn-group {
-    padding: 0;
-    margin-top: 5px;
-  }
-  .nav-collapse .dropdown-menu {
-    position: static;
-    top: auto;
-    left: auto;
-    display: none;
-    float: none;
-    max-width: none;
-    padding: 0;
-    margin: 0 15px;
-    background-color: transparent;
-    border: none;
-    -webkit-border-radius: 0;
-       -moz-border-radius: 0;
-            border-radius: 0;
-    -webkit-box-shadow: none;
-       -moz-box-shadow: none;
-            box-shadow: none;
-  }
-  .nav-collapse .open > .dropdown-menu {
-    display: block;
-  }
-  .nav-collapse .dropdown-menu:before,
-  .nav-collapse .dropdown-menu:after {
-    display: none;
-  }
-  .nav-collapse .dropdown-menu .divider {
-    display: none;
-  }
-  .nav-collapse .nav > li > .dropdown-menu:before,
-  .nav-collapse .nav > li > .dropdown-menu:after {
-    display: none;
-  }
-  .nav-collapse .navbar-form,
-  .nav-collapse .navbar-search {
-    float: none;
-    padding: 10px 15px;
-    margin: 10px 0;
-    border-top: 1px solid #f2f2f2;
-    border-bottom: 1px solid #f2f2f2;
-    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-       -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  }
-  .navbar-inverse .nav-collapse .navbar-form,
-  .navbar-inverse .nav-collapse .navbar-search {
-    border-top-color: #111111;
-    border-bottom-color: #111111;
-  }
-  .navbar .nav-collapse .nav.pull-right {
-    float: none;
-    margin-left: 0;
-  }
-  .nav-collapse,
-  .nav-collapse.collapse {
-    height: 0;
-    overflow: hidden;
-  }
-  .navbar .btn-navbar {
-    display: block;
-  }
-  .navbar-static .navbar-inner {
-    padding-right: 10px;
-    padding-left: 10px;
-  }
-}
-
-@media (min-width: 980px) {
-  .nav-collapse.collapse {
-    height: auto !important;
-    overflow: visible !important;
-  }
-}
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap-responsive.min.css b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap-responsive.min.css
deleted file mode 100644
index 96a435be907ed88c540fd2f512cf01316a7157c9..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap-responsive.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * Copyright 2013 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world by @mdo and @fat.
- */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap.css b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap.css
deleted file mode 100644
index 5b7fe7e8562e97d4e959322617ed1feb45b2fd6d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap.css
+++ /dev/null
@@ -1,6167 +0,0 @@
-/*!
- * Bootstrap v2.3.2
- *
- * Copyright 2013 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world by @mdo and @fat.
- */
-
-.clearfix {
-  *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.clearfix:after {
-  clear: both;
-}
-
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: 30px;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
-  display: block;
-}
-
-audio,
-canvas,
-video {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-}
-
-audio:not([controls]) {
-  display: none;
-}
-
-html {
-  font-size: 100%;
-  -webkit-text-size-adjust: 100%;
-      -ms-text-size-adjust: 100%;
-}
-
-a:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-a:hover,
-a:active {
-  outline: 0;
-}
-
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-
-sup {
-  top: -0.5em;
-}
-
-sub {
-  bottom: -0.25em;
-}
-
-img {
-  width: auto\9;
-  height: auto;
-  max-width: 100%;
-  vertical-align: middle;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-
-#map_canvas img,
-.google-maps img {
-  max-width: none;
-}
-
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-size: 100%;
-  vertical-align: middle;
-}
-
-button,
-input {
-  *overflow: visible;
-  line-height: normal;
-}
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  cursor: pointer;
-  -webkit-appearance: button;
-}
-
-label,
-select,
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-input[type="radio"],
-input[type="checkbox"] {
-  cursor: pointer;
-}
-
-input[type="search"] {
-  -webkit-box-sizing: content-box;
-     -moz-box-sizing: content-box;
-          box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none;
-}
-
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-
-@media print {
-  * {
-    color: #000 !important;
-    text-shadow: none !important;
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  .ir a:after,
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  @page  {
-    margin: 0.5cm;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-}
-
-body {
-  margin: 0;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 20px;
-  color: #333333;
-  background-color: #ffffff;
-}
-
-a {
-  color: #0088cc;
-  text-decoration: none;
-}
-
-a:hover,
-a:focus {
-  color: #005580;
-  text-decoration: underline;
-}
-
-.img-rounded {
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-
-.img-polaroid {
-  padding: 4px;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-
-.img-circle {
-  -webkit-border-radius: 500px;
-     -moz-border-radius: 500px;
-          border-radius: 500px;
-}
-
-.row {
-  margin-left: -20px;
-  *zoom: 1;
-}
-
-.row:before,
-.row:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.row:after {
-  clear: both;
-}
-
-[class*="span"] {
-  float: left;
-  min-height: 1px;
-  margin-left: 20px;
-}
-
-.container,
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  width: 940px;
-}
-
-.span12 {
-  width: 940px;
-}
-
-.span11 {
-  width: 860px;
-}
-
-.span10 {
-  width: 780px;
-}
-
-.span9 {
-  width: 700px;
-}
-
-.span8 {
-  width: 620px;
-}
-
-.span7 {
-  width: 540px;
-}
-
-.span6 {
-  width: 460px;
-}
-
-.span5 {
-  width: 380px;
-}
-
-.span4 {
-  width: 300px;
-}
-
-.span3 {
-  width: 220px;
-}
-
-.span2 {
-  width: 140px;
-}
-
-.span1 {
-  width: 60px;
-}
-
-.offset12 {
-  margin-left: 980px;
-}
-
-.offset11 {
-  margin-left: 900px;
-}
-
-.offset10 {
-  margin-left: 820px;
-}
-
-.offset9 {
-  margin-left: 740px;
-}
-
-.offset8 {
-  margin-left: 660px;
-}
-
-.offset7 {
-  margin-left: 580px;
-}
-
-.offset6 {
-  margin-left: 500px;
-}
-
-.offset5 {
-  margin-left: 420px;
-}
-
-.offset4 {
-  margin-left: 340px;
-}
-
-.offset3 {
-  margin-left: 260px;
-}
-
-.offset2 {
-  margin-left: 180px;
-}
-
-.offset1 {
-  margin-left: 100px;
-}
-
-.row-fluid {
-  width: 100%;
-  *zoom: 1;
-}
-
-.row-fluid:before,
-.row-fluid:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.row-fluid:after {
-  clear: both;
-}
-
-.row-fluid [class*="span"] {
-  display: block;
-  float: left;
-  width: 100%;
-  min-height: 30px;
-  margin-left: 2.127659574468085%;
-  *margin-left: 2.074468085106383%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.row-fluid [class*="span"]:first-child {
-  margin-left: 0;
-}
-
-.row-fluid .controls-row [class*="span"] + [class*="span"] {
-  margin-left: 2.127659574468085%;
-}
-
-.row-fluid .span12 {
-  width: 100%;
-  *width: 99.94680851063829%;
-}
-
-.row-fluid .span11 {
-  width: 91.48936170212765%;
-  *width: 91.43617021276594%;
-}
-
-.row-fluid .span10 {
-  width: 82.97872340425532%;
-  *width: 82.92553191489361%;
-}
-
-.row-fluid .span9 {
-  width: 74.46808510638297%;
-  *width: 74.41489361702126%;
-}
-
-.row-fluid .span8 {
-  width: 65.95744680851064%;
-  *width: 65.90425531914893%;
-}
-
-.row-fluid .span7 {
-  width: 57.44680851063829%;
-  *width: 57.39361702127659%;
-}
-
-.row-fluid .span6 {
-  width: 48.93617021276595%;
-  *width: 48.88297872340425%;
-}
-
-.row-fluid .span5 {
-  width: 40.42553191489362%;
-  *width: 40.37234042553192%;
-}
-
-.row-fluid .span4 {
-  width: 31.914893617021278%;
-  *width: 31.861702127659576%;
-}
-
-.row-fluid .span3 {
-  width: 23.404255319148934%;
-  *width: 23.351063829787233%;
-}
-
-.row-fluid .span2 {
-  width: 14.893617021276595%;
-  *width: 14.840425531914894%;
-}
-
-.row-fluid .span1 {
-  width: 6.382978723404255%;
-  *width: 6.329787234042553%;
-}
-
-.row-fluid .offset12 {
-  margin-left: 104.25531914893617%;
-  *margin-left: 104.14893617021275%;
-}
-
-.row-fluid .offset12:first-child {
-  margin-left: 102.12765957446808%;
-  *margin-left: 102.02127659574467%;
-}
-
-.row-fluid .offset11 {
-  margin-left: 95.74468085106382%;
-  *margin-left: 95.6382978723404%;
-}
-
-.row-fluid .offset11:first-child {
-  margin-left: 93.61702127659574%;
-  *margin-left: 93.51063829787232%;
-}
-
-.row-fluid .offset10 {
-  margin-left: 87.23404255319149%;
-  *margin-left: 87.12765957446807%;
-}
-
-.row-fluid .offset10:first-child {
-  margin-left: 85.1063829787234%;
-  *margin-left: 84.99999999999999%;
-}
-
-.row-fluid .offset9 {
-  margin-left: 78.72340425531914%;
-  *margin-left: 78.61702127659572%;
-}
-
-.row-fluid .offset9:first-child {
-  margin-left: 76.59574468085106%;
-  *margin-left: 76.48936170212764%;
-}
-
-.row-fluid .offset8 {
-  margin-left: 70.2127659574468%;
-  *margin-left: 70.10638297872339%;
-}
-
-.row-fluid .offset8:first-child {
-  margin-left: 68.08510638297872%;
-  *margin-left: 67.9787234042553%;
-}
-
-.row-fluid .offset7 {
-  margin-left: 61.70212765957446%;
-  *margin-left: 61.59574468085106%;
-}
-
-.row-fluid .offset7:first-child {
-  margin-left: 59.574468085106375%;
-  *margin-left: 59.46808510638297%;
-}
-
-.row-fluid .offset6 {
-  margin-left: 53.191489361702125%;
-  *margin-left: 53.085106382978715%;
-}
-
-.row-fluid .offset6:first-child {
-  margin-left: 51.063829787234035%;
-  *margin-left: 50.95744680851063%;
-}
-
-.row-fluid .offset5 {
-  margin-left: 44.68085106382979%;
-  *margin-left: 44.57446808510638%;
-}
-
-.row-fluid .offset5:first-child {
-  margin-left: 42.5531914893617%;
-  *margin-left: 42.4468085106383%;
-}
-
-.row-fluid .offset4 {
-  margin-left: 36.170212765957444%;
-  *margin-left: 36.06382978723405%;
-}
-
-.row-fluid .offset4:first-child {
-  margin-left: 34.04255319148936%;
-  *margin-left: 33.93617021276596%;
-}
-
-.row-fluid .offset3 {
-  margin-left: 27.659574468085104%;
-  *margin-left: 27.5531914893617%;
-}
-
-.row-fluid .offset3:first-child {
-  margin-left: 25.53191489361702%;
-  *margin-left: 25.425531914893618%;
-}
-
-.row-fluid .offset2 {
-  margin-left: 19.148936170212764%;
-  *margin-left: 19.04255319148936%;
-}
-
-.row-fluid .offset2:first-child {
-  margin-left: 17.02127659574468%;
-  *margin-left: 16.914893617021278%;
-}
-
-.row-fluid .offset1 {
-  margin-left: 10.638297872340425%;
-  *margin-left: 10.53191489361702%;
-}
-
-.row-fluid .offset1:first-child {
-  margin-left: 8.51063829787234%;
-  *margin-left: 8.404255319148938%;
-}
-
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
-  display: none;
-}
-
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
-  float: right;
-}
-
-.container {
-  margin-right: auto;
-  margin-left: auto;
-  *zoom: 1;
-}
-
-.container:before,
-.container:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.container:after {
-  clear: both;
-}
-
-.container-fluid {
-  padding-right: 20px;
-  padding-left: 20px;
-  *zoom: 1;
-}
-
-.container-fluid:before,
-.container-fluid:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.container-fluid:after {
-  clear: both;
-}
-
-p {
-  margin: 0 0 10px;
-}
-
-.lead {
-  margin-bottom: 20px;
-  font-size: 21px;
-  font-weight: 200;
-  line-height: 30px;
-}
-
-small {
-  font-size: 85%;
-}
-
-strong {
-  font-weight: bold;
-}
-
-em {
-  font-style: italic;
-}
-
-cite {
-  font-style: normal;
-}
-
-.muted {
-  color: #999999;
-}
-
-a.muted:hover,
-a.muted:focus {
-  color: #808080;
-}
-
-.text-warning {
-  color: #c09853;
-}
-
-a.text-warning:hover,
-a.text-warning:focus {
-  color: #a47e3c;
-}
-
-.text-error {
-  color: #b94a48;
-}
-
-a.text-error:hover,
-a.text-error:focus {
-  color: #953b39;
-}
-
-.text-info {
-  color: #3a87ad;
-}
-
-a.text-info:hover,
-a.text-info:focus {
-  color: #2d6987;
-}
-
-.text-success {
-  color: #468847;
-}
-
-a.text-success:hover,
-a.text-success:focus {
-  color: #356635;
-}
-
-.text-left {
-  text-align: left;
-}
-
-.text-right {
-  text-align: right;
-}
-
-.text-center {
-  text-align: center;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin: 10px 0;
-  font-family: inherit;
-  font-weight: bold;
-  line-height: 20px;
-  color: inherit;
-  text-rendering: optimizelegibility;
-}
-
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
-  font-weight: normal;
-  line-height: 1;
-  color: #999999;
-}
-
-h1,
-h2,
-h3 {
-  line-height: 40px;
-}
-
-h1 {
-  font-size: 38.5px;
-}
-
-h2 {
-  font-size: 31.5px;
-}
-
-h3 {
-  font-size: 24.5px;
-}
-
-h4 {
-  font-size: 17.5px;
-}
-
-h5 {
-  font-size: 14px;
-}
-
-h6 {
-  font-size: 11.9px;
-}
-
-h1 small {
-  font-size: 24.5px;
-}
-
-h2 small {
-  font-size: 17.5px;
-}
-
-h3 small {
-  font-size: 14px;
-}
-
-h4 small {
-  font-size: 14px;
-}
-
-.page-header {
-  padding-bottom: 9px;
-  margin: 20px 0 30px;
-  border-bottom: 1px solid #eeeeee;
-}
-
-ul,
-ol {
-  padding: 0;
-  margin: 0 0 10px 25px;
-}
-
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-
-li {
-  line-height: 20px;
-}
-
-ul.unstyled,
-ol.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-
-ul.inline,
-ol.inline {
-  margin-left: 0;
-  list-style: none;
-}
-
-ul.inline > li,
-ol.inline > li {
-  display: inline-block;
-  *display: inline;
-  padding-right: 5px;
-  padding-left: 5px;
-  *zoom: 1;
-}
-
-dl {
-  margin-bottom: 20px;
-}
-
-dt,
-dd {
-  line-height: 20px;
-}
-
-dt {
-  font-weight: bold;
-}
-
-dd {
-  margin-left: 10px;
-}
-
-.dl-horizontal {
-  *zoom: 1;
-}
-
-.dl-horizontal:before,
-.dl-horizontal:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.dl-horizontal:after {
-  clear: both;
-}
-
-.dl-horizontal dt {
-  float: left;
-  width: 160px;
-  overflow: hidden;
-  clear: left;
-  text-align: right;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.dl-horizontal dd {
-  margin-left: 180px;
-}
-
-hr {
-  margin: 20px 0;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-  border-bottom: 1px solid #ffffff;
-}
-
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #999999;
-}
-
-abbr.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-
-blockquote {
-  padding: 0 0 0 15px;
-  margin: 0 0 20px;
-  border-left: 5px solid #eeeeee;
-}
-
-blockquote p {
-  margin-bottom: 0;
-  font-size: 17.5px;
-  font-weight: 300;
-  line-height: 1.25;
-}
-
-blockquote small {
-  display: block;
-  line-height: 20px;
-  color: #999999;
-}
-
-blockquote small:before {
-  content: '\2014 \00A0';
-}
-
-blockquote.pull-right {
-  float: right;
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-}
-
-blockquote.pull-right p,
-blockquote.pull-right small {
-  text-align: right;
-}
-
-blockquote.pull-right small:before {
-  content: '';
-}
-
-blockquote.pull-right small:after {
-  content: '\00A0 \2014';
-}
-
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-
-address {
-  display: block;
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 20px;
-}
-
-code,
-pre {
-  padding: 0 3px 2px;
-  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
-  font-size: 12px;
-  color: #333333;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-code {
-  padding: 2px 4px;
-  color: #d14;
-  white-space: nowrap;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-}
-
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 20px;
-  word-break: break-all;
-  word-wrap: break-word;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-pre.prettyprint {
-  margin-bottom: 20px;
-}
-
-pre code {
-  padding: 0;
-  color: inherit;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border: 0;
-}
-
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-
-form {
-  margin: 0 0 20px;
-}
-
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: 40px;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-
-legend small {
-  font-size: 15px;
-  color: #999999;
-}
-
-label,
-input,
-button,
-select,
-textarea {
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 20px;
-}
-
-input,
-button,
-select,
-textarea {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-
-label {
-  display: block;
-  margin-bottom: 5px;
-}
-
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  display: inline-block;
-  height: 20px;
-  padding: 4px 6px;
-  margin-bottom: 10px;
-  font-size: 14px;
-  line-height: 20px;
-  color: #555555;
-  vertical-align: middle;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-input,
-textarea,
-.uneditable-input {
-  width: 206px;
-}
-
-textarea {
-  height: auto;
-}
-
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-     -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-       -o-transition: border linear 0.2s, box-shadow linear 0.2s;
-          transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-
-textarea:focus,
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="datetime"]:focus,
-input[type="datetime-local"]:focus,
-input[type="date"]:focus,
-input[type="month"]:focus,
-input[type="time"]:focus,
-input[type="week"]:focus,
-input[type="number"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus,
-input[type="search"]:focus,
-input[type="tel"]:focus,
-input[type="color"]:focus,
-.uneditable-input:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  outline: 0;
-  outline: thin dotted \9;
-  /* IE6-9 */
-
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-}
-
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9;
-  *margin-top: 0;
-  line-height: normal;
-}
-
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
-  width: auto;
-}
-
-select,
-input[type="file"] {
-  height: 30px;
-  /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
-  *margin-top: 4px;
-  /* For IE7, add top margin to align select with labels */
-
-  line-height: 30px;
-}
-
-select {
-  width: 220px;
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-}
-
-select[multiple],
-select[size] {
-  height: auto;
-}
-
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-.uneditable-input,
-.uneditable-textarea {
-  color: #999999;
-  cursor: not-allowed;
-  background-color: #fcfcfc;
-  border-color: #cccccc;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-}
-
-.uneditable-input {
-  overflow: hidden;
-  white-space: nowrap;
-}
-
-.uneditable-textarea {
-  width: auto;
-  height: auto;
-}
-
-input:-moz-placeholder,
-textarea:-moz-placeholder {
-  color: #999999;
-}
-
-input:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
-  color: #999999;
-}
-
-input::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
-  color: #999999;
-}
-
-.radio,
-.checkbox {
-  min-height: 20px;
-  padding-left: 20px;
-}
-
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
-  padding-top: 5px;
-}
-
-.radio.inline,
-.checkbox.inline {
-  display: inline-block;
-  padding-top: 5px;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
-  margin-left: 10px;
-}
-
-.input-mini {
-  width: 60px;
-}
-
-.input-small {
-  width: 90px;
-}
-
-.input-medium {
-  width: 150px;
-}
-
-.input-large {
-  width: 210px;
-}
-
-.input-xlarge {
-  width: 270px;
-}
-
-.input-xxlarge {
-  width: 530px;
-}
-
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
-  float: none;
-  margin-left: 0;
-}
-
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
-  display: inline-block;
-}
-
-input,
-textarea,
-.uneditable-input {
-  margin-left: 0;
-}
-
-.controls-row [class*="span"] + [class*="span"] {
-  margin-left: 20px;
-}
-
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
-  width: 926px;
-}
-
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
-  width: 846px;
-}
-
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
-  width: 766px;
-}
-
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
-  width: 686px;
-}
-
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
-  width: 606px;
-}
-
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
-  width: 526px;
-}
-
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
-  width: 446px;
-}
-
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
-  width: 366px;
-}
-
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
-  width: 286px;
-}
-
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
-  width: 206px;
-}
-
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
-  width: 126px;
-}
-
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
-  width: 46px;
-}
-
-.controls-row {
-  *zoom: 1;
-}
-
-.controls-row:before,
-.controls-row:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.controls-row:after {
-  clear: both;
-}
-
-.controls-row [class*="span"],
-.row-fluid .controls-row [class*="span"] {
-  float: left;
-}
-
-.controls-row .checkbox[class*="span"],
-.controls-row .radio[class*="span"] {
-  padding-top: 5px;
-}
-
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  cursor: not-allowed;
-  background-color: #eeeeee;
-}
-
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
-  background-color: transparent;
-}
-
-.control-group.warning .control-label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
-  color: #c09853;
-}
-
-.control-group.warning .checkbox,
-.control-group.warning .radio,
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  color: #c09853;
-}
-
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  border-color: #c09853;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
-  border-color: #a47e3c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-}
-
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
-  color: #c09853;
-  background-color: #fcf8e3;
-  border-color: #c09853;
-}
-
-.control-group.error .control-label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
-  color: #b94a48;
-}
-
-.control-group.error .checkbox,
-.control-group.error .radio,
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  color: #b94a48;
-}
-
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  border-color: #b94a48;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
-  border-color: #953b39;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-}
-
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #b94a48;
-}
-
-.control-group.success .control-label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
-  color: #468847;
-}
-
-.control-group.success .checkbox,
-.control-group.success .radio,
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  color: #468847;
-}
-
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  border-color: #468847;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
-  border-color: #356635;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-}
-
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #468847;
-}
-
-.control-group.info .control-label,
-.control-group.info .help-block,
-.control-group.info .help-inline {
-  color: #3a87ad;
-}
-
-.control-group.info .checkbox,
-.control-group.info .radio,
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
-  color: #3a87ad;
-}
-
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
-  border-color: #3a87ad;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.info input:focus,
-.control-group.info select:focus,
-.control-group.info textarea:focus {
-  border-color: #2d6987;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
-}
-
-.control-group.info .input-prepend .add-on,
-.control-group.info .input-append .add-on {
-  color: #3a87ad;
-  background-color: #d9edf7;
-  border-color: #3a87ad;
-}
-
-input:focus:invalid,
-textarea:focus:invalid,
-select:focus:invalid {
-  color: #b94a48;
-  border-color: #ee5f5b;
-}
-
-input:focus:invalid:focus,
-textarea:focus:invalid:focus,
-select:focus:invalid:focus {
-  border-color: #e9322d;
-  -webkit-box-shadow: 0 0 6px #f8b9b7;
-     -moz-box-shadow: 0 0 6px #f8b9b7;
-          box-shadow: 0 0 6px #f8b9b7;
-}
-
-.form-actions {
-  padding: 19px 20px 20px;
-  margin-top: 20px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #e5e5e5;
-  *zoom: 1;
-}
-
-.form-actions:before,
-.form-actions:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.form-actions:after {
-  clear: both;
-}
-
-.help-block,
-.help-inline {
-  color: #595959;
-}
-
-.help-block {
-  display: block;
-  margin-bottom: 10px;
-}
-
-.help-inline {
-  display: inline-block;
-  *display: inline;
-  padding-left: 5px;
-  vertical-align: middle;
-  *zoom: 1;
-}
-
-.input-append,
-.input-prepend {
-  display: inline-block;
-  margin-bottom: 10px;
-  font-size: 0;
-  white-space: nowrap;
-  vertical-align: middle;
-}
-
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input,
-.input-append .dropdown-menu,
-.input-prepend .dropdown-menu,
-.input-append .popover,
-.input-prepend .popover {
-  font-size: 14px;
-}
-
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input {
-  position: relative;
-  margin-bottom: 0;
-  *margin-left: 0;
-  vertical-align: top;
-  -webkit-border-radius: 0 4px 4px 0;
-     -moz-border-radius: 0 4px 4px 0;
-          border-radius: 0 4px 4px 0;
-}
-
-.input-append input:focus,
-.input-prepend input:focus,
-.input-append select:focus,
-.input-prepend select:focus,
-.input-append .uneditable-input:focus,
-.input-prepend .uneditable-input:focus {
-  z-index: 2;
-}
-
-.input-append .add-on,
-.input-prepend .add-on {
-  display: inline-block;
-  width: auto;
-  height: 20px;
-  min-width: 16px;
-  padding: 4px 5px;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 20px;
-  text-align: center;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #eeeeee;
-  border: 1px solid #ccc;
-}
-
-.input-append .add-on,
-.input-prepend .add-on,
-.input-append .btn,
-.input-prepend .btn,
-.input-append .btn-group > .dropdown-toggle,
-.input-prepend .btn-group > .dropdown-toggle {
-  vertical-align: top;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.input-append .active,
-.input-prepend .active {
-  background-color: #a9dba9;
-  border-color: #46a546;
-}
-
-.input-prepend .add-on,
-.input-prepend .btn {
-  margin-right: -1px;
-}
-
-.input-prepend .add-on:first-child,
-.input-prepend .btn:first-child {
-  -webkit-border-radius: 4px 0 0 4px;
-     -moz-border-radius: 4px 0 0 4px;
-          border-radius: 4px 0 0 4px;
-}
-
-.input-append input,
-.input-append select,
-.input-append .uneditable-input {
-  -webkit-border-radius: 4px 0 0 4px;
-     -moz-border-radius: 4px 0 0 4px;
-          border-radius: 4px 0 0 4px;
-}
-
-.input-append input + .btn-group .btn:last-child,
-.input-append select + .btn-group .btn:last-child,
-.input-append .uneditable-input + .btn-group .btn:last-child {
-  -webkit-border-radius: 0 4px 4px 0;
-     -moz-border-radius: 0 4px 4px 0;
-          border-radius: 0 4px 4px 0;
-}
-
-.input-append .add-on,
-.input-append .btn,
-.input-append .btn-group {
-  margin-left: -1px;
-}
-
-.input-append .add-on:last-child,
-.input-append .btn:last-child,
-.input-append .btn-group:last-child > .dropdown-toggle {
-  -webkit-border-radius: 0 4px 4px 0;
-     -moz-border-radius: 0 4px 4px 0;
-          border-radius: 0 4px 4px 0;
-}
-
-.input-prepend.input-append input,
-.input-prepend.input-append select,
-.input-prepend.input-append .uneditable-input {
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.input-prepend.input-append input + .btn-group .btn,
-.input-prepend.input-append select + .btn-group .btn,
-.input-prepend.input-append .uneditable-input + .btn-group .btn {
-  -webkit-border-radius: 0 4px 4px 0;
-     -moz-border-radius: 0 4px 4px 0;
-          border-radius: 0 4px 4px 0;
-}
-
-.input-prepend.input-append .add-on:first-child,
-.input-prepend.input-append .btn:first-child {
-  margin-right: -1px;
-  -webkit-border-radius: 4px 0 0 4px;
-     -moz-border-radius: 4px 0 0 4px;
-          border-radius: 4px 0 0 4px;
-}
-
-.input-prepend.input-append .add-on:last-child,
-.input-prepend.input-append .btn:last-child {
-  margin-left: -1px;
-  -webkit-border-radius: 0 4px 4px 0;
-     -moz-border-radius: 0 4px 4px 0;
-          border-radius: 0 4px 4px 0;
-}
-
-.input-prepend.input-append .btn-group:first-child {
-  margin-left: 0;
-}
-
-input.search-query {
-  padding-right: 14px;
-  padding-right: 4px \9;
-  padding-left: 14px;
-  padding-left: 4px \9;
-  /* IE7-8 doesn't have border-radius, so don't indent the padding */
-
-  margin-bottom: 0;
-  -webkit-border-radius: 15px;
-     -moz-border-radius: 15px;
-          border-radius: 15px;
-}
-
-/* Allow for input prepend/append in search forms */
-
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.form-search .input-append .search-query {
-  -webkit-border-radius: 14px 0 0 14px;
-     -moz-border-radius: 14px 0 0 14px;
-          border-radius: 14px 0 0 14px;
-}
-
-.form-search .input-append .btn {
-  -webkit-border-radius: 0 14px 14px 0;
-     -moz-border-radius: 0 14px 14px 0;
-          border-radius: 0 14px 14px 0;
-}
-
-.form-search .input-prepend .search-query {
-  -webkit-border-radius: 0 14px 14px 0;
-     -moz-border-radius: 0 14px 14px 0;
-          border-radius: 0 14px 14px 0;
-}
-
-.form-search .input-prepend .btn {
-  -webkit-border-radius: 14px 0 0 14px;
-     -moz-border-radius: 14px 0 0 14px;
-          border-radius: 14px 0 0 14px;
-}
-
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input,
-.form-search .input-prepend,
-.form-inline .input-prepend,
-.form-horizontal .input-prepend,
-.form-search .input-append,
-.form-inline .input-append,
-.form-horizontal .input-append {
-  display: inline-block;
-  *display: inline;
-  margin-bottom: 0;
-  vertical-align: middle;
-  *zoom: 1;
-}
-
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
-  display: none;
-}
-
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
-  display: inline-block;
-}
-
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  margin-bottom: 0;
-}
-
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
-  padding-left: 0;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
-  float: left;
-  margin-right: 3px;
-  margin-left: 0;
-}
-
-.control-group {
-  margin-bottom: 10px;
-}
-
-legend + .control-group {
-  margin-top: 20px;
-  -webkit-margin-top-collapse: separate;
-}
-
-.form-horizontal .control-group {
-  margin-bottom: 20px;
-  *zoom: 1;
-}
-
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.form-horizontal .control-group:after {
-  clear: both;
-}
-
-.form-horizontal .control-label {
-  float: left;
-  width: 160px;
-  padding-top: 5px;
-  text-align: right;
-}
-
-.form-horizontal .controls {
-  *display: inline-block;
-  *padding-left: 20px;
-  margin-left: 180px;
-  *margin-left: 0;
-}
-
-.form-horizontal .controls:first-child {
-  *padding-left: 180px;
-}
-
-.form-horizontal .help-block {
-  margin-bottom: 0;
-}
-
-.form-horizontal input + .help-block,
-.form-horizontal select + .help-block,
-.form-horizontal textarea + .help-block,
-.form-horizontal .uneditable-input + .help-block,
-.form-horizontal .input-prepend + .help-block,
-.form-horizontal .input-append + .help-block {
-  margin-top: 10px;
-}
-
-.form-horizontal .form-actions {
-  padding-left: 180px;
-}
-
-table {
-  max-width: 100%;
-  background-color: transparent;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-.table {
-  width: 100%;
-  margin-bottom: 20px;
-}
-
-.table th,
-.table td {
-  padding: 8px;
-  line-height: 20px;
-  text-align: left;
-  vertical-align: top;
-  border-top: 1px solid #dddddd;
-}
-
-.table th {
-  font-weight: bold;
-}
-
-.table thead th {
-  vertical-align: bottom;
-}
-
-.table caption + thead tr:first-child th,
-.table caption + thead tr:first-child td,
-.table colgroup + thead tr:first-child th,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child th,
-.table thead:first-child tr:first-child td {
-  border-top: 0;
-}
-
-.table tbody + tbody {
-  border-top: 2px solid #dddddd;
-}
-
-.table .table {
-  background-color: #ffffff;
-}
-
-.table-condensed th,
-.table-condensed td {
-  padding: 4px 5px;
-}
-
-.table-bordered {
-  border: 1px solid #dddddd;
-  border-collapse: separate;
-  *border-collapse: collapse;
-  border-left: 0;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-.table-bordered th,
-.table-bordered td {
-  border-left: 1px solid #dddddd;
-}
-
-.table-bordered caption + thead tr:first-child th,
-.table-bordered caption + tbody tr:first-child th,
-.table-bordered caption + tbody tr:first-child td,
-.table-bordered colgroup + thead tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child td,
-.table-bordered thead:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child td {
-  border-top: 0;
-}
-
-.table-bordered thead:first-child tr:first-child > th:first-child,
-.table-bordered tbody:first-child tr:first-child > td:first-child,
-.table-bordered tbody:first-child tr:first-child > th:first-child {
-  -webkit-border-top-left-radius: 4px;
-          border-top-left-radius: 4px;
-  -moz-border-radius-topleft: 4px;
-}
-
-.table-bordered thead:first-child tr:first-child > th:last-child,
-.table-bordered tbody:first-child tr:first-child > td:last-child,
-.table-bordered tbody:first-child tr:first-child > th:last-child {
-  -webkit-border-top-right-radius: 4px;
-          border-top-right-radius: 4px;
-  -moz-border-radius-topright: 4px;
-}
-
-.table-bordered thead:last-child tr:last-child > th:first-child,
-.table-bordered tbody:last-child tr:last-child > td:first-child,
-.table-bordered tbody:last-child tr:last-child > th:first-child,
-.table-bordered tfoot:last-child tr:last-child > td:first-child,
-.table-bordered tfoot:last-child tr:last-child > th:first-child {
-  -webkit-border-bottom-left-radius: 4px;
-          border-bottom-left-radius: 4px;
-  -moz-border-radius-bottomleft: 4px;
-}
-
-.table-bordered thead:last-child tr:last-child > th:last-child,
-.table-bordered tbody:last-child tr:last-child > td:last-child,
-.table-bordered tbody:last-child tr:last-child > th:last-child,
-.table-bordered tfoot:last-child tr:last-child > td:last-child,
-.table-bordered tfoot:last-child tr:last-child > th:last-child {
-  -webkit-border-bottom-right-radius: 4px;
-          border-bottom-right-radius: 4px;
-  -moz-border-radius-bottomright: 4px;
-}
-
-.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
-  -webkit-border-bottom-left-radius: 0;
-          border-bottom-left-radius: 0;
-  -moz-border-radius-bottomleft: 0;
-}
-
-.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
-  -webkit-border-bottom-right-radius: 0;
-          border-bottom-right-radius: 0;
-  -moz-border-radius-bottomright: 0;
-}
-
-.table-bordered caption + thead tr:first-child th:first-child,
-.table-bordered caption + tbody tr:first-child td:first-child,
-.table-bordered colgroup + thead tr:first-child th:first-child,
-.table-bordered colgroup + tbody tr:first-child td:first-child {
-  -webkit-border-top-left-radius: 4px;
-          border-top-left-radius: 4px;
-  -moz-border-radius-topleft: 4px;
-}
-
-.table-bordered caption + thead tr:first-child th:last-child,
-.table-bordered caption + tbody tr:first-child td:last-child,
-.table-bordered colgroup + thead tr:first-child th:last-child,
-.table-bordered colgroup + tbody tr:first-child td:last-child {
-  -webkit-border-top-right-radius: 4px;
-          border-top-right-radius: 4px;
-  -moz-border-radius-topright: 4px;
-}
-
-.table-striped tbody > tr:nth-child(odd) > td,
-.table-striped tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-
-.table-hover tbody tr:hover > td,
-.table-hover tbody tr:hover > th {
-  background-color: #f5f5f5;
-}
-
-table td[class*="span"],
-table th[class*="span"],
-.row-fluid table td[class*="span"],
-.row-fluid table th[class*="span"] {
-  display: table-cell;
-  float: none;
-  margin-left: 0;
-}
-
-.table td.span1,
-.table th.span1 {
-  float: none;
-  width: 44px;
-  margin-left: 0;
-}
-
-.table td.span2,
-.table th.span2 {
-  float: none;
-  width: 124px;
-  margin-left: 0;
-}
-
-.table td.span3,
-.table th.span3 {
-  float: none;
-  width: 204px;
-  margin-left: 0;
-}
-
-.table td.span4,
-.table th.span4 {
-  float: none;
-  width: 284px;
-  margin-left: 0;
-}
-
-.table td.span5,
-.table th.span5 {
-  float: none;
-  width: 364px;
-  margin-left: 0;
-}
-
-.table td.span6,
-.table th.span6 {
-  float: none;
-  width: 444px;
-  margin-left: 0;
-}
-
-.table td.span7,
-.table th.span7 {
-  float: none;
-  width: 524px;
-  margin-left: 0;
-}
-
-.table td.span8,
-.table th.span8 {
-  float: none;
-  width: 604px;
-  margin-left: 0;
-}
-
-.table td.span9,
-.table th.span9 {
-  float: none;
-  width: 684px;
-  margin-left: 0;
-}
-
-.table td.span10,
-.table th.span10 {
-  float: none;
-  width: 764px;
-  margin-left: 0;
-}
-
-.table td.span11,
-.table th.span11 {
-  float: none;
-  width: 844px;
-  margin-left: 0;
-}
-
-.table td.span12,
-.table th.span12 {
-  float: none;
-  width: 924px;
-  margin-left: 0;
-}
-
-.table tbody tr.success > td {
-  background-color: #dff0d8;
-}
-
-.table tbody tr.error > td {
-  background-color: #f2dede;
-}
-
-.table tbody tr.warning > td {
-  background-color: #fcf8e3;
-}
-
-.table tbody tr.info > td {
-  background-color: #d9edf7;
-}
-
-.table-hover tbody tr.success:hover > td {
-  background-color: #d0e9c6;
-}
-
-.table-hover tbody tr.error:hover > td {
-  background-color: #ebcccc;
-}
-
-.table-hover tbody tr.warning:hover > td {
-  background-color: #faf2cc;
-}
-
-.table-hover tbody tr.info:hover > td {
-  background-color: #c4e3f3;
-}
-
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline-block;
-  width: 14px;
-  height: 14px;
-  margin-top: 1px;
-  *margin-right: .3em;
-  line-height: 14px;
-  vertical-align: text-top;
-  background-image: url("../img/glyphicons-halflings.png");
-  background-position: 14px 14px;
-  background-repeat: no-repeat;
-}
-
-/* White icons with optional class, or on hover/focus/active states of certain elements */
-
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:focus > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > li > a:focus > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:focus > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"],
-.dropdown-submenu:focus > a > [class*=" icon-"] {
-  background-image: url("../img/glyphicons-halflings-white.png");
-}
-
-.icon-glass {
-  background-position: 0      0;
-}
-
-.icon-music {
-  background-position: -24px 0;
-}
-
-.icon-search {
-  background-position: -48px 0;
-}
-
-.icon-envelope {
-  background-position: -72px 0;
-}
-
-.icon-heart {
-  background-position: -96px 0;
-}
-
-.icon-star {
-  background-position: -120px 0;
-}
-
-.icon-star-empty {
-  background-position: -144px 0;
-}
-
-.icon-user {
-  background-position: -168px 0;
-}
-
-.icon-film {
-  background-position: -192px 0;
-}
-
-.icon-th-large {
-  background-position: -216px 0;
-}
-
-.icon-th {
-  background-position: -240px 0;
-}
-
-.icon-th-list {
-  background-position: -264px 0;
-}
-
-.icon-ok {
-  background-position: -288px 0;
-}
-
-.icon-remove {
-  background-position: -312px 0;
-}
-
-.icon-zoom-in {
-  background-position: -336px 0;
-}
-
-.icon-zoom-out {
-  background-position: -360px 0;
-}
-
-.icon-off {
-  background-position: -384px 0;
-}
-
-.icon-signal {
-  background-position: -408px 0;
-}
-
-.icon-cog {
-  background-position: -432px 0;
-}
-
-.icon-trash {
-  background-position: -456px 0;
-}
-
-.icon-home {
-  background-position: 0 -24px;
-}
-
-.icon-file {
-  background-position: -24px -24px;
-}
-
-.icon-time {
-  background-position: -48px -24px;
-}
-
-.icon-road {
-  background-position: -72px -24px;
-}
-
-.icon-download-alt {
-  background-position: -96px -24px;
-}
-
-.icon-download {
-  background-position: -120px -24px;
-}
-
-.icon-upload {
-  background-position: -144px -24px;
-}
-
-.icon-inbox {
-  background-position: -168px -24px;
-}
-
-.icon-play-circle {
-  background-position: -192px -24px;
-}
-
-.icon-repeat {
-  background-position: -216px -24px;
-}
-
-.icon-refresh {
-  background-position: -240px -24px;
-}
-
-.icon-list-alt {
-  background-position: -264px -24px;
-}
-
-.icon-lock {
-  background-position: -287px -24px;
-}
-
-.icon-flag {
-  background-position: -312px -24px;
-}
-
-.icon-headphones {
-  background-position: -336px -24px;
-}
-
-.icon-volume-off {
-  background-position: -360px -24px;
-}
-
-.icon-volume-down {
-  background-position: -384px -24px;
-}
-
-.icon-volume-up {
-  background-position: -408px -24px;
-}
-
-.icon-qrcode {
-  background-position: -432px -24px;
-}
-
-.icon-barcode {
-  background-position: -456px -24px;
-}
-
-.icon-tag {
-  background-position: 0 -48px;
-}
-
-.icon-tags {
-  background-position: -25px -48px;
-}
-
-.icon-book {
-  background-position: -48px -48px;
-}
-
-.icon-bookmark {
-  background-position: -72px -48px;
-}
-
-.icon-print {
-  background-position: -96px -48px;
-}
-
-.icon-camera {
-  background-position: -120px -48px;
-}
-
-.icon-font {
-  background-position: -144px -48px;
-}
-
-.icon-bold {
-  background-position: -167px -48px;
-}
-
-.icon-italic {
-  background-position: -192px -48px;
-}
-
-.icon-text-height {
-  background-position: -216px -48px;
-}
-
-.icon-text-width {
-  background-position: -240px -48px;
-}
-
-.icon-align-left {
-  background-position: -264px -48px;
-}
-
-.icon-align-center {
-  background-position: -288px -48px;
-}
-
-.icon-align-right {
-  background-position: -312px -48px;
-}
-
-.icon-align-justify {
-  background-position: -336px -48px;
-}
-
-.icon-list {
-  background-position: -360px -48px;
-}
-
-.icon-indent-left {
-  background-position: -384px -48px;
-}
-
-.icon-indent-right {
-  background-position: -408px -48px;
-}
-
-.icon-facetime-video {
-  background-position: -432px -48px;
-}
-
-.icon-picture {
-  background-position: -456px -48px;
-}
-
-.icon-pencil {
-  background-position: 0 -72px;
-}
-
-.icon-map-marker {
-  background-position: -24px -72px;
-}
-
-.icon-adjust {
-  background-position: -48px -72px;
-}
-
-.icon-tint {
-  background-position: -72px -72px;
-}
-
-.icon-edit {
-  background-position: -96px -72px;
-}
-
-.icon-share {
-  background-position: -120px -72px;
-}
-
-.icon-check {
-  background-position: -144px -72px;
-}
-
-.icon-move {
-  background-position: -168px -72px;
-}
-
-.icon-step-backward {
-  background-position: -192px -72px;
-}
-
-.icon-fast-backward {
-  background-position: -216px -72px;
-}
-
-.icon-backward {
-  background-position: -240px -72px;
-}
-
-.icon-play {
-  background-position: -264px -72px;
-}
-
-.icon-pause {
-  background-position: -288px -72px;
-}
-
-.icon-stop {
-  background-position: -312px -72px;
-}
-
-.icon-forward {
-  background-position: -336px -72px;
-}
-
-.icon-fast-forward {
-  background-position: -360px -72px;
-}
-
-.icon-step-forward {
-  background-position: -384px -72px;
-}
-
-.icon-eject {
-  background-position: -408px -72px;
-}
-
-.icon-chevron-left {
-  background-position: -432px -72px;
-}
-
-.icon-chevron-right {
-  background-position: -456px -72px;
-}
-
-.icon-plus-sign {
-  background-position: 0 -96px;
-}
-
-.icon-minus-sign {
-  background-position: -24px -96px;
-}
-
-.icon-remove-sign {
-  background-position: -48px -96px;
-}
-
-.icon-ok-sign {
-  background-position: -72px -96px;
-}
-
-.icon-question-sign {
-  background-position: -96px -96px;
-}
-
-.icon-info-sign {
-  background-position: -120px -96px;
-}
-
-.icon-screenshot {
-  background-position: -144px -96px;
-}
-
-.icon-remove-circle {
-  background-position: -168px -96px;
-}
-
-.icon-ok-circle {
-  background-position: -192px -96px;
-}
-
-.icon-ban-circle {
-  background-position: -216px -96px;
-}
-
-.icon-arrow-left {
-  background-position: -240px -96px;
-}
-
-.icon-arrow-right {
-  background-position: -264px -96px;
-}
-
-.icon-arrow-up {
-  background-position: -289px -96px;
-}
-
-.icon-arrow-down {
-  background-position: -312px -96px;
-}
-
-.icon-share-alt {
-  background-position: -336px -96px;
-}
-
-.icon-resize-full {
-  background-position: -360px -96px;
-}
-
-.icon-resize-small {
-  background-position: -384px -96px;
-}
-
-.icon-plus {
-  background-position: -408px -96px;
-}
-
-.icon-minus {
-  background-position: -433px -96px;
-}
-
-.icon-asterisk {
-  background-position: -456px -96px;
-}
-
-.icon-exclamation-sign {
-  background-position: 0 -120px;
-}
-
-.icon-gift {
-  background-position: -24px -120px;
-}
-
-.icon-leaf {
-  background-position: -48px -120px;
-}
-
-.icon-fire {
-  background-position: -72px -120px;
-}
-
-.icon-eye-open {
-  background-position: -96px -120px;
-}
-
-.icon-eye-close {
-  background-position: -120px -120px;
-}
-
-.icon-warning-sign {
-  background-position: -144px -120px;
-}
-
-.icon-plane {
-  background-position: -168px -120px;
-}
-
-.icon-calendar {
-  background-position: -192px -120px;
-}
-
-.icon-random {
-  width: 16px;
-  background-position: -216px -120px;
-}
-
-.icon-comment {
-  background-position: -240px -120px;
-}
-
-.icon-magnet {
-  background-position: -264px -120px;
-}
-
-.icon-chevron-up {
-  background-position: -288px -120px;
-}
-
-.icon-chevron-down {
-  background-position: -313px -119px;
-}
-
-.icon-retweet {
-  background-position: -336px -120px;
-}
-
-.icon-shopping-cart {
-  background-position: -360px -120px;
-}
-
-.icon-folder-close {
-  width: 16px;
-  background-position: -384px -120px;
-}
-
-.icon-folder-open {
-  width: 16px;
-  background-position: -408px -120px;
-}
-
-.icon-resize-vertical {
-  background-position: -432px -119px;
-}
-
-.icon-resize-horizontal {
-  background-position: -456px -118px;
-}
-
-.icon-hdd {
-  background-position: 0 -144px;
-}
-
-.icon-bullhorn {
-  background-position: -24px -144px;
-}
-
-.icon-bell {
-  background-position: -48px -144px;
-}
-
-.icon-certificate {
-  background-position: -72px -144px;
-}
-
-.icon-thumbs-up {
-  background-position: -96px -144px;
-}
-
-.icon-thumbs-down {
-  background-position: -120px -144px;
-}
-
-.icon-hand-right {
-  background-position: -144px -144px;
-}
-
-.icon-hand-left {
-  background-position: -168px -144px;
-}
-
-.icon-hand-up {
-  background-position: -192px -144px;
-}
-
-.icon-hand-down {
-  background-position: -216px -144px;
-}
-
-.icon-circle-arrow-right {
-  background-position: -240px -144px;
-}
-
-.icon-circle-arrow-left {
-  background-position: -264px -144px;
-}
-
-.icon-circle-arrow-up {
-  background-position: -288px -144px;
-}
-
-.icon-circle-arrow-down {
-  background-position: -312px -144px;
-}
-
-.icon-globe {
-  background-position: -336px -144px;
-}
-
-.icon-wrench {
-  background-position: -360px -144px;
-}
-
-.icon-tasks {
-  background-position: -384px -144px;
-}
-
-.icon-filter {
-  background-position: -408px -144px;
-}
-
-.icon-briefcase {
-  background-position: -432px -144px;
-}
-
-.icon-fullscreen {
-  background-position: -456px -144px;
-}
-
-.dropup,
-.dropdown {
-  position: relative;
-}
-
-.dropdown-toggle {
-  *margin-bottom: -3px;
-}
-
-.dropdown-toggle:active,
-.open .dropdown-toggle {
-  outline: 0;
-}
-
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  vertical-align: top;
-  border-top: 4px solid #000000;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-  content: "";
-}
-
-.dropdown .caret {
-  margin-top: 8px;
-  margin-left: 2px;
-}
-
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  list-style: none;
-  background-color: #ffffff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  *border-right-width: 2px;
-  *border-bottom-width: 2px;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding;
-          background-clip: padding-box;
-}
-
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-
-.dropdown-menu .divider {
-  *width: 100%;
-  height: 1px;
-  margin: 9px 1px;
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-}
-
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 20px;
-  color: #333333;
-  white-space: nowrap;
-}
-
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-submenu:hover > a,
-.dropdown-submenu:focus > a {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #0081c2;
-  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
-  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
-  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
-}
-
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #0081c2;
-  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
-  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
-  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
-  background-repeat: repeat-x;
-  outline: 0;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
-}
-
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #999999;
-}
-
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  cursor: default;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.open {
-  *z-index: 1000;
-}
-
-.open > .dropdown-menu {
-  display: block;
-}
-
-.dropdown-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 990;
-}
-
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px solid #000000;
-  content: "";
-}
-
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-
-.dropdown-submenu {
-  position: relative;
-}
-
-.dropdown-submenu > .dropdown-menu {
-  top: 0;
-  left: 100%;
-  margin-top: -6px;
-  margin-left: -1px;
-  -webkit-border-radius: 0 6px 6px 6px;
-     -moz-border-radius: 0 6px 6px 6px;
-          border-radius: 0 6px 6px 6px;
-}
-
-.dropdown-submenu:hover > .dropdown-menu {
-  display: block;
-}
-
-.dropup .dropdown-submenu > .dropdown-menu {
-  top: auto;
-  bottom: 0;
-  margin-top: 0;
-  margin-bottom: -2px;
-  -webkit-border-radius: 5px 5px 5px 0;
-     -moz-border-radius: 5px 5px 5px 0;
-          border-radius: 5px 5px 5px 0;
-}
-
-.dropdown-submenu > a:after {
-  display: block;
-  float: right;
-  width: 0;
-  height: 0;
-  margin-top: 5px;
-  margin-right: -10px;
-  border-color: transparent;
-  border-left-color: #cccccc;
-  border-style: solid;
-  border-width: 5px 0 5px 5px;
-  content: " ";
-}
-
-.dropdown-submenu:hover > a:after {
-  border-left-color: #ffffff;
-}
-
-.dropdown-submenu.pull-left {
-  float: none;
-}
-
-.dropdown-submenu.pull-left > .dropdown-menu {
-  left: -100%;
-  margin-left: 10px;
-  -webkit-border-radius: 6px 0 6px 6px;
-     -moz-border-radius: 6px 0 6px 6px;
-          border-radius: 6px 0 6px 6px;
-}
-
-.dropdown .dropdown-menu .nav-header {
-  padding-right: 20px;
-  padding-left: 20px;
-}
-
-.typeahead {
-  z-index: 1051;
-  margin-top: 2px;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
-}
-
-.well-large {
-  padding: 24px;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-
-.well-small {
-  padding: 9px;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity 0.15s linear;
-     -moz-transition: opacity 0.15s linear;
-       -o-transition: opacity 0.15s linear;
-          transition: opacity 0.15s linear;
-}
-
-.fade.in {
-  opacity: 1;
-}
-
-.collapse {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height 0.35s ease;
-     -moz-transition: height 0.35s ease;
-       -o-transition: height 0.35s ease;
-          transition: height 0.35s ease;
-}
-
-.collapse.in {
-  height: auto;
-}
-
-.close {
-  float: right;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 20px;
-  color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
-  opacity: 0.2;
-  filter: alpha(opacity=20);
-}
-
-.close:hover,
-.close:focus {
-  color: #000000;
-  text-decoration: none;
-  cursor: pointer;
-  opacity: 0.4;
-  filter: alpha(opacity=40);
-}
-
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
-
-.btn {
-  display: inline-block;
-  *display: inline;
-  padding: 4px 12px;
-  margin-bottom: 0;
-  *margin-left: .3em;
-  font-size: 14px;
-  line-height: 20px;
-  color: #333333;
-  text-align: center;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  vertical-align: middle;
-  cursor: pointer;
-  background-color: #f5f5f5;
-  *background-color: #e6e6e6;
-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
-  background-repeat: repeat-x;
-  border: 1px solid #cccccc;
-  *border: 0;
-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  border-bottom-color: #b3b3b3;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-  *zoom: 1;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn:hover,
-.btn:focus,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
-  color: #333333;
-  background-color: #e6e6e6;
-  *background-color: #d9d9d9;
-}
-
-.btn:active,
-.btn.active {
-  background-color: #cccccc \9;
-}
-
-.btn:first-child {
-  *margin-left: 0;
-}
-
-.btn:hover,
-.btn:focus {
-  color: #333333;
-  text-decoration: none;
-  background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-     -moz-transition: background-position 0.1s linear;
-       -o-transition: background-position 0.1s linear;
-          transition: background-position 0.1s linear;
-}
-
-.btn:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-.btn.active,
-.btn:active {
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn.disabled,
-.btn[disabled] {
-  cursor: default;
-  background-image: none;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-     -moz-box-shadow: none;
-          box-shadow: none;
-}
-
-.btn-large {
-  padding: 11px 19px;
-  font-size: 17.5px;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-
-.btn-large [class^="icon-"],
-.btn-large [class*=" icon-"] {
-  margin-top: 4px;
-}
-
-.btn-small {
-  padding: 2px 10px;
-  font-size: 11.9px;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-.btn-small [class^="icon-"],
-.btn-small [class*=" icon-"] {
-  margin-top: 0;
-}
-
-.btn-mini [class^="icon-"],
-.btn-mini [class*=" icon-"] {
-  margin-top: -1px;
-}
-
-.btn-mini {
-  padding: 0 6px;
-  font-size: 10.5px;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-right: 0;
-  padding-left: 0;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
-  color: rgba(255, 255, 255, 0.75);
-}
-
-.btn-primary {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #006dcc;
-  *background-color: #0044cc;
-  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
-  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
-  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
-  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
-  background-repeat: repeat-x;
-  border-color: #0044cc #0044cc #002a80;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
-  color: #ffffff;
-  background-color: #0044cc;
-  *background-color: #003bb3;
-}
-
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #003399 \9;
-}
-
-.btn-warning {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #faa732;
-  *background-color: #f89406;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(to bottom, #fbb450, #f89406);
-  background-repeat: repeat-x;
-  border-color: #f89406 #f89406 #ad6704;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
-  color: #ffffff;
-  background-color: #f89406;
-  *background-color: #df8505;
-}
-
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #c67605 \9;
-}
-
-.btn-danger {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #da4f49;
-  *background-color: #bd362f;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
-  background-repeat: repeat-x;
-  border-color: #bd362f #bd362f #802420;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
-  color: #ffffff;
-  background-color: #bd362f;
-  *background-color: #a9302a;
-}
-
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #942a25 \9;
-}
-
-.btn-success {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #5bb75b;
-  *background-color: #51a351;
-  background-image: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-  background-image: -o-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(to bottom, #62c462, #51a351);
-  background-repeat: repeat-x;
-  border-color: #51a351 #51a351 #387038;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
-  color: #ffffff;
-  background-color: #51a351;
-  *background-color: #499249;
-}
-
-.btn-success:active,
-.btn-success.active {
-  background-color: #408140 \9;
-}
-
-.btn-info {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #49afcd;
-  *background-color: #2f96b4;
-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
-  background-repeat: repeat-x;
-  border-color: #2f96b4 #2f96b4 #1f6377;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
-  color: #ffffff;
-  background-color: #2f96b4;
-  *background-color: #2a85a0;
-}
-
-.btn-info:active,
-.btn-info.active {
-  background-color: #24748c \9;
-}
-
-.btn-inverse {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #363636;
-  *background-color: #222222;
-  background-image: -moz-linear-gradient(top, #444444, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
-  background-image: -webkit-linear-gradient(top, #444444, #222222);
-  background-image: -o-linear-gradient(top, #444444, #222222);
-  background-image: linear-gradient(to bottom, #444444, #222222);
-  background-repeat: repeat-x;
-  border-color: #222222 #222222 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.btn-inverse:hover,
-.btn-inverse:focus,
-.btn-inverse:active,
-.btn-inverse.active,
-.btn-inverse.disabled,
-.btn-inverse[disabled] {
-  color: #ffffff;
-  background-color: #222222;
-  *background-color: #151515;
-}
-
-.btn-inverse:active,
-.btn-inverse.active {
-  background-color: #080808 \9;
-}
-
-button.btn,
-input[type="submit"].btn {
-  *padding-top: 3px;
-  *padding-bottom: 3px;
-}
-
-button.btn::-moz-focus-inner,
-input[type="submit"].btn::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-
-button.btn.btn-large,
-input[type="submit"].btn.btn-large {
-  *padding-top: 7px;
-  *padding-bottom: 7px;
-}
-
-button.btn.btn-small,
-input[type="submit"].btn.btn-small {
-  *padding-top: 3px;
-  *padding-bottom: 3px;
-}
-
-button.btn.btn-mini,
-input[type="submit"].btn.btn-mini {
-  *padding-top: 1px;
-  *padding-bottom: 1px;
-}
-
-.btn-link,
-.btn-link:active,
-.btn-link[disabled] {
-  background-color: transparent;
-  background-image: none;
-  -webkit-box-shadow: none;
-     -moz-box-shadow: none;
-          box-shadow: none;
-}
-
-.btn-link {
-  color: #0088cc;
-  cursor: pointer;
-  border-color: transparent;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.btn-link:hover,
-.btn-link:focus {
-  color: #005580;
-  text-decoration: underline;
-  background-color: transparent;
-}
-
-.btn-link[disabled]:hover,
-.btn-link[disabled]:focus {
-  color: #333333;
-  text-decoration: none;
-}
-
-.btn-group {
-  position: relative;
-  display: inline-block;
-  *display: inline;
-  *margin-left: .3em;
-  font-size: 0;
-  white-space: nowrap;
-  vertical-align: middle;
-  *zoom: 1;
-}
-
-.btn-group:first-child {
-  *margin-left: 0;
-}
-
-.btn-group + .btn-group {
-  margin-left: 5px;
-}
-
-.btn-toolbar {
-  margin-top: 10px;
-  margin-bottom: 10px;
-  font-size: 0;
-}
-
-.btn-toolbar > .btn + .btn,
-.btn-toolbar > .btn-group + .btn,
-.btn-toolbar > .btn + .btn-group {
-  margin-left: 5px;
-}
-
-.btn-group > .btn {
-  position: relative;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.btn-group > .btn + .btn {
-  margin-left: -1px;
-}
-
-.btn-group > .btn,
-.btn-group > .dropdown-menu,
-.btn-group > .popover {
-  font-size: 14px;
-}
-
-.btn-group > .btn-mini {
-  font-size: 10.5px;
-}
-
-.btn-group > .btn-small {
-  font-size: 11.9px;
-}
-
-.btn-group > .btn-large {
-  font-size: 17.5px;
-}
-
-.btn-group > .btn:first-child {
-  margin-left: 0;
-  -webkit-border-bottom-left-radius: 4px;
-          border-bottom-left-radius: 4px;
-  -webkit-border-top-left-radius: 4px;
-          border-top-left-radius: 4px;
-  -moz-border-radius-bottomleft: 4px;
-  -moz-border-radius-topleft: 4px;
-}
-
-.btn-group > .btn:last-child,
-.btn-group > .dropdown-toggle {
-  -webkit-border-top-right-radius: 4px;
-          border-top-right-radius: 4px;
-  -webkit-border-bottom-right-radius: 4px;
-          border-bottom-right-radius: 4px;
-  -moz-border-radius-topright: 4px;
-  -moz-border-radius-bottomright: 4px;
-}
-
-.btn-group > .btn.large:first-child {
-  margin-left: 0;
-  -webkit-border-bottom-left-radius: 6px;
-          border-bottom-left-radius: 6px;
-  -webkit-border-top-left-radius: 6px;
-          border-top-left-radius: 6px;
-  -moz-border-radius-bottomleft: 6px;
-  -moz-border-radius-topleft: 6px;
-}
-
-.btn-group > .btn.large:last-child,
-.btn-group > .large.dropdown-toggle {
-  -webkit-border-top-right-radius: 6px;
-          border-top-right-radius: 6px;
-  -webkit-border-bottom-right-radius: 6px;
-          border-bottom-right-radius: 6px;
-  -moz-border-radius-topright: 6px;
-  -moz-border-radius-bottomright: 6px;
-}
-
-.btn-group > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active {
-  z-index: 2;
-}
-
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-
-.btn-group > .btn + .dropdown-toggle {
-  *padding-top: 5px;
-  padding-right: 8px;
-  *padding-bottom: 5px;
-  padding-left: 8px;
-  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn-group > .btn-mini + .dropdown-toggle {
-  *padding-top: 2px;
-  padding-right: 5px;
-  *padding-bottom: 2px;
-  padding-left: 5px;
-}
-
-.btn-group > .btn-small + .dropdown-toggle {
-  *padding-top: 5px;
-  *padding-bottom: 4px;
-}
-
-.btn-group > .btn-large + .dropdown-toggle {
-  *padding-top: 7px;
-  padding-right: 12px;
-  *padding-bottom: 7px;
-  padding-left: 12px;
-}
-
-.btn-group.open .dropdown-toggle {
-  background-image: none;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn-group.open .btn.dropdown-toggle {
-  background-color: #e6e6e6;
-}
-
-.btn-group.open .btn-primary.dropdown-toggle {
-  background-color: #0044cc;
-}
-
-.btn-group.open .btn-warning.dropdown-toggle {
-  background-color: #f89406;
-}
-
-.btn-group.open .btn-danger.dropdown-toggle {
-  background-color: #bd362f;
-}
-
-.btn-group.open .btn-success.dropdown-toggle {
-  background-color: #51a351;
-}
-
-.btn-group.open .btn-info.dropdown-toggle {
-  background-color: #2f96b4;
-}
-
-.btn-group.open .btn-inverse.dropdown-toggle {
-  background-color: #222222;
-}
-
-.btn .caret {
-  margin-top: 8px;
-  margin-left: 0;
-}
-
-.btn-large .caret {
-  margin-top: 6px;
-}
-
-.btn-large .caret {
-  border-top-width: 5px;
-  border-right-width: 5px;
-  border-left-width: 5px;
-}
-
-.btn-mini .caret,
-.btn-small .caret {
-  margin-top: 8px;
-}
-
-.dropup .btn-large .caret {
-  border-bottom-width: 5px;
-}
-
-.btn-primary .caret,
-.btn-warning .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret,
-.btn-inverse .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-}
-
-.btn-group-vertical {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-
-  *zoom: 1;
-}
-
-.btn-group-vertical > .btn {
-  display: block;
-  float: none;
-  max-width: 100%;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.btn-group-vertical > .btn + .btn {
-  margin-top: -1px;
-  margin-left: 0;
-}
-
-.btn-group-vertical > .btn:first-child {
-  -webkit-border-radius: 4px 4px 0 0;
-     -moz-border-radius: 4px 4px 0 0;
-          border-radius: 4px 4px 0 0;
-}
-
-.btn-group-vertical > .btn:last-child {
-  -webkit-border-radius: 0 0 4px 4px;
-     -moz-border-radius: 0 0 4px 4px;
-          border-radius: 0 0 4px 4px;
-}
-
-.btn-group-vertical > .btn-large:first-child {
-  -webkit-border-radius: 6px 6px 0 0;
-     -moz-border-radius: 6px 6px 0 0;
-          border-radius: 6px 6px 0 0;
-}
-
-.btn-group-vertical > .btn-large:last-child {
-  -webkit-border-radius: 0 0 6px 6px;
-     -moz-border-radius: 0 0 6px 6px;
-          border-radius: 0 0 6px 6px;
-}
-
-.alert {
-  padding: 8px 35px 8px 14px;
-  margin-bottom: 20px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  background-color: #fcf8e3;
-  border: 1px solid #fbeed5;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-.alert,
-.alert h4 {
-  color: #c09853;
-}
-
-.alert h4 {
-  margin: 0;
-}
-
-.alert .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  line-height: 20px;
-}
-
-.alert-success {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-
-.alert-success h4 {
-  color: #468847;
-}
-
-.alert-danger,
-.alert-error {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #eed3d7;
-}
-
-.alert-danger h4,
-.alert-error h4 {
-  color: #b94a48;
-}
-
-.alert-info {
-  color: #3a87ad;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-
-.alert-info h4 {
-  color: #3a87ad;
-}
-
-.alert-block {
-  padding-top: 14px;
-  padding-bottom: 14px;
-}
-
-.alert-block > p,
-.alert-block > ul {
-  margin-bottom: 0;
-}
-
-.alert-block p + p {
-  margin-top: 5px;
-}
-
-.nav {
-  margin-bottom: 20px;
-  margin-left: 0;
-  list-style: none;
-}
-
-.nav > li > a {
-  display: block;
-}
-
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: #eeeeee;
-}
-
-.nav > li > a > img {
-  max-width: none;
-}
-
-.nav > .pull-right {
-  float: right;
-}
-
-.nav-header {
-  display: block;
-  padding: 3px 15px;
-  font-size: 11px;
-  font-weight: bold;
-  line-height: 20px;
-  color: #999999;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  text-transform: uppercase;
-}
-
-.nav li + .nav-header {
-  margin-top: 9px;
-}
-
-.nav-list {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-bottom: 0;
-}
-
-.nav-list > li > a,
-.nav-list .nav-header {
-  margin-right: -15px;
-  margin-left: -15px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-}
-
-.nav-list > li > a {
-  padding: 3px 15px;
-}
-
-.nav-list > .active > a,
-.nav-list > .active > a:hover,
-.nav-list > .active > a:focus {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-  background-color: #0088cc;
-}
-
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  margin-right: 2px;
-}
-
-.nav-list .divider {
-  *width: 100%;
-  height: 1px;
-  margin: 9px 1px;
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-}
-
-.nav-tabs,
-.nav-pills {
-  *zoom: 1;
-}
-
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.nav-tabs:after,
-.nav-pills:after {
-  clear: both;
-}
-
-.nav-tabs > li,
-.nav-pills > li {
-  float: left;
-}
-
-.nav-tabs > li > a,
-.nav-pills > li > a {
-  padding-right: 12px;
-  padding-left: 12px;
-  margin-right: 2px;
-  line-height: 14px;
-}
-
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-
-.nav-tabs > li {
-  margin-bottom: -1px;
-}
-
-.nav-tabs > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  line-height: 20px;
-  border: 1px solid transparent;
-  -webkit-border-radius: 4px 4px 0 0;
-     -moz-border-radius: 4px 4px 0 0;
-          border-radius: 4px 4px 0 0;
-}
-
-.nav-tabs > li > a:hover,
-.nav-tabs > li > a:focus {
-  border-color: #eeeeee #eeeeee #dddddd;
-}
-
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover,
-.nav-tabs > .active > a:focus {
-  color: #555555;
-  cursor: default;
-  background-color: #ffffff;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-}
-
-.nav-pills > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  margin-top: 2px;
-  margin-bottom: 2px;
-  -webkit-border-radius: 5px;
-     -moz-border-radius: 5px;
-          border-radius: 5px;
-}
-
-.nav-pills > .active > a,
-.nav-pills > .active > a:hover,
-.nav-pills > .active > a:focus {
-  color: #ffffff;
-  background-color: #0088cc;
-}
-
-.nav-stacked > li {
-  float: none;
-}
-
-.nav-stacked > li > a {
-  margin-right: 0;
-}
-
-.nav-tabs.nav-stacked {
-  border-bottom: 0;
-}
-
-.nav-tabs.nav-stacked > li > a {
-  border: 1px solid #ddd;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.nav-tabs.nav-stacked > li:first-child > a {
-  -webkit-border-top-right-radius: 4px;
-          border-top-right-radius: 4px;
-  -webkit-border-top-left-radius: 4px;
-          border-top-left-radius: 4px;
-  -moz-border-radius-topright: 4px;
-  -moz-border-radius-topleft: 4px;
-}
-
-.nav-tabs.nav-stacked > li:last-child > a {
-  -webkit-border-bottom-right-radius: 4px;
-          border-bottom-right-radius: 4px;
-  -webkit-border-bottom-left-radius: 4px;
-          border-bottom-left-radius: 4px;
-  -moz-border-radius-bottomright: 4px;
-  -moz-border-radius-bottomleft: 4px;
-}
-
-.nav-tabs.nav-stacked > li > a:hover,
-.nav-tabs.nav-stacked > li > a:focus {
-  z-index: 2;
-  border-color: #ddd;
-}
-
-.nav-pills.nav-stacked > li > a {
-  margin-bottom: 3px;
-}
-
-.nav-pills.nav-stacked > li:last-child > a {
-  margin-bottom: 1px;
-}
-
-.nav-tabs .dropdown-menu {
-  -webkit-border-radius: 0 0 6px 6px;
-     -moz-border-radius: 0 0 6px 6px;
-          border-radius: 0 0 6px 6px;
-}
-
-.nav-pills .dropdown-menu {
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-
-.nav .dropdown-toggle .caret {
-  margin-top: 6px;
-  border-top-color: #0088cc;
-  border-bottom-color: #0088cc;
-}
-
-.nav .dropdown-toggle:hover .caret,
-.nav .dropdown-toggle:focus .caret {
-  border-top-color: #005580;
-  border-bottom-color: #005580;
-}
-
-/* move down carets for tabs */
-
-.nav-tabs .dropdown-toggle .caret {
-  margin-top: 8px;
-}
-
-.nav .active .dropdown-toggle .caret {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-
-.nav-tabs .active .dropdown-toggle .caret {
-  border-top-color: #555555;
-  border-bottom-color: #555555;
-}
-
-.nav > .dropdown.active > a:hover,
-.nav > .dropdown.active > a:focus {
-  cursor: pointer;
-}
-
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > li.dropdown.open.active > a:hover,
-.nav > li.dropdown.open.active > a:focus {
-  color: #ffffff;
-  background-color: #999999;
-  border-color: #999999;
-}
-
-.nav li.dropdown.open .caret,
-.nav li.dropdown.open.active .caret,
-.nav li.dropdown.open a:hover .caret,
-.nav li.dropdown.open a:focus .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-
-.tabs-stacked .open > a:hover,
-.tabs-stacked .open > a:focus {
-  border-color: #999999;
-}
-
-.tabbable {
-  *zoom: 1;
-}
-
-.tabbable:before,
-.tabbable:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.tabbable:after {
-  clear: both;
-}
-
-.tab-content {
-  overflow: auto;
-}
-
-.tabs-below > .nav-tabs,
-.tabs-right > .nav-tabs,
-.tabs-left > .nav-tabs {
-  border-bottom: 0;
-}
-
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
-  display: none;
-}
-
-.tab-content > .active,
-.pill-content > .active {
-  display: block;
-}
-
-.tabs-below > .nav-tabs {
-  border-top: 1px solid #ddd;
-}
-
-.tabs-below > .nav-tabs > li {
-  margin-top: -1px;
-  margin-bottom: 0;
-}
-
-.tabs-below > .nav-tabs > li > a {
-  -webkit-border-radius: 0 0 4px 4px;
-     -moz-border-radius: 0 0 4px 4px;
-          border-radius: 0 0 4px 4px;
-}
-
-.tabs-below > .nav-tabs > li > a:hover,
-.tabs-below > .nav-tabs > li > a:focus {
-  border-top-color: #ddd;
-  border-bottom-color: transparent;
-}
-
-.tabs-below > .nav-tabs > .active > a,
-.tabs-below > .nav-tabs > .active > a:hover,
-.tabs-below > .nav-tabs > .active > a:focus {
-  border-color: transparent #ddd #ddd #ddd;
-}
-
-.tabs-left > .nav-tabs > li,
-.tabs-right > .nav-tabs > li {
-  float: none;
-}
-
-.tabs-left > .nav-tabs > li > a,
-.tabs-right > .nav-tabs > li > a {
-  min-width: 74px;
-  margin-right: 0;
-  margin-bottom: 3px;
-}
-
-.tabs-left > .nav-tabs {
-  float: left;
-  margin-right: 19px;
-  border-right: 1px solid #ddd;
-}
-
-.tabs-left > .nav-tabs > li > a {
-  margin-right: -1px;
-  -webkit-border-radius: 4px 0 0 4px;
-     -moz-border-radius: 4px 0 0 4px;
-          border-radius: 4px 0 0 4px;
-}
-
-.tabs-left > .nav-tabs > li > a:hover,
-.tabs-left > .nav-tabs > li > a:focus {
-  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
-}
-
-.tabs-left > .nav-tabs .active > a,
-.tabs-left > .nav-tabs .active > a:hover,
-.tabs-left > .nav-tabs .active > a:focus {
-  border-color: #ddd transparent #ddd #ddd;
-  *border-right-color: #ffffff;
-}
-
-.tabs-right > .nav-tabs {
-  float: right;
-  margin-left: 19px;
-  border-left: 1px solid #ddd;
-}
-
-.tabs-right > .nav-tabs > li > a {
-  margin-left: -1px;
-  -webkit-border-radius: 0 4px 4px 0;
-     -moz-border-radius: 0 4px 4px 0;
-          border-radius: 0 4px 4px 0;
-}
-
-.tabs-right > .nav-tabs > li > a:hover,
-.tabs-right > .nav-tabs > li > a:focus {
-  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
-}
-
-.tabs-right > .nav-tabs .active > a,
-.tabs-right > .nav-tabs .active > a:hover,
-.tabs-right > .nav-tabs .active > a:focus {
-  border-color: #ddd #ddd #ddd transparent;
-  *border-left-color: #ffffff;
-}
-
-.nav > .disabled > a {
-  color: #999999;
-}
-
-.nav > .disabled > a:hover,
-.nav > .disabled > a:focus {
-  text-decoration: none;
-  cursor: default;
-  background-color: transparent;
-}
-
-.navbar {
-  *position: relative;
-  *z-index: 2;
-  margin-bottom: 20px;
-  overflow: visible;
-}
-
-.navbar-inner {
-  min-height: 40px;
-  padding-right: 20px;
-  padding-left: 20px;
-  background-color: #fafafa;
-  background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
-  background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
-  background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
-  background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
-  background-repeat: repeat-x;
-  border: 1px solid #d4d4d4;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
-  *zoom: 1;
-  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
-     -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
-          box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
-}
-
-.navbar-inner:before,
-.navbar-inner:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.navbar-inner:after {
-  clear: both;
-}
-
-.navbar .container {
-  width: auto;
-}
-
-.nav-collapse.collapse {
-  height: auto;
-  overflow: visible;
-}
-
-.navbar .brand {
-  display: block;
-  float: left;
-  padding: 10px 20px 10px;
-  margin-left: -20px;
-  font-size: 20px;
-  font-weight: 200;
-  color: #777777;
-  text-shadow: 0 1px 0 #ffffff;
-}
-
-.navbar .brand:hover,
-.navbar .brand:focus {
-  text-decoration: none;
-}
-
-.navbar-text {
-  margin-bottom: 0;
-  line-height: 40px;
-  color: #777777;
-}
-
-.navbar-link {
-  color: #777777;
-}
-
-.navbar-link:hover,
-.navbar-link:focus {
-  color: #333333;
-}
-
-.navbar .divider-vertical {
-  height: 40px;
-  margin: 0 9px;
-  border-right: 1px solid #ffffff;
-  border-left: 1px solid #f2f2f2;
-}
-
-.navbar .btn,
-.navbar .btn-group {
-  margin-top: 5px;
-}
-
-.navbar .btn-group .btn,
-.navbar .input-prepend .btn,
-.navbar .input-append .btn,
-.navbar .input-prepend .btn-group,
-.navbar .input-append .btn-group {
-  margin-top: 0;
-}
-
-.navbar-form {
-  margin-bottom: 0;
-  *zoom: 1;
-}
-
-.navbar-form:before,
-.navbar-form:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.navbar-form:after {
-  clear: both;
-}
-
-.navbar-form input,
-.navbar-form select,
-.navbar-form .radio,
-.navbar-form .checkbox {
-  margin-top: 5px;
-}
-
-.navbar-form input,
-.navbar-form select,
-.navbar-form .btn {
-  display: inline-block;
-  margin-bottom: 0;
-}
-
-.navbar-form input[type="image"],
-.navbar-form input[type="checkbox"],
-.navbar-form input[type="radio"] {
-  margin-top: 3px;
-}
-
-.navbar-form .input-append,
-.navbar-form .input-prepend {
-  margin-top: 5px;
-  white-space: nowrap;
-}
-
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
-  margin-top: 0;
-}
-
-.navbar-search {
-  position: relative;
-  float: left;
-  margin-top: 5px;
-  margin-bottom: 0;
-}
-
-.navbar-search .search-query {
-  padding: 4px 14px;
-  margin-bottom: 0;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 1;
-  -webkit-border-radius: 15px;
-     -moz-border-radius: 15px;
-          border-radius: 15px;
-}
-
-.navbar-static-top {
-  position: static;
-  margin-bottom: 0;
-}
-
-.navbar-static-top .navbar-inner {
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-  margin-bottom: 0;
-}
-
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
-  border-width: 0 0 1px;
-}
-
-.navbar-fixed-bottom .navbar-inner {
-  border-width: 1px 0 0;
-}
-
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
-  padding-right: 0;
-  padding-left: 0;
-  -webkit-border-radius: 0;
-     -moz-border-radius: 0;
-          border-radius: 0;
-}
-
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  width: 940px;
-}
-
-.navbar-fixed-top {
-  top: 0;
-}
-
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
-  -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
-     -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
-          box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
-}
-
-.navbar-fixed-bottom {
-  bottom: 0;
-}
-
-.navbar-fixed-bottom .navbar-inner {
-  -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
-     -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
-          box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
-}
-
-.navbar .nav {
-  position: relative;
-  left: 0;
-  display: block;
-  float: left;
-  margin: 0 10px 0 0;
-}
-
-.navbar .nav.pull-right {
-  float: right;
-  margin-right: 0;
-}
-
-.navbar .nav > li {
-  float: left;
-}
-
-.navbar .nav > li > a {
-  float: none;
-  padding: 10px 15px 10px;
-  color: #777777;
-  text-decoration: none;
-  text-shadow: 0 1px 0 #ffffff;
-}
-
-.navbar .nav .dropdown-toggle .caret {
-  margin-top: 8px;
-}
-
-.navbar .nav > li > a:focus,
-.navbar .nav > li > a:hover {
-  color: #333333;
-  text-decoration: none;
-  background-color: transparent;
-}
-
-.navbar .nav > .active > a,
-.navbar .nav > .active > a:hover,
-.navbar .nav > .active > a:focus {
-  color: #555555;
-  text-decoration: none;
-  background-color: #e5e5e5;
-  -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
-     -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
-          box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
-}
-
-.navbar .btn-navbar {
-  display: none;
-  float: right;
-  padding: 7px 10px;
-  margin-right: 5px;
-  margin-left: 5px;
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #ededed;
-  *background-color: #e5e5e5;
-  background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
-  background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
-  background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
-  background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
-  background-repeat: repeat-x;
-  border-color: #e5e5e5 #e5e5e5 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-}
-
-.navbar .btn-navbar:hover,
-.navbar .btn-navbar:focus,
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active,
-.navbar .btn-navbar.disabled,
-.navbar .btn-navbar[disabled] {
-  color: #ffffff;
-  background-color: #e5e5e5;
-  *background-color: #d9d9d9;
-}
-
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active {
-  background-color: #cccccc \9;
-}
-
-.navbar .btn-navbar .icon-bar {
-  display: block;
-  width: 18px;
-  height: 2px;
-  background-color: #f5f5f5;
-  -webkit-border-radius: 1px;
-     -moz-border-radius: 1px;
-          border-radius: 1px;
-  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-     -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-          box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-}
-
-.btn-navbar .icon-bar + .icon-bar {
-  margin-top: 3px;
-}
-
-.navbar .nav > li > .dropdown-menu:before {
-  position: absolute;
-  top: -7px;
-  left: 9px;
-  display: inline-block;
-  border-right: 7px solid transparent;
-  border-bottom: 7px solid #ccc;
-  border-left: 7px solid transparent;
-  border-bottom-color: rgba(0, 0, 0, 0.2);
-  content: '';
-}
-
-.navbar .nav > li > .dropdown-menu:after {
-  position: absolute;
-  top: -6px;
-  left: 10px;
-  display: inline-block;
-  border-right: 6px solid transparent;
-  border-bottom: 6px solid #ffffff;
-  border-left: 6px solid transparent;
-  content: '';
-}
-
-.navbar-fixed-bottom .nav > li > .dropdown-menu:before {
-  top: auto;
-  bottom: -7px;
-  border-top: 7px solid #ccc;
-  border-bottom: 0;
-  border-top-color: rgba(0, 0, 0, 0.2);
-}
-
-.navbar-fixed-bottom .nav > li > .dropdown-menu:after {
-  top: auto;
-  bottom: -6px;
-  border-top: 6px solid #ffffff;
-  border-bottom: 0;
-}
-
-.navbar .nav li.dropdown > a:hover .caret,
-.navbar .nav li.dropdown > a:focus .caret {
-  border-top-color: #333333;
-  border-bottom-color: #333333;
-}
-
-.navbar .nav li.dropdown.open > .dropdown-toggle,
-.navbar .nav li.dropdown.active > .dropdown-toggle,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle {
-  color: #555555;
-  background-color: #e5e5e5;
-}
-
-.navbar .nav li.dropdown > .dropdown-toggle .caret {
-  border-top-color: #777777;
-  border-bottom-color: #777777;
-}
-
-.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
-  border-top-color: #555555;
-  border-bottom-color: #555555;
-}
-
-.navbar .pull-right > li > .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-
-.navbar .pull-right > li > .dropdown-menu:before,
-.navbar .nav > li > .dropdown-menu.pull-right:before {
-  right: 12px;
-  left: auto;
-}
-
-.navbar .pull-right > li > .dropdown-menu:after,
-.navbar .nav > li > .dropdown-menu.pull-right:after {
-  right: 13px;
-  left: auto;
-}
-
-.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
-  right: 100%;
-  left: auto;
-  margin-right: -1px;
-  margin-left: 0;
-  -webkit-border-radius: 6px 0 6px 6px;
-     -moz-border-radius: 6px 0 6px 6px;
-          border-radius: 6px 0 6px 6px;
-}
-
-.navbar-inverse .navbar-inner {
-  background-color: #1b1b1b;
-  background-image: -moz-linear-gradient(top, #222222, #111111);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
-  background-image: -webkit-linear-gradient(top, #222222, #111111);
-  background-image: -o-linear-gradient(top, #222222, #111111);
-  background-image: linear-gradient(to bottom, #222222, #111111);
-  background-repeat: repeat-x;
-  border-color: #252525;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
-}
-
-.navbar-inverse .brand,
-.navbar-inverse .nav > li > a {
-  color: #999999;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-
-.navbar-inverse .brand:hover,
-.navbar-inverse .nav > li > a:hover,
-.navbar-inverse .brand:focus,
-.navbar-inverse .nav > li > a:focus {
-  color: #ffffff;
-}
-
-.navbar-inverse .brand {
-  color: #999999;
-}
-
-.navbar-inverse .navbar-text {
-  color: #999999;
-}
-
-.navbar-inverse .nav > li > a:focus,
-.navbar-inverse .nav > li > a:hover {
-  color: #ffffff;
-  background-color: transparent;
-}
-
-.navbar-inverse .nav .active > a,
-.navbar-inverse .nav .active > a:hover,
-.navbar-inverse .nav .active > a:focus {
-  color: #ffffff;
-  background-color: #111111;
-}
-
-.navbar-inverse .navbar-link {
-  color: #999999;
-}
-
-.navbar-inverse .navbar-link:hover,
-.navbar-inverse .navbar-link:focus {
-  color: #ffffff;
-}
-
-.navbar-inverse .divider-vertical {
-  border-right-color: #222222;
-  border-left-color: #111111;
-}
-
-.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
-.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
-.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
-  color: #ffffff;
-  background-color: #111111;
-}
-
-.navbar-inverse .nav li.dropdown > a:hover .caret,
-.navbar-inverse .nav li.dropdown > a:focus .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-}
-
-.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
-  border-top-color: #999999;
-  border-bottom-color: #999999;
-}
-
-.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
-  border-top-color: #ffffff;
-  border-bottom-color: #ffffff;
-}
-
-.navbar-inverse .navbar-search .search-query {
-  color: #ffffff;
-  background-color: #515151;
-  border-color: #111111;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  -webkit-transition: none;
-     -moz-transition: none;
-       -o-transition: none;
-          transition: none;
-}
-
-.navbar-inverse .navbar-search .search-query:-moz-placeholder {
-  color: #cccccc;
-}
-
-.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
-  color: #cccccc;
-}
-
-.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
-  color: #cccccc;
-}
-
-.navbar-inverse .navbar-search .search-query:focus,
-.navbar-inverse .navbar-search .search-query.focused {
-  padding: 5px 15px;
-  color: #333333;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #ffffff;
-  border: 0;
-  outline: 0;
-  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-     -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-          box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-}
-
-.navbar-inverse .btn-navbar {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #0e0e0e;
-  *background-color: #040404;
-  background-image: -moz-linear-gradient(top, #151515, #040404);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
-  background-image: -webkit-linear-gradient(top, #151515, #040404);
-  background-image: -o-linear-gradient(top, #151515, #040404);
-  background-image: linear-gradient(to bottom, #151515, #040404);
-  background-repeat: repeat-x;
-  border-color: #040404 #040404 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-.navbar-inverse .btn-navbar:hover,
-.navbar-inverse .btn-navbar:focus,
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active,
-.navbar-inverse .btn-navbar.disabled,
-.navbar-inverse .btn-navbar[disabled] {
-  color: #ffffff;
-  background-color: #040404;
-  *background-color: #000000;
-}
-
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active {
-  background-color: #000000 \9;
-}
-
-.breadcrumb {
-  padding: 8px 15px;
-  margin: 0 0 20px;
-  list-style: none;
-  background-color: #f5f5f5;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-.breadcrumb > li {
-  display: inline-block;
-  *display: inline;
-  text-shadow: 0 1px 0 #ffffff;
-  *zoom: 1;
-}
-
-.breadcrumb > li > .divider {
-  padding: 0 5px;
-  color: #ccc;
-}
-
-.breadcrumb > .active {
-  color: #999999;
-}
-
-.pagination {
-  margin: 20px 0;
-}
-
-.pagination ul {
-  display: inline-block;
-  *display: inline;
-  margin-bottom: 0;
-  margin-left: 0;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  *zoom: 1;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.pagination ul > li {
-  display: inline;
-}
-
-.pagination ul > li > a,
-.pagination ul > li > span {
-  float: left;
-  padding: 4px 12px;
-  line-height: 20px;
-  text-decoration: none;
-  background-color: #ffffff;
-  border: 1px solid #dddddd;
-  border-left-width: 0;
-}
-
-.pagination ul > li > a:hover,
-.pagination ul > li > a:focus,
-.pagination ul > .active > a,
-.pagination ul > .active > span {
-  background-color: #f5f5f5;
-}
-
-.pagination ul > .active > a,
-.pagination ul > .active > span {
-  color: #999999;
-  cursor: default;
-}
-
-.pagination ul > .disabled > span,
-.pagination ul > .disabled > a,
-.pagination ul > .disabled > a:hover,
-.pagination ul > .disabled > a:focus {
-  color: #999999;
-  cursor: default;
-  background-color: transparent;
-}
-
-.pagination ul > li:first-child > a,
-.pagination ul > li:first-child > span {
-  border-left-width: 1px;
-  -webkit-border-bottom-left-radius: 4px;
-          border-bottom-left-radius: 4px;
-  -webkit-border-top-left-radius: 4px;
-          border-top-left-radius: 4px;
-  -moz-border-radius-bottomleft: 4px;
-  -moz-border-radius-topleft: 4px;
-}
-
-.pagination ul > li:last-child > a,
-.pagination ul > li:last-child > span {
-  -webkit-border-top-right-radius: 4px;
-          border-top-right-radius: 4px;
-  -webkit-border-bottom-right-radius: 4px;
-          border-bottom-right-radius: 4px;
-  -moz-border-radius-topright: 4px;
-  -moz-border-radius-bottomright: 4px;
-}
-
-.pagination-centered {
-  text-align: center;
-}
-
-.pagination-right {
-  text-align: right;
-}
-
-.pagination-large ul > li > a,
-.pagination-large ul > li > span {
-  padding: 11px 19px;
-  font-size: 17.5px;
-}
-
-.pagination-large ul > li:first-child > a,
-.pagination-large ul > li:first-child > span {
-  -webkit-border-bottom-left-radius: 6px;
-          border-bottom-left-radius: 6px;
-  -webkit-border-top-left-radius: 6px;
-          border-top-left-radius: 6px;
-  -moz-border-radius-bottomleft: 6px;
-  -moz-border-radius-topleft: 6px;
-}
-
-.pagination-large ul > li:last-child > a,
-.pagination-large ul > li:last-child > span {
-  -webkit-border-top-right-radius: 6px;
-          border-top-right-radius: 6px;
-  -webkit-border-bottom-right-radius: 6px;
-          border-bottom-right-radius: 6px;
-  -moz-border-radius-topright: 6px;
-  -moz-border-radius-bottomright: 6px;
-}
-
-.pagination-mini ul > li:first-child > a,
-.pagination-small ul > li:first-child > a,
-.pagination-mini ul > li:first-child > span,
-.pagination-small ul > li:first-child > span {
-  -webkit-border-bottom-left-radius: 3px;
-          border-bottom-left-radius: 3px;
-  -webkit-border-top-left-radius: 3px;
-          border-top-left-radius: 3px;
-  -moz-border-radius-bottomleft: 3px;
-  -moz-border-radius-topleft: 3px;
-}
-
-.pagination-mini ul > li:last-child > a,
-.pagination-small ul > li:last-child > a,
-.pagination-mini ul > li:last-child > span,
-.pagination-small ul > li:last-child > span {
-  -webkit-border-top-right-radius: 3px;
-          border-top-right-radius: 3px;
-  -webkit-border-bottom-right-radius: 3px;
-          border-bottom-right-radius: 3px;
-  -moz-border-radius-topright: 3px;
-  -moz-border-radius-bottomright: 3px;
-}
-
-.pagination-small ul > li > a,
-.pagination-small ul > li > span {
-  padding: 2px 10px;
-  font-size: 11.9px;
-}
-
-.pagination-mini ul > li > a,
-.pagination-mini ul > li > span {
-  padding: 0 6px;
-  font-size: 10.5px;
-}
-
-.pager {
-  margin: 20px 0;
-  text-align: center;
-  list-style: none;
-  *zoom: 1;
-}
-
-.pager:before,
-.pager:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.pager:after {
-  clear: both;
-}
-
-.pager li {
-  display: inline;
-}
-
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 15px;
-     -moz-border-radius: 15px;
-          border-radius: 15px;
-}
-
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
-  color: #999999;
-  cursor: default;
-  background-color: #fff;
-}
-
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000000;
-}
-
-.modal-backdrop.fade {
-  opacity: 0;
-}
-
-.modal-backdrop,
-.modal-backdrop.fade.in {
-  opacity: 0.8;
-  filter: alpha(opacity=80);
-}
-
-.modal {
-  position: fixed;
-  top: 10%;
-  left: 50%;
-  z-index: 1050;
-  width: 560px;
-  margin-left: -280px;
-  background-color: #ffffff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.3);
-  *border: 1px solid #999;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-  outline: none;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-     -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-          box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding-box;
-          background-clip: padding-box;
-}
-
-.modal.fade {
-  top: -25%;
-  -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
-     -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
-       -o-transition: opacity 0.3s linear, top 0.3s ease-out;
-          transition: opacity 0.3s linear, top 0.3s ease-out;
-}
-
-.modal.fade.in {
-  top: 10%;
-}
-
-.modal-header {
-  padding: 9px 15px;
-  border-bottom: 1px solid #eee;
-}
-
-.modal-header .close {
-  margin-top: 2px;
-}
-
-.modal-header h3 {
-  margin: 0;
-  line-height: 30px;
-}
-
-.modal-body {
-  position: relative;
-  max-height: 400px;
-  padding: 15px;
-  overflow-y: auto;
-}
-
-.modal-form {
-  margin-bottom: 0;
-}
-
-.modal-footer {
-  padding: 14px 15px 15px;
-  margin-bottom: 0;
-  text-align: right;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  -webkit-border-radius: 0 0 6px 6px;
-     -moz-border-radius: 0 0 6px 6px;
-          border-radius: 0 0 6px 6px;
-  *zoom: 1;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-     -moz-box-shadow: inset 0 1px 0 #ffffff;
-          box-shadow: inset 0 1px 0 #ffffff;
-}
-
-.modal-footer:before,
-.modal-footer:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.modal-footer:after {
-  clear: both;
-}
-
-.modal-footer .btn + .btn {
-  margin-bottom: 0;
-  margin-left: 5px;
-}
-
-.modal-footer .btn-group .btn + .btn {
-  margin-left: -1px;
-}
-
-.modal-footer .btn-block + .btn-block {
-  margin-left: 0;
-}
-
-.tooltip {
-  position: absolute;
-  z-index: 1030;
-  display: block;
-  font-size: 11px;
-  line-height: 1.4;
-  opacity: 0;
-  filter: alpha(opacity=0);
-  visibility: visible;
-}
-
-.tooltip.in {
-  opacity: 0.8;
-  filter: alpha(opacity=80);
-}
-
-.tooltip.top {
-  padding: 5px 0;
-  margin-top: -3px;
-}
-
-.tooltip.right {
-  padding: 0 5px;
-  margin-left: 3px;
-}
-
-.tooltip.bottom {
-  padding: 5px 0;
-  margin-top: 3px;
-}
-
-.tooltip.left {
-  padding: 0 5px;
-  margin-left: -3px;
-}
-
-.tooltip-inner {
-  max-width: 200px;
-  padding: 8px;
-  color: #ffffff;
-  text-align: center;
-  text-decoration: none;
-  background-color: #000000;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-top-color: #000000;
-  border-width: 5px 5px 0;
-}
-
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-right-color: #000000;
-  border-width: 5px 5px 5px 0;
-}
-
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-left-color: #000000;
-  border-width: 5px 0 5px 5px;
-}
-
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-bottom-color: #000000;
-  border-width: 0 5px 5px;
-}
-
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1010;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  text-align: left;
-  white-space: normal;
-  background-color: #ffffff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding;
-          background-clip: padding-box;
-}
-
-.popover.top {
-  margin-top: -10px;
-}
-
-.popover.right {
-  margin-left: 10px;
-}
-
-.popover.bottom {
-  margin-top: 10px;
-}
-
-.popover.left {
-  margin-left: -10px;
-}
-
-.popover-title {
-  padding: 8px 14px;
-  margin: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 18px;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
-  -webkit-border-radius: 5px 5px 0 0;
-     -moz-border-radius: 5px 5px 0 0;
-          border-radius: 5px 5px 0 0;
-}
-
-.popover-title:empty {
-  display: none;
-}
-
-.popover-content {
-  padding: 9px 14px;
-}
-
-.popover .arrow,
-.popover .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-
-.popover .arrow {
-  border-width: 11px;
-}
-
-.popover .arrow:after {
-  border-width: 10px;
-  content: "";
-}
-
-.popover.top .arrow {
-  bottom: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-top-color: #999;
-  border-top-color: rgba(0, 0, 0, 0.25);
-  border-bottom-width: 0;
-}
-
-.popover.top .arrow:after {
-  bottom: 1px;
-  margin-left: -10px;
-  border-top-color: #ffffff;
-  border-bottom-width: 0;
-}
-
-.popover.right .arrow {
-  top: 50%;
-  left: -11px;
-  margin-top: -11px;
-  border-right-color: #999;
-  border-right-color: rgba(0, 0, 0, 0.25);
-  border-left-width: 0;
-}
-
-.popover.right .arrow:after {
-  bottom: -10px;
-  left: 1px;
-  border-right-color: #ffffff;
-  border-left-width: 0;
-}
-
-.popover.bottom .arrow {
-  top: -11px;
-  left: 50%;
-  margin-left: -11px;
-  border-bottom-color: #999;
-  border-bottom-color: rgba(0, 0, 0, 0.25);
-  border-top-width: 0;
-}
-
-.popover.bottom .arrow:after {
-  top: 1px;
-  margin-left: -10px;
-  border-bottom-color: #ffffff;
-  border-top-width: 0;
-}
-
-.popover.left .arrow {
-  top: 50%;
-  right: -11px;
-  margin-top: -11px;
-  border-left-color: #999;
-  border-left-color: rgba(0, 0, 0, 0.25);
-  border-right-width: 0;
-}
-
-.popover.left .arrow:after {
-  right: 1px;
-  bottom: -10px;
-  border-left-color: #ffffff;
-  border-right-width: 0;
-}
-
-.thumbnails {
-  margin-left: -20px;
-  list-style: none;
-  *zoom: 1;
-}
-
-.thumbnails:before,
-.thumbnails:after {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.thumbnails:after {
-  clear: both;
-}
-
-.row-fluid .thumbnails {
-  margin-left: 0;
-}
-
-.thumbnails > li {
-  float: left;
-  margin-bottom: 20px;
-  margin-left: 20px;
-}
-
-.thumbnail {
-  display: block;
-  padding: 4px;
-  line-height: 20px;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
-     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
-          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
-  -webkit-transition: all 0.2s ease-in-out;
-     -moz-transition: all 0.2s ease-in-out;
-       -o-transition: all 0.2s ease-in-out;
-          transition: all 0.2s ease-in-out;
-}
-
-a.thumbnail:hover,
-a.thumbnail:focus {
-  border-color: #0088cc;
-  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-     -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-          box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-}
-
-.thumbnail > img {
-  display: block;
-  max-width: 100%;
-  margin-right: auto;
-  margin-left: auto;
-}
-
-.thumbnail .caption {
-  padding: 9px;
-  color: #555555;
-}
-
-.media,
-.media-body {
-  overflow: hidden;
-  *overflow: visible;
-  zoom: 1;
-}
-
-.media,
-.media .media {
-  margin-top: 15px;
-}
-
-.media:first-child {
-  margin-top: 0;
-}
-
-.media-object {
-  display: block;
-}
-
-.media-heading {
-  margin: 0 0 5px;
-}
-
-.media > .pull-left {
-  margin-right: 10px;
-}
-
-.media > .pull-right {
-  margin-left: 10px;
-}
-
-.media-list {
-  margin-left: 0;
-  list-style: none;
-}
-
-.label,
-.badge {
-  display: inline-block;
-  padding: 2px 4px;
-  font-size: 11.844px;
-  font-weight: bold;
-  line-height: 14px;
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  white-space: nowrap;
-  vertical-align: baseline;
-  background-color: #999999;
-}
-
-.label {
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
-}
-
-.badge {
-  padding-right: 9px;
-  padding-left: 9px;
-  -webkit-border-radius: 9px;
-     -moz-border-radius: 9px;
-          border-radius: 9px;
-}
-
-.label:empty,
-.badge:empty {
-  display: none;
-}
-
-a.label:hover,
-a.label:focus,
-a.badge:hover,
-a.badge:focus {
-  color: #ffffff;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-.label-important,
-.badge-important {
-  background-color: #b94a48;
-}
-
-.label-important[href],
-.badge-important[href] {
-  background-color: #953b39;
-}
-
-.label-warning,
-.badge-warning {
-  background-color: #f89406;
-}
-
-.label-warning[href],
-.badge-warning[href] {
-  background-color: #c67605;
-}
-
-.label-success,
-.badge-success {
-  background-color: #468847;
-}
-
-.label-success[href],
-.badge-success[href] {
-  background-color: #356635;
-}
-
-.label-info,
-.badge-info {
-  background-color: #3a87ad;
-}
-
-.label-info[href],
-.badge-info[href] {
-  background-color: #2d6987;
-}
-
-.label-inverse,
-.badge-inverse {
-  background-color: #333333;
-}
-
-.label-inverse[href],
-.badge-inverse[href] {
-  background-color: #1a1a1a;
-}
-
-.btn .label,
-.btn .badge {
-  position: relative;
-  top: -1px;
-}
-
-.btn-mini .label,
-.btn-mini .badge {
-  top: 0;
-}
-
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-ms-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-@-o-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-
-.progress {
-  height: 20px;
-  margin-bottom: 20px;
-  overflow: hidden;
-  background-color: #f7f7f7;
-  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
-  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
-  background-repeat: repeat-x;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-}
-
-.progress .bar {
-  float: left;
-  width: 0;
-  height: 100%;
-  font-size: 12px;
-  color: #ffffff;
-  text-align: center;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #0e90d2;
-  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
-  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
-  background-image: -o-linear-gradient(top, #149bdf, #0480be);
-  background-image: linear-gradient(to bottom, #149bdf, #0480be);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-     -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-transition: width 0.6s ease;
-     -moz-transition: width 0.6s ease;
-       -o-transition: width 0.6s ease;
-          transition: width 0.6s ease;
-}
-
-.progress .bar + .bar {
-  -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-     -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-          box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-}
-
-.progress-striped .bar {
-  background-color: #149bdf;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  -webkit-background-size: 40px 40px;
-     -moz-background-size: 40px 40px;
-       -o-background-size: 40px 40px;
-          background-size: 40px 40px;
-}
-
-.progress.active .bar {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-     -moz-animation: progress-bar-stripes 2s linear infinite;
-      -ms-animation: progress-bar-stripes 2s linear infinite;
-       -o-animation: progress-bar-stripes 2s linear infinite;
-          animation: progress-bar-stripes 2s linear infinite;
-}
-
-.progress-danger .bar,
-.progress .bar-danger {
-  background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
-}
-
-.progress-danger.progress-striped .bar,
-.progress-striped .bar-danger {
-  background-color: #ee5f5b;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.progress-success .bar,
-.progress .bar-success {
-  background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(to bottom, #62c462, #57a957);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
-}
-
-.progress-success.progress-striped .bar,
-.progress-striped .bar-success {
-  background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.progress-info .bar,
-.progress .bar-info {
-  background-color: #4bb1cf;
-  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
-}
-
-.progress-info.progress-striped .bar,
-.progress-striped .bar-info {
-  background-color: #5bc0de;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.progress-warning .bar,
-.progress .bar-warning {
-  background-color: #faa732;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(to bottom, #fbb450, #f89406);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
-}
-
-.progress-warning.progress-striped .bar,
-.progress-striped .bar-warning {
-  background-color: #fbb450;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.accordion {
-  margin-bottom: 20px;
-}
-
-.accordion-group {
-  margin-bottom: 2px;
-  border: 1px solid #e5e5e5;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-}
-
-.accordion-heading {
-  border-bottom: 0;
-}
-
-.accordion-heading .accordion-toggle {
-  display: block;
-  padding: 8px 15px;
-}
-
-.accordion-toggle {
-  cursor: pointer;
-}
-
-.accordion-inner {
-  padding: 9px 15px;
-  border-top: 1px solid #e5e5e5;
-}
-
-.carousel {
-  position: relative;
-  margin-bottom: 20px;
-  line-height: 1;
-}
-
-.carousel-inner {
-  position: relative;
-  width: 100%;
-  overflow: hidden;
-}
-
-.carousel-inner > .item {
-  position: relative;
-  display: none;
-  -webkit-transition: 0.6s ease-in-out left;
-     -moz-transition: 0.6s ease-in-out left;
-       -o-transition: 0.6s ease-in-out left;
-          transition: 0.6s ease-in-out left;
-}
-
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  display: block;
-  line-height: 1;
-}
-
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  display: block;
-}
-
-.carousel-inner > .active {
-  left: 0;
-}
-
-.carousel-inner > .next,
-.carousel-inner > .prev {
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-
-.carousel-inner > .next {
-  left: 100%;
-}
-
-.carousel-inner > .prev {
-  left: -100%;
-}
-
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
-  left: 0;
-}
-
-.carousel-inner > .active.left {
-  left: -100%;
-}
-
-.carousel-inner > .active.right {
-  left: 100%;
-}
-
-.carousel-control {
-  position: absolute;
-  top: 40%;
-  left: 15px;
-  width: 40px;
-  height: 40px;
-  margin-top: -20px;
-  font-size: 60px;
-  font-weight: 100;
-  line-height: 30px;
-  color: #ffffff;
-  text-align: center;
-  background: #222222;
-  border: 3px solid #ffffff;
-  -webkit-border-radius: 23px;
-     -moz-border-radius: 23px;
-          border-radius: 23px;
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-
-.carousel-control.right {
-  right: 15px;
-  left: auto;
-}
-
-.carousel-control:hover,
-.carousel-control:focus {
-  color: #ffffff;
-  text-decoration: none;
-  opacity: 0.9;
-  filter: alpha(opacity=90);
-}
-
-.carousel-indicators {
-  position: absolute;
-  top: 15px;
-  right: 15px;
-  z-index: 5;
-  margin: 0;
-  list-style: none;
-}
-
-.carousel-indicators li {
-  display: block;
-  float: left;
-  width: 10px;
-  height: 10px;
-  margin-left: 5px;
-  text-indent: -999px;
-  background-color: #ccc;
-  background-color: rgba(255, 255, 255, 0.25);
-  border-radius: 5px;
-}
-
-.carousel-indicators .active {
-  background-color: #fff;
-}
-
-.carousel-caption {
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  padding: 15px;
-  background: #333333;
-  background: rgba(0, 0, 0, 0.75);
-}
-
-.carousel-caption h4,
-.carousel-caption p {
-  line-height: 20px;
-  color: #ffffff;
-}
-
-.carousel-caption h4 {
-  margin: 0 0 5px;
-}
-
-.carousel-caption p {
-  margin-bottom: 0;
-}
-
-.hero-unit {
-  padding: 60px;
-  margin-bottom: 30px;
-  font-size: 18px;
-  font-weight: 200;
-  line-height: 30px;
-  color: inherit;
-  background-color: #eeeeee;
-  -webkit-border-radius: 6px;
-     -moz-border-radius: 6px;
-          border-radius: 6px;
-}
-
-.hero-unit h1 {
-  margin-bottom: 0;
-  font-size: 60px;
-  line-height: 1;
-  letter-spacing: -1px;
-  color: inherit;
-}
-
-.hero-unit li {
-  line-height: 30px;
-}
-
-.pull-right {
-  float: right;
-}
-
-.pull-left {
-  float: left;
-}
-
-.hide {
-  display: none;
-}
-
-.show {
-  display: block;
-}
-
-.invisible {
-  visibility: hidden;
-}
-
-.affix {
-  position: fixed;
-}
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap.min.css b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap.min.css
deleted file mode 100644
index df96c86485dd20f436bd7a79808cae66579501f8..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/css/bootstrap.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Bootstrap v2.3.2
- *
- * Copyright 2013 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world by @mdo and @fat.
- */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/img/glyphicons-halflings-white.png b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/img/glyphicons-halflings-white.png and /dev/null differ
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/img/glyphicons-halflings.png b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/img/glyphicons-halflings.png
deleted file mode 100644
index a9969993201f9cee63cf9f49217646347297b643..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/img/glyphicons-halflings.png and /dev/null differ
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/js/bootstrap.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/js/bootstrap.js
deleted file mode 100644
index 44109f62d47997d0d3ee4c65384cf8fac5dfc026..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/js/bootstrap.js
+++ /dev/null
@@ -1,2280 +0,0 @@
-/* ===================================================
- * bootstrap-transition.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#transitions
- * ===================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
-  /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
-   * ======================================================= */
-
-  $(function () {
-
-    $.support.transition = (function () {
-
-      var transitionEnd = (function () {
-
-        var el = document.createElement('bootstrap')
-          , transEndEventNames = {
-               'WebkitTransition' : 'webkitTransitionEnd'
-            ,  'MozTransition'    : 'transitionend'
-            ,  'OTransition'      : 'oTransitionEnd otransitionend'
-            ,  'transition'       : 'transitionend'
-            }
-          , name
-
-        for (name in transEndEventNames){
-          if (el.style[name] !== undefined) {
-            return transEndEventNames[name]
-          }
-        }
-
-      }())
-
-      return transitionEnd && {
-        end: transitionEnd
-      }
-
-    })()
-
-  })
-
-}(window.jQuery);/* ==========================================================
- * bootstrap-alert.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#alerts
- * ==========================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* ALERT CLASS DEFINITION
-  * ====================== */
-
-  var dismiss = '[data-dismiss="alert"]'
-    , Alert = function (el) {
-        $(el).on('click', dismiss, this.close)
-      }
-
-  Alert.prototype.close = function (e) {
-    var $this = $(this)
-      , selector = $this.attr('data-target')
-      , $parent
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    $parent = $(selector)
-
-    e && e.preventDefault()
-
-    $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
-
-    $parent.trigger(e = $.Event('close'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      $parent
-        .trigger('closed')
-        .remove()
-    }
-
-    $.support.transition && $parent.hasClass('fade') ?
-      $parent.on($.support.transition.end, removeElement) :
-      removeElement()
-  }
-
-
- /* ALERT PLUGIN DEFINITION
-  * ======================= */
-
-  var old = $.fn.alert
-
-  $.fn.alert = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('alert')
-      if (!data) $this.data('alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.alert.Constructor = Alert
-
-
- /* ALERT NO CONFLICT
-  * ================= */
-
-  $.fn.alert.noConflict = function () {
-    $.fn.alert = old
-    return this
-  }
-
-
- /* ALERT DATA-API
-  * ============== */
-
-  $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
-
-}(window.jQuery);/* ============================================================
- * bootstrap-button.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#buttons
- * ============================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* BUTTON PUBLIC CLASS DEFINITION
-  * ============================== */
-
-  var Button = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.button.defaults, options)
-  }
-
-  Button.prototype.setState = function (state) {
-    var d = 'disabled'
-      , $el = this.$element
-      , data = $el.data()
-      , val = $el.is('input') ? 'val' : 'html'
-
-    state = state + 'Text'
-    data.resetText || $el.data('resetText', $el[val]())
-
-    $el[val](data[state] || this.options[state])
-
-    // push to event loop to allow forms to submit
-    setTimeout(function () {
-      state == 'loadingText' ?
-        $el.addClass(d).attr(d, d) :
-        $el.removeClass(d).removeAttr(d)
-    }, 0)
-  }
-
-  Button.prototype.toggle = function () {
-    var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
-
-    $parent && $parent
-      .find('.active')
-      .removeClass('active')
-
-    this.$element.toggleClass('active')
-  }
-
-
- /* BUTTON PLUGIN DEFINITION
-  * ======================== */
-
-  var old = $.fn.button
-
-  $.fn.button = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('button')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('button', (data = new Button(this, options)))
-      if (option == 'toggle') data.toggle()
-      else if (option) data.setState(option)
-    })
-  }
-
-  $.fn.button.defaults = {
-    loadingText: 'loading...'
-  }
-
-  $.fn.button.Constructor = Button
-
-
- /* BUTTON NO CONFLICT
-  * ================== */
-
-  $.fn.button.noConflict = function () {
-    $.fn.button = old
-    return this
-  }
-
-
- /* BUTTON DATA-API
-  * =============== */
-
-  $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
-    var $btn = $(e.target)
-    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-    $btn.button('toggle')
-  })
-
-}(window.jQuery);/* ==========================================================
- * bootstrap-carousel.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#carousel
- * ==========================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* CAROUSEL CLASS DEFINITION
-  * ========================= */
-
-  var Carousel = function (element, options) {
-    this.$element = $(element)
-    this.$indicators = this.$element.find('.carousel-indicators')
-    this.options = options
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter', $.proxy(this.pause, this))
-      .on('mouseleave', $.proxy(this.cycle, this))
-  }
-
-  Carousel.prototype = {
-
-    cycle: function (e) {
-      if (!e) this.paused = false
-      if (this.interval) clearInterval(this.interval);
-      this.options.interval
-        && !this.paused
-        && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-      return this
-    }
-
-  , getActiveIndex: function () {
-      this.$active = this.$element.find('.item.active')
-      this.$items = this.$active.parent().children()
-      return this.$items.index(this.$active)
-    }
-
-  , to: function (pos) {
-      var activeIndex = this.getActiveIndex()
-        , that = this
-
-      if (pos > (this.$items.length - 1) || pos < 0) return
-
-      if (this.sliding) {
-        return this.$element.one('slid', function () {
-          that.to(pos)
-        })
-      }
-
-      if (activeIndex == pos) {
-        return this.pause().cycle()
-      }
-
-      return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
-    }
-
-  , pause: function (e) {
-      if (!e) this.paused = true
-      if (this.$element.find('.next, .prev').length && $.support.transition.end) {
-        this.$element.trigger($.support.transition.end)
-        this.cycle(true)
-      }
-      clearInterval(this.interval)
-      this.interval = null
-      return this
-    }
-
-  , next: function () {
-      if (this.sliding) return
-      return this.slide('next')
-    }
-
-  , prev: function () {
-      if (this.sliding) return
-      return this.slide('prev')
-    }
-
-  , slide: function (type, next) {
-      var $active = this.$element.find('.item.active')
-        , $next = next || $active[type]()
-        , isCycling = this.interval
-        , direction = type == 'next' ? 'left' : 'right'
-        , fallback  = type == 'next' ? 'first' : 'last'
-        , that = this
-        , e
-
-      this.sliding = true
-
-      isCycling && this.pause()
-
-      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
-
-      e = $.Event('slide', {
-        relatedTarget: $next[0]
-      , direction: direction
-      })
-
-      if ($next.hasClass('active')) return
-
-      if (this.$indicators.length) {
-        this.$indicators.find('.active').removeClass('active')
-        this.$element.one('slid', function () {
-          var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
-          $nextIndicator && $nextIndicator.addClass('active')
-        })
-      }
-
-      if ($.support.transition && this.$element.hasClass('slide')) {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $next.addClass(type)
-        $next[0].offsetWidth // force reflow
-        $active.addClass(direction)
-        $next.addClass(direction)
-        this.$element.one($.support.transition.end, function () {
-          $next.removeClass([type, direction].join(' ')).addClass('active')
-          $active.removeClass(['active', direction].join(' '))
-          that.sliding = false
-          setTimeout(function () { that.$element.trigger('slid') }, 0)
-        })
-      } else {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $active.removeClass('active')
-        $next.addClass('active')
-        this.sliding = false
-        this.$element.trigger('slid')
-      }
-
-      isCycling && this.cycle()
-
-      return this
-    }
-
-  }
-
-
- /* CAROUSEL PLUGIN DEFINITION
-  * ========================== */
-
-  var old = $.fn.carousel
-
-  $.fn.carousel = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('carousel')
-        , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
-        , action = typeof option == 'string' ? option : options.slide
-      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (action) data[action]()
-      else if (options.interval) data.pause().cycle()
-    })
-  }
-
-  $.fn.carousel.defaults = {
-    interval: 5000
-  , pause: 'hover'
-  }
-
-  $.fn.carousel.Constructor = Carousel
-
-
- /* CAROUSEL NO CONFLICT
-  * ==================== */
-
-  $.fn.carousel.noConflict = function () {
-    $.fn.carousel = old
-    return this
-  }
-
- /* CAROUSEL DATA-API
-  * ================= */
-
-  $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
-    var $this = $(this), href
-      , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-      , options = $.extend({}, $target.data(), $this.data())
-      , slideIndex
-
-    $target.carousel(options)
-
-    if (slideIndex = $this.attr('data-slide-to')) {
-      $target.data('carousel').pause().to(slideIndex).cycle()
-    }
-
-    e.preventDefault()
-  })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-collapse.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#collapse
- * =============================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* COLLAPSE PUBLIC CLASS DEFINITION
-  * ================================ */
-
-  var Collapse = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.collapse.defaults, options)
-
-    if (this.options.parent) {
-      this.$parent = $(this.options.parent)
-    }
-
-    this.options.toggle && this.toggle()
-  }
-
-  Collapse.prototype = {
-
-    constructor: Collapse
-
-  , dimension: function () {
-      var hasWidth = this.$element.hasClass('width')
-      return hasWidth ? 'width' : 'height'
-    }
-
-  , show: function () {
-      var dimension
-        , scroll
-        , actives
-        , hasData
-
-      if (this.transitioning || this.$element.hasClass('in')) return
-
-      dimension = this.dimension()
-      scroll = $.camelCase(['scroll', dimension].join('-'))
-      actives = this.$parent && this.$parent.find('> .accordion-group > .in')
-
-      if (actives && actives.length) {
-        hasData = actives.data('collapse')
-        if (hasData && hasData.transitioning) return
-        actives.collapse('hide')
-        hasData || actives.data('collapse', null)
-      }
-
-      this.$element[dimension](0)
-      this.transition('addClass', $.Event('show'), 'shown')
-      $.support.transition && this.$element[dimension](this.$element[0][scroll])
-    }
-
-  , hide: function () {
-      var dimension
-      if (this.transitioning || !this.$element.hasClass('in')) return
-      dimension = this.dimension()
-      this.reset(this.$element[dimension]())
-      this.transition('removeClass', $.Event('hide'), 'hidden')
-      this.$element[dimension](0)
-    }
-
-  , reset: function (size) {
-      var dimension = this.dimension()
-
-      this.$element
-        .removeClass('collapse')
-        [dimension](size || 'auto')
-        [0].offsetWidth
-
-      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
-
-      return this
-    }
-
-  , transition: function (method, startEvent, completeEvent) {
-      var that = this
-        , complete = function () {
-            if (startEvent.type == 'show') that.reset()
-            that.transitioning = 0
-            that.$element.trigger(completeEvent)
-          }
-
-      this.$element.trigger(startEvent)
-
-      if (startEvent.isDefaultPrevented()) return
-
-      this.transitioning = 1
-
-      this.$element[method]('in')
-
-      $.support.transition && this.$element.hasClass('collapse') ?
-        this.$element.one($.support.transition.end, complete) :
-        complete()
-    }
-
-  , toggle: function () {
-      this[this.$element.hasClass('in') ? 'hide' : 'show']()
-    }
-
-  }
-
-
- /* COLLAPSE PLUGIN DEFINITION
-  * ========================== */
-
-  var old = $.fn.collapse
-
-  $.fn.collapse = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('collapse')
-        , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
-      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.collapse.defaults = {
-    toggle: true
-  }
-
-  $.fn.collapse.Constructor = Collapse
-
-
- /* COLLAPSE NO CONFLICT
-  * ==================== */
-
-  $.fn.collapse.noConflict = function () {
-    $.fn.collapse = old
-    return this
-  }
-
-
- /* COLLAPSE DATA-API
-  * ================= */
-
-  $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
-    var $this = $(this), href
-      , target = $this.attr('data-target')
-        || e.preventDefault()
-        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
-      , option = $(target).data('collapse') ? 'toggle' : $this.data()
-    $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
-    $(target).collapse(option)
-  })
-
-}(window.jQuery);/* ============================================================
- * bootstrap-dropdown.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#dropdowns
- * ============================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* DROPDOWN CLASS DEFINITION
-  * ========================= */
-
-  var toggle = '[data-toggle=dropdown]'
-    , Dropdown = function (element) {
-        var $el = $(element).on('click.dropdown.data-api', this.toggle)
-        $('html').on('click.dropdown.data-api', function () {
-          $el.parent().removeClass('open')
-        })
-      }
-
-  Dropdown.prototype = {
-
-    constructor: Dropdown
-
-  , toggle: function (e) {
-      var $this = $(this)
-        , $parent
-        , isActive
-
-      if ($this.is('.disabled, :disabled')) return
-
-      $parent = getParent($this)
-
-      isActive = $parent.hasClass('open')
-
-      clearMenus()
-
-      if (!isActive) {
-        if ('ontouchstart' in document.documentElement) {
-          // if mobile we we use a backdrop because click events don't delegate
-          $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
-        }
-        $parent.toggleClass('open')
-      }
-
-      $this.focus()
-
-      return false
-    }
-
-  , keydown: function (e) {
-      var $this
-        , $items
-        , $active
-        , $parent
-        , isActive
-        , index
-
-      if (!/(38|40|27)/.test(e.keyCode)) return
-
-      $this = $(this)
-
-      e.preventDefault()
-      e.stopPropagation()
-
-      if ($this.is('.disabled, :disabled')) return
-
-      $parent = getParent($this)
-
-      isActive = $parent.hasClass('open')
-
-      if (!isActive || (isActive && e.keyCode == 27)) {
-        if (e.which == 27) $parent.find(toggle).focus()
-        return $this.click()
-      }
-
-      $items = $('[role=menu] li:not(.divider):visible a', $parent)
-
-      if (!$items.length) return
-
-      index = $items.index($items.filter(':focus'))
-
-      if (e.keyCode == 38 && index > 0) index--                                        // up
-      if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
-      if (!~index) index = 0
-
-      $items
-        .eq(index)
-        .focus()
-    }
-
-  }
-
-  function clearMenus() {
-    $('.dropdown-backdrop').remove()
-    $(toggle).each(function () {
-      getParent($(this)).removeClass('open')
-    })
-  }
-
-  function getParent($this) {
-    var selector = $this.attr('data-target')
-      , $parent
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    $parent = selector && $(selector)
-
-    if (!$parent || !$parent.length) $parent = $this.parent()
-
-    return $parent
-  }
-
-
-  /* DROPDOWN PLUGIN DEFINITION
-   * ========================== */
-
-  var old = $.fn.dropdown
-
-  $.fn.dropdown = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('dropdown')
-      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.dropdown.Constructor = Dropdown
-
-
- /* DROPDOWN NO CONFLICT
-  * ==================== */
-
-  $.fn.dropdown.noConflict = function () {
-    $.fn.dropdown = old
-    return this
-  }
-
-
-  /* APPLY TO STANDARD DROPDOWN ELEMENTS
-   * =================================== */
-
-  $(document)
-    .on('click.dropdown.data-api', clearMenus)
-    .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
-    .on('click.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
-    .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
-
-}(window.jQuery);
-/* =========================================================
- * bootstrap-modal.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#modals
- * =========================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* MODAL CLASS DEFINITION
-  * ====================== */
-
-  var Modal = function (element, options) {
-    this.options = options
-    this.$element = $(element)
-      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
-    this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
-  }
-
-  Modal.prototype = {
-
-      constructor: Modal
-
-    , toggle: function () {
-        return this[!this.isShown ? 'show' : 'hide']()
-      }
-
-    , show: function () {
-        var that = this
-          , e = $.Event('show')
-
-        this.$element.trigger(e)
-
-        if (this.isShown || e.isDefaultPrevented()) return
-
-        this.isShown = true
-
-        this.escape()
-
-        this.backdrop(function () {
-          var transition = $.support.transition && that.$element.hasClass('fade')
-
-          if (!that.$element.parent().length) {
-            that.$element.appendTo(document.body) //don't move modals dom position
-          }
-
-          that.$element.show()
-
-          if (transition) {
-            that.$element[0].offsetWidth // force reflow
-          }
-
-          that.$element
-            .addClass('in')
-            .attr('aria-hidden', false)
-
-          that.enforceFocus()
-
-          transition ?
-            that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
-            that.$element.focus().trigger('shown')
-
-        })
-      }
-
-    , hide: function (e) {
-        e && e.preventDefault()
-
-        var that = this
-
-        e = $.Event('hide')
-
-        this.$element.trigger(e)
-
-        if (!this.isShown || e.isDefaultPrevented()) return
-
-        this.isShown = false
-
-        this.escape()
-
-        $(document).off('focusin.modal')
-
-        this.$element
-          .removeClass('in')
-          .attr('aria-hidden', true)
-
-        $.support.transition && this.$element.hasClass('fade') ?
-          this.hideWithTransition() :
-          this.hideModal()
-      }
-
-    , enforceFocus: function () {
-        var that = this
-        $(document).on('focusin.modal', function (e) {
-          if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
-            that.$element.focus()
-          }
-        })
-      }
-
-    , escape: function () {
-        var that = this
-        if (this.isShown && this.options.keyboard) {
-          this.$element.on('keyup.dismiss.modal', function ( e ) {
-            e.which == 27 && that.hide()
-          })
-        } else if (!this.isShown) {
-          this.$element.off('keyup.dismiss.modal')
-        }
-      }
-
-    , hideWithTransition: function () {
-        var that = this
-          , timeout = setTimeout(function () {
-              that.$element.off($.support.transition.end)
-              that.hideModal()
-            }, 500)
-
-        this.$element.one($.support.transition.end, function () {
-          clearTimeout(timeout)
-          that.hideModal()
-        })
-      }
-
-    , hideModal: function () {
-        var that = this
-        this.$element.hide()
-        this.backdrop(function () {
-          that.removeBackdrop()
-          that.$element.trigger('hidden')
-        })
-      }
-
-    , removeBackdrop: function () {
-        this.$backdrop && this.$backdrop.remove()
-        this.$backdrop = null
-      }
-
-    , backdrop: function (callback) {
-        var that = this
-          , animate = this.$element.hasClass('fade') ? 'fade' : ''
-
-        if (this.isShown && this.options.backdrop) {
-          var doAnimate = $.support.transition && animate
-
-          this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
-            .appendTo(document.body)
-
-          this.$backdrop.click(
-            this.options.backdrop == 'static' ?
-              $.proxy(this.$element[0].focus, this.$element[0])
-            : $.proxy(this.hide, this)
-          )
-
-          if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
-          this.$backdrop.addClass('in')
-
-          if (!callback) return
-
-          doAnimate ?
-            this.$backdrop.one($.support.transition.end, callback) :
-            callback()
-
-        } else if (!this.isShown && this.$backdrop) {
-          this.$backdrop.removeClass('in')
-
-          $.support.transition && this.$element.hasClass('fade')?
-            this.$backdrop.one($.support.transition.end, callback) :
-            callback()
-
-        } else if (callback) {
-          callback()
-        }
-      }
-  }
-
-
- /* MODAL PLUGIN DEFINITION
-  * ======================= */
-
-  var old = $.fn.modal
-
-  $.fn.modal = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('modal')
-        , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
-      if (!data) $this.data('modal', (data = new Modal(this, options)))
-      if (typeof option == 'string') data[option]()
-      else if (options.show) data.show()
-    })
-  }
-
-  $.fn.modal.defaults = {
-      backdrop: true
-    , keyboard: true
-    , show: true
-  }
-
-  $.fn.modal.Constructor = Modal
-
-
- /* MODAL NO CONFLICT
-  * ================= */
-
-  $.fn.modal.noConflict = function () {
-    $.fn.modal = old
-    return this
-  }
-
-
- /* MODAL DATA-API
-  * ============== */
-
-  $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
-    var $this = $(this)
-      , href = $this.attr('href')
-      , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
-      , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
-
-    e.preventDefault()
-
-    $target
-      .modal(option)
-      .one('hide', function () {
-        $this.focus()
-      })
-  })
-
-}(window.jQuery);
-/* ===========================================================
- * bootstrap-tooltip.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#tooltips
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ===========================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* TOOLTIP PUBLIC CLASS DEFINITION
-  * =============================== */
-
-  var Tooltip = function (element, options) {
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.prototype = {
-
-    constructor: Tooltip
-
-  , init: function (type, element, options) {
-      var eventIn
-        , eventOut
-        , triggers
-        , trigger
-        , i
-
-      this.type = type
-      this.$element = $(element)
-      this.options = this.getOptions(options)
-      this.enabled = true
-
-      triggers = this.options.trigger.split(' ')
-
-      for (i = triggers.length; i--;) {
-        trigger = triggers[i]
-        if (trigger == 'click') {
-          this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
-        } else if (trigger != 'manual') {
-          eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
-          eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
-          this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
-          this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
-        }
-      }
-
-      this.options.selector ?
-        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-        this.fixTitle()
-    }
-
-  , getOptions: function (options) {
-      options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
-
-      if (options.delay && typeof options.delay == 'number') {
-        options.delay = {
-          show: options.delay
-        , hide: options.delay
-        }
-      }
-
-      return options
-    }
-
-  , enter: function (e) {
-      var defaults = $.fn[this.type].defaults
-        , options = {}
-        , self
-
-      this._options && $.each(this._options, function (key, value) {
-        if (defaults[key] != value) options[key] = value
-      }, this)
-
-      self = $(e.currentTarget)[this.type](options).data(this.type)
-
-      if (!self.options.delay || !self.options.delay.show) return self.show()
-
-      clearTimeout(this.timeout)
-      self.hoverState = 'in'
-      this.timeout = setTimeout(function() {
-        if (self.hoverState == 'in') self.show()
-      }, self.options.delay.show)
-    }
-
-  , leave: function (e) {
-      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
-      if (this.timeout) clearTimeout(this.timeout)
-      if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-      self.hoverState = 'out'
-      this.timeout = setTimeout(function() {
-        if (self.hoverState == 'out') self.hide()
-      }, self.options.delay.hide)
-    }
-
-  , show: function () {
-      var $tip
-        , pos
-        , actualWidth
-        , actualHeight
-        , placement
-        , tp
-        , e = $.Event('show')
-
-      if (this.hasContent() && this.enabled) {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $tip = this.tip()
-        this.setContent()
-
-        if (this.options.animation) {
-          $tip.addClass('fade')
-        }
-
-        placement = typeof this.options.placement == 'function' ?
-          this.options.placement.call(this, $tip[0], this.$element[0]) :
-          this.options.placement
-
-        $tip
-          .detach()
-          .css({ top: 0, left: 0, display: 'block' })
-
-        this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
-        pos = this.getPosition()
-
-        actualWidth = $tip[0].offsetWidth
-        actualHeight = $tip[0].offsetHeight
-
-        switch (placement) {
-          case 'bottom':
-            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
-            break
-          case 'top':
-            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
-            break
-          case 'left':
-            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
-            break
-          case 'right':
-            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
-            break
-        }
-
-        this.applyPlacement(tp, placement)
-        this.$element.trigger('shown')
-      }
-    }
-
-  , applyPlacement: function(offset, placement){
-      var $tip = this.tip()
-        , width = $tip[0].offsetWidth
-        , height = $tip[0].offsetHeight
-        , actualWidth
-        , actualHeight
-        , delta
-        , replace
-
-      $tip
-        .offset(offset)
-        .addClass(placement)
-        .addClass('in')
-
-      actualWidth = $tip[0].offsetWidth
-      actualHeight = $tip[0].offsetHeight
-
-      if (placement == 'top' && actualHeight != height) {
-        offset.top = offset.top + height - actualHeight
-        replace = true
-      }
-
-      if (placement == 'bottom' || placement == 'top') {
-        delta = 0
-
-        if (offset.left < 0){
-          delta = offset.left * -2
-          offset.left = 0
-          $tip.offset(offset)
-          actualWidth = $tip[0].offsetWidth
-          actualHeight = $tip[0].offsetHeight
-        }
-
-        this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
-      } else {
-        this.replaceArrow(actualHeight - height, actualHeight, 'top')
-      }
-
-      if (replace) $tip.offset(offset)
-    }
-
-  , replaceArrow: function(delta, dimension, position){
-      this
-        .arrow()
-        .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
-    }
-
-  , setContent: function () {
-      var $tip = this.tip()
-        , title = this.getTitle()
-
-      $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
-      $tip.removeClass('fade in top bottom left right')
-    }
-
-  , hide: function () {
-      var that = this
-        , $tip = this.tip()
-        , e = $.Event('hide')
-
-      this.$element.trigger(e)
-      if (e.isDefaultPrevented()) return
-
-      $tip.removeClass('in')
-
-      function removeWithAnimation() {
-        var timeout = setTimeout(function () {
-          $tip.off($.support.transition.end).detach()
-        }, 500)
-
-        $tip.one($.support.transition.end, function () {
-          clearTimeout(timeout)
-          $tip.detach()
-        })
-      }
-
-      $.support.transition && this.$tip.hasClass('fade') ?
-        removeWithAnimation() :
-        $tip.detach()
-
-      this.$element.trigger('hidden')
-
-      return this
-    }
-
-  , fixTitle: function () {
-      var $e = this.$element
-      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
-        $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
-      }
-    }
-
-  , hasContent: function () {
-      return this.getTitle()
-    }
-
-  , getPosition: function () {
-      var el = this.$element[0]
-      return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
-        width: el.offsetWidth
-      , height: el.offsetHeight
-      }, this.$element.offset())
-    }
-
-  , getTitle: function () {
-      var title
-        , $e = this.$element
-        , o = this.options
-
-      title = $e.attr('data-original-title')
-        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-      return title
-    }
-
-  , tip: function () {
-      return this.$tip = this.$tip || $(this.options.template)
-    }
-
-  , arrow: function(){
-      return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
-    }
-
-  , validate: function () {
-      if (!this.$element[0].parentNode) {
-        this.hide()
-        this.$element = null
-        this.options = null
-      }
-    }
-
-  , enable: function () {
-      this.enabled = true
-    }
-
-  , disable: function () {
-      this.enabled = false
-    }
-
-  , toggleEnabled: function () {
-      this.enabled = !this.enabled
-    }
-
-  , toggle: function (e) {
-      var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
-      self.tip().hasClass('in') ? self.hide() : self.show()
-    }
-
-  , destroy: function () {
-      this.hide().$element.off('.' + this.type).removeData(this.type)
-    }
-
-  }
-
-
- /* TOOLTIP PLUGIN DEFINITION
-  * ========================= */
-
-  var old = $.fn.tooltip
-
-  $.fn.tooltip = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('tooltip')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tooltip.Constructor = Tooltip
-
-  $.fn.tooltip.defaults = {
-    animation: true
-  , placement: 'top'
-  , selector: false
-  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
-  , trigger: 'hover focus'
-  , title: ''
-  , delay: 0
-  , html: false
-  , container: false
-  }
-
-
- /* TOOLTIP NO CONFLICT
-  * =================== */
-
-  $.fn.tooltip.noConflict = function () {
-    $.fn.tooltip = old
-    return this
-  }
-
-}(window.jQuery);
-/* ===========================================================
- * bootstrap-popover.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#popovers
- * ===========================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * =========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* POPOVER PUBLIC CLASS DEFINITION
-  * =============================== */
-
-  var Popover = function (element, options) {
-    this.init('popover', element, options)
-  }
-
-
-  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
-     ========================================== */
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
-
-    constructor: Popover
-
-  , setContent: function () {
-      var $tip = this.tip()
-        , title = this.getTitle()
-        , content = this.getContent()
-
-      $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
-      $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
-
-      $tip.removeClass('fade top bottom left right in')
-    }
-
-  , hasContent: function () {
-      return this.getTitle() || this.getContent()
-    }
-
-  , getContent: function () {
-      var content
-        , $e = this.$element
-        , o = this.options
-
-      content = (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
-        || $e.attr('data-content')
-
-      return content
-    }
-
-  , tip: function () {
-      if (!this.$tip) {
-        this.$tip = $(this.options.template)
-      }
-      return this.$tip
-    }
-
-  , destroy: function () {
-      this.hide().$element.off('.' + this.type).removeData(this.type)
-    }
-
-  })
-
-
- /* POPOVER PLUGIN DEFINITION
-  * ======================= */
-
-  var old = $.fn.popover
-
-  $.fn.popover = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('popover')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.popover.Constructor = Popover
-
-  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
-    placement: 'right'
-  , trigger: 'click'
-  , content: ''
-  , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
-  })
-
-
- /* POPOVER NO CONFLICT
-  * =================== */
-
-  $.fn.popover.noConflict = function () {
-    $.fn.popover = old
-    return this
-  }
-
-}(window.jQuery);
-/* =============================================================
- * bootstrap-scrollspy.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#scrollspy
- * =============================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* SCROLLSPY CLASS DEFINITION
-  * ========================== */
-
-  function ScrollSpy(element, options) {
-    var process = $.proxy(this.process, this)
-      , $element = $(element).is('body') ? $(window) : $(element)
-      , href
-    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
-    this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
-    this.selector = (this.options.target
-      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-      || '') + ' .nav li > a'
-    this.$body = $('body')
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.prototype = {
-
-      constructor: ScrollSpy
-
-    , refresh: function () {
-        var self = this
-          , $targets
-
-        this.offsets = $([])
-        this.targets = $([])
-
-        $targets = this.$body
-          .find(this.selector)
-          .map(function () {
-            var $el = $(this)
-              , href = $el.data('target') || $el.attr('href')
-              , $href = /^#\w/.test(href) && $(href)
-            return ( $href
-              && $href.length
-              && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
-          })
-          .sort(function (a, b) { return a[0] - b[0] })
-          .each(function () {
-            self.offsets.push(this[0])
-            self.targets.push(this[1])
-          })
-      }
-
-    , process: function () {
-        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
-          , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
-          , maxScroll = scrollHeight - this.$scrollElement.height()
-          , offsets = this.offsets
-          , targets = this.targets
-          , activeTarget = this.activeTarget
-          , i
-
-        if (scrollTop >= maxScroll) {
-          return activeTarget != (i = targets.last()[0])
-            && this.activate ( i )
-        }
-
-        for (i = offsets.length; i--;) {
-          activeTarget != targets[i]
-            && scrollTop >= offsets[i]
-            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
-            && this.activate( targets[i] )
-        }
-      }
-
-    , activate: function (target) {
-        var active
-          , selector
-
-        this.activeTarget = target
-
-        $(this.selector)
-          .parent('.active')
-          .removeClass('active')
-
-        selector = this.selector
-          + '[data-target="' + target + '"],'
-          + this.selector + '[href="' + target + '"]'
-
-        active = $(selector)
-          .parent('li')
-          .addClass('active')
-
-        if (active.parent('.dropdown-menu').length)  {
-          active = active.closest('li.dropdown').addClass('active')
-        }
-
-        active.trigger('activate')
-      }
-
-  }
-
-
- /* SCROLLSPY PLUGIN DEFINITION
-  * =========================== */
-
-  var old = $.fn.scrollspy
-
-  $.fn.scrollspy = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('scrollspy')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.scrollspy.Constructor = ScrollSpy
-
-  $.fn.scrollspy.defaults = {
-    offset: 10
-  }
-
-
- /* SCROLLSPY NO CONFLICT
-  * ===================== */
-
-  $.fn.scrollspy.noConflict = function () {
-    $.fn.scrollspy = old
-    return this
-  }
-
-
- /* SCROLLSPY DATA-API
-  * ================== */
-
-  $(window).on('load', function () {
-    $('[data-spy="scroll"]').each(function () {
-      var $spy = $(this)
-      $spy.scrollspy($spy.data())
-    })
-  })
-
-}(window.jQuery);/* ========================================================
- * bootstrap-tab.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#tabs
- * ========================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ======================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* TAB CLASS DEFINITION
-  * ==================== */
-
-  var Tab = function (element) {
-    this.element = $(element)
-  }
-
-  Tab.prototype = {
-
-    constructor: Tab
-
-  , show: function () {
-      var $this = this.element
-        , $ul = $this.closest('ul:not(.dropdown-menu)')
-        , selector = $this.attr('data-target')
-        , previous
-        , $target
-        , e
-
-      if (!selector) {
-        selector = $this.attr('href')
-        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-      }
-
-      if ( $this.parent('li').hasClass('active') ) return
-
-      previous = $ul.find('.active:last a')[0]
-
-      e = $.Event('show', {
-        relatedTarget: previous
-      })
-
-      $this.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-
-      $target = $(selector)
-
-      this.activate($this.parent('li'), $ul)
-      this.activate($target, $target.parent(), function () {
-        $this.trigger({
-          type: 'shown'
-        , relatedTarget: previous
-        })
-      })
-    }
-
-  , activate: function ( element, container, callback) {
-      var $active = container.find('> .active')
-        , transition = callback
-            && $.support.transition
-            && $active.hasClass('fade')
-
-      function next() {
-        $active
-          .removeClass('active')
-          .find('> .dropdown-menu > .active')
-          .removeClass('active')
-
-        element.addClass('active')
-
-        if (transition) {
-          element[0].offsetWidth // reflow for transition
-          element.addClass('in')
-        } else {
-          element.removeClass('fade')
-        }
-
-        if ( element.parent('.dropdown-menu') ) {
-          element.closest('li.dropdown').addClass('active')
-        }
-
-        callback && callback()
-      }
-
-      transition ?
-        $active.one($.support.transition.end, next) :
-        next()
-
-      $active.removeClass('in')
-    }
-  }
-
-
- /* TAB PLUGIN DEFINITION
-  * ===================== */
-
-  var old = $.fn.tab
-
-  $.fn.tab = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('tab')
-      if (!data) $this.data('tab', (data = new Tab(this)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tab.Constructor = Tab
-
-
- /* TAB NO CONFLICT
-  * =============== */
-
-  $.fn.tab.noConflict = function () {
-    $.fn.tab = old
-    return this
-  }
-
-
- /* TAB DATA-API
-  * ============ */
-
-  $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
-    e.preventDefault()
-    $(this).tab('show')
-  })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-typeahead.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#typeahead
- * =============================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function($){
-
-  "use strict"; // jshint ;_;
-
-
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
-  * ================================= */
-
-  var Typeahead = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.typeahead.defaults, options)
-    this.matcher = this.options.matcher || this.matcher
-    this.sorter = this.options.sorter || this.sorter
-    this.highlighter = this.options.highlighter || this.highlighter
-    this.updater = this.options.updater || this.updater
-    this.source = this.options.source
-    this.$menu = $(this.options.menu)
-    this.shown = false
-    this.listen()
-  }
-
-  Typeahead.prototype = {
-
-    constructor: Typeahead
-
-  , select: function () {
-      var val = this.$menu.find('.active').attr('data-value')
-      this.$element
-        .val(this.updater(val))
-        .change()
-      return this.hide()
-    }
-
-  , updater: function (item) {
-      return item
-    }
-
-  , show: function () {
-      var pos = $.extend({}, this.$element.position(), {
-        height: this.$element[0].offsetHeight
-      })
-
-      this.$menu
-        .insertAfter(this.$element)
-        .css({
-          top: pos.top + pos.height
-        , left: pos.left
-        })
-        .show()
-
-      this.shown = true
-      return this
-    }
-
-  , hide: function () {
-      this.$menu.hide()
-      this.shown = false
-      return this
-    }
-
-  , lookup: function (event) {
-      var items
-
-      this.query = this.$element.val()
-
-      if (!this.query || this.query.length < this.options.minLength) {
-        return this.shown ? this.hide() : this
-      }
-
-      items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
-
-      return items ? this.process(items) : this
-    }
-
-  , process: function (items) {
-      var that = this
-
-      items = $.grep(items, function (item) {
-        return that.matcher(item)
-      })
-
-      items = this.sorter(items)
-
-      if (!items.length) {
-        return this.shown ? this.hide() : this
-      }
-
-      return this.render(items.slice(0, this.options.items)).show()
-    }
-
-  , matcher: function (item) {
-      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
-    }
-
-  , sorter: function (items) {
-      var beginswith = []
-        , caseSensitive = []
-        , caseInsensitive = []
-        , item
-
-      while (item = items.shift()) {
-        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
-        else if (~item.indexOf(this.query)) caseSensitive.push(item)
-        else caseInsensitive.push(item)
-      }
-
-      return beginswith.concat(caseSensitive, caseInsensitive)
-    }
-
-  , highlighter: function (item) {
-      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
-      return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
-        return '<strong>' + match + '</strong>'
-      })
-    }
-
-  , render: function (items) {
-      var that = this
-
-      items = $(items).map(function (i, item) {
-        i = $(that.options.item).attr('data-value', item)
-        i.find('a').html(that.highlighter(item))
-        return i[0]
-      })
-
-      items.first().addClass('active')
-      this.$menu.html(items)
-      return this
-    }
-
-  , next: function (event) {
-      var active = this.$menu.find('.active').removeClass('active')
-        , next = active.next()
-
-      if (!next.length) {
-        next = $(this.$menu.find('li')[0])
-      }
-
-      next.addClass('active')
-    }
-
-  , prev: function (event) {
-      var active = this.$menu.find('.active').removeClass('active')
-        , prev = active.prev()
-
-      if (!prev.length) {
-        prev = this.$menu.find('li').last()
-      }
-
-      prev.addClass('active')
-    }
-
-  , listen: function () {
-      this.$element
-        .on('focus',    $.proxy(this.focus, this))
-        .on('blur',     $.proxy(this.blur, this))
-        .on('keypress', $.proxy(this.keypress, this))
-        .on('keyup',    $.proxy(this.keyup, this))
-
-      if (this.eventSupported('keydown')) {
-        this.$element.on('keydown', $.proxy(this.keydown, this))
-      }
-
-      this.$menu
-        .on('click', $.proxy(this.click, this))
-        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
-        .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
-    }
-
-  , eventSupported: function(eventName) {
-      var isSupported = eventName in this.$element
-      if (!isSupported) {
-        this.$element.setAttribute(eventName, 'return;')
-        isSupported = typeof this.$element[eventName] === 'function'
-      }
-      return isSupported
-    }
-
-  , move: function (e) {
-      if (!this.shown) return
-
-      switch(e.keyCode) {
-        case 9: // tab
-        case 13: // enter
-        case 27: // escape
-          e.preventDefault()
-          break
-
-        case 38: // up arrow
-          e.preventDefault()
-          this.prev()
-          break
-
-        case 40: // down arrow
-          e.preventDefault()
-          this.next()
-          break
-      }
-
-      e.stopPropagation()
-    }
-
-  , keydown: function (e) {
-      this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
-      this.move(e)
-    }
-
-  , keypress: function (e) {
-      if (this.suppressKeyPressRepeat) return
-      this.move(e)
-    }
-
-  , keyup: function (e) {
-      switch(e.keyCode) {
-        case 40: // down arrow
-        case 38: // up arrow
-        case 16: // shift
-        case 17: // ctrl
-        case 18: // alt
-          break
-
-        case 9: // tab
-        case 13: // enter
-          if (!this.shown) return
-          this.select()
-          break
-
-        case 27: // escape
-          if (!this.shown) return
-          this.hide()
-          break
-
-        default:
-          this.lookup()
-      }
-
-      e.stopPropagation()
-      e.preventDefault()
-  }
-
-  , focus: function (e) {
-      this.focused = true
-    }
-
-  , blur: function (e) {
-      this.focused = false
-      if (!this.mousedover && this.shown) this.hide()
-    }
-
-  , click: function (e) {
-      e.stopPropagation()
-      e.preventDefault()
-      this.select()
-      this.$element.focus()
-    }
-
-  , mouseenter: function (e) {
-      this.mousedover = true
-      this.$menu.find('.active').removeClass('active')
-      $(e.currentTarget).addClass('active')
-    }
-
-  , mouseleave: function (e) {
-      this.mousedover = false
-      if (!this.focused && this.shown) this.hide()
-    }
-
-  }
-
-
-  /* TYPEAHEAD PLUGIN DEFINITION
-   * =========================== */
-
-  var old = $.fn.typeahead
-
-  $.fn.typeahead = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('typeahead')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.typeahead.defaults = {
-    source: []
-  , items: 8
-  , menu: '<ul class="typeahead dropdown-menu"></ul>'
-  , item: '<li><a href="#"></a></li>'
-  , minLength: 1
-  }
-
-  $.fn.typeahead.Constructor = Typeahead
-
-
- /* TYPEAHEAD NO CONFLICT
-  * =================== */
-
-  $.fn.typeahead.noConflict = function () {
-    $.fn.typeahead = old
-    return this
-  }
-
-
- /* TYPEAHEAD DATA-API
-  * ================== */
-
-  $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
-    var $this = $(this)
-    if ($this.data('typeahead')) return
-    $this.typeahead($this.data())
-  })
-
-}(window.jQuery);
-/* ==========================================================
- * bootstrap-affix.js v2.3.2
- * http://getbootstrap.com/2.3.2/javascript.html#affix
- * ==========================================================
- * Copyright 2013 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* AFFIX CLASS DEFINITION
-  * ====================== */
-
-  var Affix = function (element, options) {
-    this.options = $.extend({}, $.fn.affix.defaults, options)
-    this.$window = $(window)
-      .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
-      .on('click.affix.data-api',  $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
-    this.$element = $(element)
-    this.checkPosition()
-  }
-
-  Affix.prototype.checkPosition = function () {
-    if (!this.$element.is(':visible')) return
-
-    var scrollHeight = $(document).height()
-      , scrollTop = this.$window.scrollTop()
-      , position = this.$element.offset()
-      , offset = this.options.offset
-      , offsetBottom = offset.bottom
-      , offsetTop = offset.top
-      , reset = 'affix affix-top affix-bottom'
-      , affix
-
-    if (typeof offset != 'object') offsetBottom = offsetTop = offset
-    if (typeof offsetTop == 'function') offsetTop = offset.top()
-    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
-
-    affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
-      false    : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
-      'bottom' : offsetTop != null && scrollTop <= offsetTop ?
-      'top'    : false
-
-    if (this.affixed === affix) return
-
-    this.affixed = affix
-    this.unpin = affix == 'bottom' ? position.top - scrollTop : null
-
-    this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
-  }
-
-
- /* AFFIX PLUGIN DEFINITION
-  * ======================= */
-
-  var old = $.fn.affix
-
-  $.fn.affix = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('affix')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('affix', (data = new Affix(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.affix.Constructor = Affix
-
-  $.fn.affix.defaults = {
-    offset: 0
-  }
-
-
- /* AFFIX NO CONFLICT
-  * ================= */
-
-  $.fn.affix.noConflict = function () {
-    $.fn.affix = old
-    return this
-  }
-
-
- /* AFFIX DATA-API
-  * ============== */
-
-  $(window).on('load', function () {
-    $('[data-spy="affix"]').each(function () {
-      var $spy = $(this)
-        , data = $spy.data()
-
-      data.offset = data.offset || {}
-
-      data.offsetBottom && (data.offset.bottom = data.offsetBottom)
-      data.offsetTop && (data.offset.top = data.offsetTop)
-
-      $spy.affix(data)
-    })
-  })
-
-
-}(window.jQuery);
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/js/bootstrap.min.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/js/bootstrap.min.js
deleted file mode 100644
index 848258d380765521a1fc4c58e95d577ff6541745..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/bootstrap/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-* Bootstrap.js by @fat & @mdo
-* Copyright 2013 Twitter, Inc.
-* http://www.apache.org/licenses/LICENSE-2.0.txt
-*/
-!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('<div class="dropdown-backdrop"/>').insertBefore(e(this)).on("click",r),s.toggleClass("open")),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/chemical-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/chemical-browser.html
deleted file mode 100644
index bf4586294b3b3d1053a6480bb122ea46b82f8022..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/chemical-browser.html
+++ /dev/null
@@ -1,571 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All chemicals
-var chemicals = null;
-
-/// The chemicals that are currently being inspected
-var inspectedChemicals = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs(d)
-{
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	pairs.sort(function(a, b) { 
-		if (a[0] == b[0]) return 0;
-		// Sort in reverse lexicographical
-		return (a[0] < b[0]) ? -1 : 1;
-	});
-	return pairs;
-}
-
-/** Initialize the chemicals variable */
-function initializeChemicals(result)
-{
-	// Split the chemicals into two groups, the ones that start with FRC in their sample name and the other ones.
-	var frcChemicals = [], otherChemicals = [];
-	var frcRegex = /^FRC[0-9]+/;
-	frcRegex.compile(frcRegex);
-	result.forEach(function(sample) { 
-		if (frcRegex.test(sample.code)) {
-			frcChemicals.push(sample);
-		} else {
-			otherChemicals.push(sample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherChemicals.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frcChemicals.sort(function(a, b) {
-		// Sort based on the FRC number
-		var frcNumberA = parseInt(a.code.substring(3));
-		var frcNumberB = parseInt(b.code.substring(3));
-		return (frcNumberA < frcNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of chemicals
-	chemicals = frcChemicals.concat(otherChemicals);
-}
-
-/** Set the size of the chemical-table based on whether or not inspectors are visible */
-function resizeChemicalTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	if (inspectedChemicals.length > 0) {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var chemicalTableTransition = d3.selectAll('div.chemical-table-data-cell');
-	chemicalTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectChemical(chemical)
-{
-	if (inspectedChemicals.indexOf(chemical) < 0) {
-		inspectedChemicals.push(chemical);
-		openbisServer.listDataSetsForSample(chemical, true, dataset.curry(chemical));
-	}
-	resizeChemicalTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(chemical)
-{
-	var index = inspectedChemicals.indexOf(chemical);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedChemicals.splice(index, 1);
-	resizeChemicalTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedChemicals, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs(d.properties) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-			
-/*
-	// Add a caption, but make sure there is just one (this does not work with select())
-	downloadTable.selectAll("caption")
-			.data(downloadTableCaption)
-		.enter()
-			.append("caption").text(function(d) { return d; });
-			
-	// We just want to see non-directories here
-	var downloadTableRow = downloadTable.selectAll("tr").data(filesForSequencingSample, function(d) { return d.pathInDataSet });
-	downloadTableRow
-		.enter()
-			.append("tr")
-				.append("td")
-				.style("text-align", "left")
-				.on("click", downloadTableFile)
-				.text(function(d) { return d.label; });
-	downloadTableRow
-		.exit()
-			.transition()
-				.duration(duration)
-				.style("opacity", "0")
-				.remove();
-	
-*/
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeChemicals(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (chemicals.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-		var selection = d3.select("#vis").select("#chemical-table").selectAll("tr.chemical-table-data").data(chemicals);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "chemical-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.on("click", inspectChemical)
-		.selectAll("td").data(function(sample) {
-			var tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.SUPPLIER, sample.properties.ARTICLE_NUMBER, sample.properties.LOCAL_ID, sample.properties.STORAGE];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "chemical-table-data-cell")
-			.html(String)
-	
-			$('a').click(function(e){
-			   e.stopPropagation();
-			});
-}
-
-function chemicalFilter(filter, property, element, index, array) {
-
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(nameFilterText, supplierFilterText, artnumFilterText, locidFilterText, storageFilterText)
-{
-	if (nameFilterText == undefined) 
-	{
-		nameFilterText = "";
-	}
-	
-	if (supplierFilterText == undefined) 
-	{
-		supplierFilterText = "";
-	}
-	
-	if (artnumFilterText == undefined) 
-	{
-		artnumFilterText = "";
-	}
-	
-	if (locidFilterText == undefined) 
-	{
-		locidFilterText = "";
-	}
-	
-	if (storageFilterText == undefined) 
-	{
-		storageFilterText = "";
-	}
-	
-	
-	
-	var displayedChemicals = chemicals.filter(chemicalFilter.curry(nameFilterText, "NAME"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(supplierFilterText, "SUPPLIER"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(artnumFilterText, "ARTICLE_NUMBER"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(locidFilterText, "LOCAL_ID"));
-	displayedChemicals = displayedChemicals.filter(chemicalFilter.curry(storageFilterText, "STORAGE"));
-	
-	
-	
-
-	var selection2 = d3.select("#vis").select("#chemical-table").selectAll("tr.chemical-table-data").data(chemicals);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedChemicals) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-			
-		
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
- 
- function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "CHEMICAL" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamples(sampleCriteria, displayReturnedSamples);
-
-}
- 
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#name_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});	
-	
-	$('#supplier_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});	
-	
-		$('#artnum_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});	
-	
-	$('#locid_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});		
-	
-
-	$('#storage_filter').keyup(function() {
-		visualize($('#name_filter').val(), $('#supplier_filter').val(), $('#artnum_filter').val(), $('#locid_filter').val(), $('#storage_filter').val());
-	});		
-
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-
-</script>
-
-</head>
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Chemicals</h1>
-		</center>
-	
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered">
-								<thead>
-									<tr>
-										<td></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Chemical filter" id="name_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Supplier filter" id="supplier_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Art. Number filter" id="artnum_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Local ID filter" id="locid_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Storage filter" id="storage_filter" type="text"></td>
-									</tr>
-									<tr class="chemical-table-header"><th>Code</th><th>Name</th><th>Supplier</th><th>Art. Number</th><th>Local ID</th><th>Storage</th><th></th></tr>
-								</thead>
-								<tbody id='chemical-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/css/style.css b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/css/style.css
deleted file mode 100644
index bef570b1848dbb36d9d64f083c17457915bdae3f..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/css/style.css
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Inspector */
-
-div.inspector {
-	font: 10px "Verdana", sans-serif;
-	padding: 10px;
-	border: 1px solid gray;
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.property {
-  font-size: 10px;
-  font-weight: normal;
-}
-
-.properties {
-  padding-top:10px;
-	width: 100%;	
-}
-
-.properties td:nth-child(odd) {
-  background-color:#DDDDDD;
-  width:50%;
-}
-
-.properties td:nth-child(even) {
-  background-color:#fbfbfb;
-  width:70%;
-}
-
-.close {
-	float: right;
-}
-
-.close:hover {
-	opacity: 0.5;
-	color: #AAA;
-	cursor: pointer;
-}
-
-.downloads {
-	color: black;
-	background-color:#DDDDDD;;
-}
-
-table.downloads {
-  font-family: "Trebuchet MS", sans-serif;
-	font-size: 14px;
-	table-layout: fixed;
-	border-collapse: collapse;
-	margin: 0px;
-	padding: 0px;
-}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/enzyme-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/enzyme-browser.html
deleted file mode 100644
index 5ae526e3065e5930a4b23d8eaa50d2a8b723763d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/enzyme-browser.html
+++ /dev/null
@@ -1,799 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Enzymes</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="enzyme-table-header"><th>Code</th><th>Name</th><th>Supplier</th><th>Art. Number</th><th>Kit Including</th><th></th></tr>
-								</thead>
-								<tbody id='enzyme-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All enzymes
-var enzymes = null;
-
-/// The enzymes that are currently being inspected
-var inspectedenzymes = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    enzyme = objectOrId;
-  } else {
-  	enzyme = enzymesById[objectOrId];
-  }
-  
-  return enzyme;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the enzymes variable */
-function initializeenzymes(result)
-{
-      // Construct a map of all enzymes by id
-  enzymesById = {};
-
-	// Split the enzymes into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpenzymes = [], otherenzymes = [];
-	var frpRegex = /^FRE[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        enzymesById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the enzymesById map
-	    theSample = enzymesById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpenzymes.push(theSample);
-		} else {
-			otherenzymes.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherenzymes.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpenzymes.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(4));
-		var frpNumberB = parseInt(b.code.substring(4));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of enzymes
-	enzymes = frpenzymes.concat(otherenzymes);
-}
-
-
-
-/** Set the size of the enzyme-table based on whether or not inspectors are visible */
-function resizeenzymeTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var enzymeTableTransition = d3.selectAll('div.enzyme-table-data-cell');
-	enzymeTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectenzyme(enzyme)
-{
-	if (inspectedenzymes.indexOf(enzyme) < 0) {
-		inspectedenzymes.push(enzyme);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var enzymeToSend = $.extend({}, enzyme);
-		delete enzymeToSend.parents;
-		delete enzymeToSend.children;
-		openbisServer.listDataSetsForSample(enzymeToSend, true, dataset.curry(enzyme));
-	}
-	resizeenzymeTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(enzyme)
-{
-	var index = inspectedenzymes.indexOf(enzyme);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedenzymes.splice(index, 1);
-	resizeenzymeTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedenzymes, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectenzyme(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectenzyme(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeenzymes(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (enzymes.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#enzyme-table").selectAll("tr.enzyme-table-data").data(enzymes);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "enzyme-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectenzyme)
-		.selectAll("td").data(function(sample) {
-			tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.SUPPLIER, sample.properties.ARTICLE_NUMBER, sample.properties.KIT];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "enzyme-table-data-cell")
-			.html(String)
-
-	$('a').click(function(e){
-	  e.stopPropagation();
-	});
-}
-
-function enzymeFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, enzymeNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (enzymeNameFilterText == undefined) 
-	{
-		enzymeNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedenzymes = enzymes.filter(enzymeFilter.curry(ownerFilterText, "OWNER"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(enzymeNameFilterText, "ENZYME_NAME"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedenzymes = displayedenzymes.filter(enzymeFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#enzyme-table").selectAll("tr.enzyme-table-data").data(enzymes);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedenzymes) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "ENZYME" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#enzymeName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#enzymeName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/general_protocol-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/general_protocol-browser.html
deleted file mode 100644
index a8b0e4de919cce733f2a36c8dc60b2f088e6f2bf..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/general_protocol-browser.html
+++ /dev/null
@@ -1,1060 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">General Protocols</h1>
-		</center>
-		
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; overflow: auto;">
-			  		  		<table style="float: left" class="table table-striped table-bordered table-hover">
-								<thead>
-			  			  			<tr class="protocol-table-header"><th>Code</th><th>Name</th><th>For What</th><th>Protocol Type</th><th>Publication</th><th></th></tr>
-								</thead>
-								<tbody id='protocol-table'></tbody>
-			  				</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-			
-		</div>
-	</div>
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All protocol
-var protocols = null;
-
-/// The protocol that are currently being inspected
-var inspectedprotocols = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				
-			}	  
-			
-			   
-}								
-	
-	
-		var protocolValue = sample.properties.GENERAL_PROTOCOL;
-  	sample.properties.GENERAL_PROTOCOL_PARENTS = [];
-	
-		if (!xmlValueRegex.test(protocolValue))
-		return;
-
- 	  globalValue =protocolValue;
-		var protocolXml = xmlParser.parseFromString(protocolValue, "text/xml");
-	
-	
-		for (i=1; i < protocolXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = protocolXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("quantity") != null)  {
-	 	  				 var quantity = sampleNode.attributes.getNamedItem("quantity").value;
-						}	 		   		
-						else{
-								var quantity = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var GENERAL_PROTOCOL_PARENTS = null;
-			
-				
-				GENERAL_PROTOCOL_PARENTS = "\n\n    " +code  +  "(" + name + ")" + quantity ;
-				
-				
-				
-				sample.properties.GENERAL_PROTOCOL_PARENTS.push(GENERAL_PROTOCOL_PARENTS);
-				
-				
-			}	  
-			
-			   
-}									
-	
-
-	
-};
-
-function reformatString(sample)
-{
-
-
-  		sample.properties.WHAT_FOR = [];
-  		console.log(sample.properties.FOR_WHAT)
- 	
-			if (sample.properties.FOR_WHAT != "undefined") {
-				newArray = sample.properties.FOR_WHAT.split(/\d/);
-				for(i=0; i<newArray.length; i++) {
-   				WHAT_FOR = i+' '+newArray[i]+ "\n";
-   				sample.properties.WHAT_FOR.push(WHAT_FOR)
-   				
-				}
-				
-			console.log(sample.properties.WHAT_FOR)
-			//sample.properties.WHAT_FOR.push(sample.properties.WHAT_FOR)
-			}
-			
-			
-
-}
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION", "MATERIALS", "ORGANISM"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["PROCEDURE",  "PROTOCOL_EVALUATION", "DETAILS", "COMMENTS", "PUBLICATION"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS", "GENERAL_PROTOCOL_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","SUGGESTIONS", "PROTOCOL_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    protocol = objectOrId;
-  } else {
-  	protocol = protocolsById[objectOrId];
-  }
-  
-  return protocol;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the protocols variable */
-function initializeprotocols(result)
-{
-      // Construct a map of all protocols by id
-  protocolsById = {};
-
-	// Split the protocols into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpprotocols = [], otherprotocols = [];
-	var frpRegex = /^FRPROT[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        protocolsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the protocolsById map
-	    theSample = protocolsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpprotocols.push(theSample);
-		} else {
-			otherprotocols.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		reformatString(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherprotocols.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpprotocols.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(6));
-		var frpNumberB = parseInt(b.code.substring(6));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of protocols
-	protocols = frpprotocols.concat(otherprotocols);
-}
-
-
-
-
-/** Set the size of the protocol-table based on whether or not inspectors are visible */
-function resizeprotocolTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var protocolTableTransition = d3.selectAll('div.protocol-table-data-cell');
-	protocolTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectprotocol(protocol)
-{
-	if (inspectedprotocols.indexOf(protocol) < 0) {
-		inspectedprotocols.push(protocol);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var protocolToSend = $.extend({}, protocol);
-		delete protocolToSend.parents;
-		delete protocolToSend.children;
-	
-	}
-	resizeprotocolTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(protocol)
-{
-	var index = inspectedprotocols.indexOf(protocol);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedprotocols.splice(index, 1);
-	resizeprotocolTable();
-	updateInspectors(1000);
-}
-
-
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedprotocols, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectprotocol(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectprotocol(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeprotocols(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (protocols.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#protocol-table").selectAll("tr.protocol-table-data").data(protocols);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "protocol-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectprotocol)
-		.selectAll("td").data(function(sample) {
-			var tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.WHAT_FOR, sample.properties.PROTOCOL_TYPE, sample.properties.PUBLICATION];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return  tableFields;
-		})
-		.enter()
-		.append("td")
-		.append("div")
-		.attr("class", "protocol-table-data-cell")
-		.html(String)
-
-		$('a').click(function(e){
-		   e.stopPropagation();
-		});
-}
-
-function protocolFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#protocol-table").selectAll("tr.protocol-table-data").data(protocols);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedprotocols) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "GENERAL_PROTOCOL" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/browser-icon-chrome.png b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/browser-icon-chrome.png
deleted file mode 100644
index 8c846c54e0d623fab50aac814ba547b5f621c9cc..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/browser-icon-chrome.png and /dev/null differ
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/browser-icon-firefox.png b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/browser-icon-firefox.png
deleted file mode 100644
index 3dd68b11335ed2a0c5554335980a0ab4b51c8747..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/browser-icon-firefox.png and /dev/null differ
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.png b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.png
deleted file mode 100644
index 87ae5e81899908f3968ea230205322dc19ff4ee5..0000000000000000000000000000000000000000
Binary files a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/images/openBIS_Logo.png and /dev/null differ
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/index.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/index.html
deleted file mode 100644
index c4354285a057bcb690a8c36ad5e7be58136dd2b2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
-<head>
-	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-	<meta HTTP-EQUIV="REFRESH" content="0; url=search-browser.html">
-</head>
-<body>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/common.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/common.js
deleted file mode 100644
index c3fe7944bfd7c34db8c1b927168ba74608ea1973..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/common.js
+++ /dev/null
@@ -1,122 +0,0 @@
-var openbisUrl = 'https://localhost:8443/';
-var dssUrl = 'https://localhost:8444/datastore_server';
-
-function dataset(sample, data) {
-   if(data.result){
-      for (var i = 0; i < data.result.length; i++) {
-        console.log(data.result)
-        openbisServer.listFilesForDataSet(data.result[i].code, "/", true, filelist.curry(sample, data.result[i]));
-      }
-   }
-}
-
-function filelist(sample, dataset, files) {
-	for (var i in files.result) {
-		if (!files.result[i].isDirectory) {
-			var inspector = inspectors.select("#"+sample.code+"_INSPECTOR");
-			var pathInDataSet = files.result[i].pathInDataSet;
-			
-			if(pathInDataSet){
-				var downloadUrl = dssUrl+"/"+dataset.code+"/"+pathInDataSet+"?sessionID=" + openbisServer.getSession();
-				inspector.select("td.data_sets").append("a").attr("href", downloadUrl).text(pathInDataSet)
-				inspector.select("td.data_sets").append("br");
-				
-				if (/\.svg$/.test(pathInDataSet)) {
-						// Retrieve the svg file and inject it into the DOM
-						d3.xml(downloadUrl, "image/svg+xml", function(xml) {
-							var importedNode = document.importNode(xml.documentElement, true);
-							d3.select(importedNode)
-								.attr("width", inspectorsWidth - 20)
-								.attr("height", inspectorsWidth - 20)
-								.attr("viewBox", "200 200 650 650");
-							inspector.node().appendChild(importedNode);
-						});
-				}
-			}
-		}
-	}
-}
-
-//
-// UI Related
-//
-
-function createTableFromProperties() {
-	var tableTemplate = "<table style='width:100%' class='table table-striped table-bordered table-hover' id=\"yeast-table\"><thead>";
-	
-	tableTemplate += "<tr style='border:none; border-collapse:collapse;'><td></td>";
-	for(var i=0; i<SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME.length;i++) {
-		tableTemplate += "<td style='border:none; border-collapse:collapse;'><input placeholder='"+SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME[i]+" filter' style=\"width: 90%\" id=\""+SAMPLE_TYPE_PROPERTIES[i]+"_filter\" type=\"text\"></td>";
-	}
-	tableTemplate += "</tr>";
-	
-	tableTemplate += "<tr class=\"yeast-table-header\"><th>Code</th>";
-	for(var i=0; i<SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME.length;i++) {
-		tableTemplate += "<th>" + SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME[i]+ "</th>";
-	}
-	tableTemplate += "<th></th></tr></thead><tbody id='sample-data-holder'></tbody></table>";
-	
-	$("#tableContainer").empty();
-	$("#tableContainer").append(tableTemplate);
-	
-	for(var i=0;i<SAMPLE_TYPE_PROPERTIES.length;i++) {
-		$('#'+SAMPLE_TYPE_PROPERTIES[i]+'_filter').keyup(function() {
-			var filterResults = [];
-			for(var i=0;i<SAMPLE_TYPE_PROPERTIES.length;i++) {
-				filterResults[i] = $('#'+SAMPLE_TYPE_PROPERTIES[i]+'_filter').val();
-			}
-			
-			visualize(
-				filterResults
-			);
-		});	
-	}
-}
-
-function populateMenuNew() {
-	
-	var menu = "";
-		menu += "<span id='button-group'>	<button class='btn' id='logout-button' style='position: absolute; right:10px; top:10px;'>Logout</button> </span>";
-		menu += "<center>";
-		menu += "<span id='search_browser'> <a style='width:110px; margin:5px;' class='btn' href='search-browser.html'>Search</a> </span>";
-		menu += "<span id='bacteria_browser'> <a style='width:110px; margin:5px;' class='btn' href='bacteria-browser.html'>Bacteria</a> </span>";
-		menu += "<span id='chemical_browser'> <a style='width:110px; margin:5px;' class='btn' href='chemical-browser.html'>Chemicals</a> </span>";
-		menu += "<span id='antibody_browser'> <a style='width:110px; margin:5px;' class='btn' href='antibody-browser.html'>Antibodies</a> </span>";
-		menu += "<span id='media_browser'> <a style='width:110px; margin:5px;' class='btn' href='media-browser.html'>Media</a> </span>";
-		menu += "<span id='buffer_browser'> <a style='width:110px; margin:5px;' class='btn' href='solutions_buffers-browser.html'>Solutions Buffers</a> </span>";
-		menu += "<span id='enzyme_browser'> <a style='width:110px; margin:5px;' class='btn' href='enzyme-browser.html'>Enzymes</a> </span>";
-		menu += "<span id='oligo_browser'> <a style='width:110px; margin:5px;' class='btn' href='oligo-browser.html'>Oligos</a> </span>";
-		menu += "<span id='plasmid_browser'> <a style='width:110px; margin:5px;' class='btn' href='plasmid-browser.html'>Plasmids</a> </span>";
-		menu += "<span id='yeast_browser'> <a style='width:110px; margin:5px;' class='btn' href='yeast-browser.html'>Yeasts</a> </span>";
-		menu += "<span id='protocol_browser'> <a style='width:110px; margin:5px;' class='btn' href='general_protocol-browser.html'>Protocols</a> </span>";
-		menu += "<span id='pcr_browser'> <a style='width:110px; margin:5px;' class='btn' href='pcr-browser.html'>PCR</a> </span>";
-		menu += "<span id='western_blotting_browser'> <a style='width:110px; margin:5px;' class='btn' href='western_blotting-browser.html'>Western Blotting</a> </span>";
-		menu += "</center>";
-		
-	$("#sectionsContainer").empty();
-	$("#sectionsContainer").append(menu);
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-}
-
-function showEditWindowForSample(code, permId) {
-	//Add iframe
-//	if ($("#editFrame").length == 0){
-//		$('#containerForIframe').append("<iframe style='width:800px; height:500px;' id='editFrame'></iframe>");
-//	}
-	
-	//Load iframe content
-	//Working Example: https://sprint-openbis.ethz.ch/openbis/?viewMode=embedded#action=EDITING&entity=SAMPLE&code=A123&permId=20091006093948112-162773
-	var editURLTemplate = openbisUrl + "openbis/?viewMode=embedded#action=EDITING&entity=SAMPLE";
-	var codeParam = "&code="+code;
-	var permId = "&permId="+permId;
-	var sessionId = "&sessionID="+openbisServer.getSession();
-	window.open(editURLTemplate+codeParam+permId+sessionId,'Edit Sample',null);
-	//$('#editFrame').attr('src', editURLTemplate+codeParam+permId);
-}
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.js
deleted file mode 100755
index 13abb6dbc6f9665c005209b8e09d0dc97266d1f7..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.js
+++ /dev/null
@@ -1,4013 +0,0 @@
-(function(){if (!Date.now) Date.now = function() {
-  return +new Date;
-};
-try {
-  document.createElement("div").style.setProperty("opacity", 0, "");
-} catch (error) {
-  var d3_style_prototype = CSSStyleDeclaration.prototype,
-      d3_style_setProperty = d3_style_prototype.setProperty;
-  d3_style_prototype.setProperty = function(name, value, priority) {
-    d3_style_setProperty.call(this, name, value + "", priority);
-  };
-}
-d3 = {version: "2.1.3"}; // semver
-var d3_arraySubclass = [].__proto__?
-
-// Until ECMAScript supports array subclassing, prototype injection works well.
-function(array, prototype) {
-  array.__proto__ = prototype;
-}:
-
-// And if your browser doesn't support __proto__, we'll use direct extension.
-function(array, prototype) {
-  for (var property in prototype) array[property] = prototype[property];
-};
-function d3_this() {
-  return this;
-}
-d3.functor = function(v) {
-  return typeof v === "function" ? v : function() { return v; };
-};
-// A getter-setter method that preserves the appropriate `this` context.
-d3.rebind = function(object, method) {
-  return function() {
-    var x = method.apply(object, arguments);
-    return arguments.length ? object : x;
-  };
-};
-d3.ascending = function(a, b) {
-  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-};
-d3.descending = function(a, b) {
-  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-};
-d3.min = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
-  }
-  return a;
-};
-d3.max = function(array, f) {
-  var i = -1,
-      n = array.length,
-      a,
-      b;
-  if (arguments.length === 1) {
-    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-  } else {
-    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
-    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
-  }
-  return a;
-};
-d3.sum = function(array, f) {
-  var s = 0,
-      n = array.length,
-      a,
-      i = -1;
-
-  if (arguments.length === 1) {
-    while (++i < n) if (!isNaN(a = +array[i])) s += a;
-  } else {
-    while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
-  }
-
-  return s;
-};
-// R-7 per <http://en.wikipedia.org/wiki/Quantile>
-d3.quantile = function(values, p) {
-  var H = (values.length - 1) * p + 1,
-      h = Math.floor(H),
-      v = values[h - 1],
-      e = H - h;
-  return e ? v + e * (values[h] - v) : v;
-};
-d3.zip = function() {
-  if (!(n = arguments.length)) return [];
-  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
-    for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
-      zip[j] = arguments[j][i];
-    }
-  }
-  return zips;
-};
-
-function d3_zipLength(d) {
-  return d.length;
-}
-// Locate the insertion point for x in a to maintain sorted order. The
-// arguments lo and hi may be used to specify a subset of the array which should
-// be considered; by default the entire array is used. If x is already present
-// in a, the insertion point will be before (to the left of) any existing
-// entries. The return value is suitable for use as the first argument to
-// `array.splice` assuming that a is already sorted.
-//
-// The returned insertion point i partitions the array a into two halves so that
-// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi]
-// for the right side.
-d3.bisectLeft = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (a[mid] < x) lo = mid + 1;
-    else hi = mid;
-  }
-  return lo;
-};
-
-// Similar to bisectLeft, but returns an insertion point which comes after (to
-// the right of) any existing entries of x in a.
-//
-// The returned insertion point i partitions the array into two halves so that
-// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi]
-// for the right side.
-d3.bisect =
-d3.bisectRight = function(a, x, lo, hi) {
-  if (arguments.length < 3) lo = 0;
-  if (arguments.length < 4) hi = a.length;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (x < a[mid]) hi = mid;
-    else lo = mid + 1;
-  }
-  return lo;
-};
-d3.first = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) > 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.last = function(array, f) {
-  var i = 0,
-      n = array.length,
-      a = array[0],
-      b;
-  if (arguments.length === 1) f = d3.ascending;
-  while (++i < n) {
-    if (f.call(array, a, b = array[i]) <= 0) {
-      a = b;
-    }
-  }
-  return a;
-};
-d3.nest = function() {
-  var nest = {},
-      keys = [],
-      sortKeys = [],
-      sortValues,
-      rollup;
-
-  function map(array, depth) {
-    if (depth >= keys.length) return rollup
-        ? rollup.call(nest, array) : (sortValues
-        ? array.sort(sortValues)
-        : array);
-
-    var i = -1,
-        n = array.length,
-        key = keys[depth++],
-        keyValue,
-        object,
-        o = {};
-
-    while (++i < n) {
-      if ((keyValue = key(object = array[i])) in o) {
-        o[keyValue].push(object);
-      } else {
-        o[keyValue] = [object];
-      }
-    }
-
-    for (keyValue in o) {
-      o[keyValue] = map(o[keyValue], depth);
-    }
-
-    return o;
-  }
-
-  function entries(map, depth) {
-    if (depth >= keys.length) return map;
-
-    var a = [],
-        sortKey = sortKeys[depth++],
-        key;
-
-    for (key in map) {
-      a.push({key: key, values: entries(map[key], depth)});
-    }
-
-    if (sortKey) a.sort(function(a, b) {
-      return sortKey(a.key, b.key);
-    });
-
-    return a;
-  }
-
-  nest.map = function(array) {
-    return map(array, 0);
-  };
-
-  nest.entries = function(array) {
-    return entries(map(array, 0), 0);
-  };
-
-  nest.key = function(d) {
-    keys.push(d);
-    return nest;
-  };
-
-  // Specifies the order for the most-recently specified key.
-  // Note: only applies to entries. Map keys are unordered!
-  nest.sortKeys = function(order) {
-    sortKeys[keys.length - 1] = order;
-    return nest;
-  };
-
-  // Specifies the order for leaf values.
-  // Applies to both maps and entries array.
-  nest.sortValues = function(order) {
-    sortValues = order;
-    return nest;
-  };
-
-  nest.rollup = function(f) {
-    rollup = f;
-    return nest;
-  };
-
-  return nest;
-};
-d3.keys = function(map) {
-  var keys = [];
-  for (var key in map) keys.push(key);
-  return keys;
-};
-d3.values = function(map) {
-  var values = [];
-  for (var key in map) values.push(map[key]);
-  return values;
-};
-d3.entries = function(map) {
-  var entries = [];
-  for (var key in map) entries.push({key: key, value: map[key]});
-  return entries;
-};
-d3.permute = function(array, indexes) {
-  var permutes = [],
-      i = -1,
-      n = indexes.length;
-  while (++i < n) permutes[i] = array[indexes[i]];
-  return permutes;
-};
-d3.merge = function(arrays) {
-  return Array.prototype.concat.apply([], arrays);
-};
-d3.split = function(array, f) {
-  var arrays = [],
-      values = [],
-      value,
-      i = -1,
-      n = array.length;
-  if (arguments.length < 2) f = d3_splitter;
-  while (++i < n) {
-    if (f.call(values, value = array[i], i)) {
-      values = [];
-    } else {
-      if (!values.length) arrays.push(values);
-      values.push(value);
-    }
-  }
-  return arrays;
-};
-
-function d3_splitter(d) {
-  return d == null;
-}
-function d3_collapse(s) {
-  return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
-}
-/**
- * @param {number} start
- * @param {number=} stop
- * @param {number=} step
- */
-d3.range = function(start, stop, step) {
-  if (arguments.length < 3) {
-    step = 1;
-    if (arguments.length < 2) {
-      stop = start;
-      start = 0;
-    }
-  }
-  if ((stop - start) / step == Infinity) throw new Error("infinite range");
-  var range = [],
-       i = -1,
-       j;
-  if (step < 0) while ((j = start + step * ++i) > stop) range.push(j);
-  else while ((j = start + step * ++i) < stop) range.push(j);
-  return range;
-};
-d3.requote = function(s) {
-  return s.replace(d3_requote_re, "\\$&");
-};
-
-var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
-d3.round = function(x, n) {
-  return n
-      ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n)
-      : Math.round(x);
-};
-d3.xhr = function(url, mime, callback) {
-  var req = new XMLHttpRequest;
-  if (arguments.length < 3) callback = mime;
-  else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
-  req.open("GET", url, true);
-  req.onreadystatechange = function() {
-    if (req.readyState === 4) callback(req.status < 300 ? req : null);
-  };
-  req.send(null);
-};
-d3.text = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseText);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.json = function(url, callback) {
-  d3.text(url, "application/json", function(text) {
-    callback(text ? JSON.parse(text) : null);
-  });
-};
-d3.html = function(url, callback) {
-  d3.text(url, "text/html", function(text) {
-    if (text != null) { // Treat empty string as valid HTML.
-      var range = document.createRange();
-      range.selectNode(document.body);
-      text = range.createContextualFragment(text);
-    }
-    callback(text);
-  });
-};
-d3.xml = function(url, mime, callback) {
-  function ready(req) {
-    callback(req && req.responseXML);
-  }
-  if (arguments.length < 3) {
-    callback = mime;
-    mime = null;
-  }
-  d3.xhr(url, mime, ready);
-};
-d3.ns = {
-
-  prefix: {
-    svg: "http://www.w3.org/2000/svg",
-    xhtml: "http://www.w3.org/1999/xhtml",
-    xlink: "http://www.w3.org/1999/xlink",
-    xml: "http://www.w3.org/XML/1998/namespace",
-    xmlns: "http://www.w3.org/2000/xmlns/"
-  },
-
-  qualify: function(name) {
-    var i = name.indexOf(":");
-    return i < 0 ? name : {
-      space: d3.ns.prefix[name.substring(0, i)],
-      local: name.substring(i + 1)
-    };
-  }
-
-};
-/** @param {...string} types */
-d3.dispatch = function(types) {
-  var dispatch = {},
-      type;
-  for (var i = 0, n = arguments.length; i < n; i++) {
-    type = arguments[i];
-    dispatch[type] = d3_dispatch(type);
-  }
-  return dispatch;
-};
-
-function d3_dispatch(type) {
-  var dispatch = {},
-      listeners = [];
-
-  dispatch.add = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      if (listeners[i].listener == listener) return dispatch; // already registered
-    }
-    listeners.push({listener: listener, on: true});
-    return dispatch;
-  };
-
-  dispatch.remove = function(listener) {
-    for (var i = 0; i < listeners.length; i++) {
-      var l = listeners[i];
-      if (l.listener == listener) {
-        l.on = false;
-        listeners = listeners.slice(0, i).concat(listeners.slice(i + 1));
-        break;
-      }
-    }
-    return dispatch;
-  };
-
-  dispatch.dispatch = function() {
-    var ls = listeners; // defensive reference
-    for (var i = 0, n = ls.length; i < n; i++) {
-      var l = ls[i];
-      if (l.on) l.listener.apply(this, arguments);
-    }
-  };
-
-  return dispatch;
-};
-// TODO align
-d3.format = function(specifier) {
-  var match = d3_format_re.exec(specifier),
-      fill = match[1] || " ",
-      sign = match[3] || "",
-      zfill = match[5],
-      width = +match[6],
-      comma = match[7],
-      precision = match[8],
-      type = match[9],
-      percentage = false,
-      integer = false;
-
-  if (precision) precision = precision.substring(1);
-
-  if (zfill) {
-    fill = "0"; // TODO align = "=";
-    if (comma) width -= Math.floor((width - 1) / 4);
-  }
-
-  switch (type) {
-    case "n": comma = true; type = "g"; break;
-    case "%": percentage = true; type = "f"; break;
-    case "p": percentage = true; type = "r"; break;
-    case "d": integer = true; precision = "0"; break;
-  }
-
-  type = d3_format_types[type] || d3_format_typeDefault;
-
-  return function(value) {
-    var number = percentage ? value * 100 : +value,
-        negative = (number < 0) && (number = -number) ? "\u2212" : sign;
-
-    // Return the empty string for floats formatted as ints.
-    if (integer && (number % 1)) return "";
-
-    // Convert the input value to the desired precision.
-    value = type(number, precision);
-
-    // If the fill character is 0, the sign and group is applied after the fill.
-    if (zfill) {
-      var length = value.length + negative.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-    }
-
-    // Otherwise (e.g., space-filling), the sign and group is applied before.
-    else {
-      if (comma) value = d3_format_group(value);
-      value = negative + value;
-      var length = value.length;
-      if (length < width) value = new Array(width - length + 1).join(fill) + value;
-    }
-    if (percentage) value += "%";
-
-    return value;
-  };
-};
-
-// [[fill]align][sign][#][0][width][,][.precision][type]
-var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
-
-var d3_format_types = {
-  g: function(x, p) { return x.toPrecision(p); },
-  e: function(x, p) { return x.toExponential(p); },
-  f: function(x, p) { return x.toFixed(p); },
-  r: function(x, p) {
-    var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
-    return d3.round(x, p - n).toFixed(Math.max(0, Math.min(20, p - n)));
-  }
-};
-
-function d3_format_typeDefault(x) {
-  return x + "";
-}
-
-// Apply comma grouping for thousands.
-function d3_format_group(value) {
-  var i = value.lastIndexOf("."),
-      f = i >= 0 ? value.substring(i) : (i = value.length, ""),
-      t = [];
-  while (i > 0) t.push(value.substring(i -= 3, i + 3));
-  return t.reverse().join(",") + f;
-}
-/*
- * TERMS OF USE - EASING EQUATIONS
- *
- * Open source under the BSD License.
- *
- * Copyright 2001 Robert Penner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- *
- * - Neither the name of the author nor the names of contributors may be used to
- *   endorse or promote products derived from this software without specific
- *   prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-var d3_ease_quad = d3_ease_poly(2),
-    d3_ease_cubic = d3_ease_poly(3);
-
-var d3_ease = {
-  linear: function() { return d3_ease_linear; },
-  poly: d3_ease_poly,
-  quad: function() { return d3_ease_quad; },
-  cubic: function() { return d3_ease_cubic; },
-  sin: function() { return d3_ease_sin; },
-  exp: function() { return d3_ease_exp; },
-  circle: function() { return d3_ease_circle; },
-  elastic: d3_ease_elastic,
-  back: d3_ease_back,
-  bounce: function() { return d3_ease_bounce; }
-};
-
-var d3_ease_mode = {
-  "in": function(f) { return f; },
-  "out": d3_ease_reverse,
-  "in-out": d3_ease_reflect,
-  "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
-};
-
-d3.ease = function(name) {
-  var i = name.indexOf("-"),
-      t = i >= 0 ? name.substring(0, i) : name,
-      m = i >= 0 ? name.substring(i + 1) : "in";
-  return d3_ease_clamp(d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1))));
-};
-
-function d3_ease_clamp(f) {
-  return function(t) {
-    return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
-  };
-}
-
-function d3_ease_reverse(f) {
-  return function(t) {
-    return 1 - f(1 - t);
-  };
-}
-
-function d3_ease_reflect(f) {
-  return function(t) {
-    return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
-  };
-}
-
-function d3_ease_linear(t) {
-  return t;
-}
-
-function d3_ease_poly(e) {
-  return function(t) {
-    return Math.pow(t, e);
-  }
-}
-
-function d3_ease_sin(t) {
-  return 1 - Math.cos(t * Math.PI / 2);
-}
-
-function d3_ease_exp(t) {
-  return Math.pow(2, 10 * (t - 1));
-}
-
-function d3_ease_circle(t) {
-  return 1 - Math.sqrt(1 - t * t);
-}
-
-function d3_ease_elastic(a, p) {
-  var s;
-  if (arguments.length < 2) p = 0.45;
-  if (arguments.length < 1) { a = 1; s = p / 4; }
-  else s = p / (2 * Math.PI) * Math.asin(1 / a);
-  return function(t) {
-    return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
-  };
-}
-
-function d3_ease_back(s) {
-  if (!s) s = 1.70158;
-  return function(t) {
-    return t * t * ((s + 1) * t - s);
-  };
-}
-
-function d3_ease_bounce(t) {
-  return t < 1 / 2.75 ? 7.5625 * t * t
-      : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75
-      : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375
-      : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
-}
-d3.event = null;
-d3.interpolate = function(a, b) {
-  var i = d3.interpolators.length, f;
-  while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
-  return f;
-};
-
-d3.interpolateNumber = function(a, b) {
-  b -= a;
-  return function(t) { return a + b * t; };
-};
-
-d3.interpolateRound = function(a, b) {
-  b -= a;
-  return function(t) { return Math.round(a + b * t); };
-};
-
-d3.interpolateString = function(a, b) {
-  var m, // current match
-      i, // current index
-      j, // current index (for coallescing)
-      s0 = 0, // start index of current string prefix
-      s1 = 0, // end index of current string prefix
-      s = [], // string constants and placeholders
-      q = [], // number interpolators
-      n, // q.length
-      o;
-
-  // Reset our regular expression!
-  d3_interpolate_number.lastIndex = 0;
-
-  // Find all numbers in b.
-  for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
-    if (m.index) s.push(b.substring(s0, s1 = m.index));
-    q.push({i: s.length, x: m[0]});
-    s.push(null);
-    s0 = d3_interpolate_number.lastIndex;
-  }
-  if (s0 < b.length) s.push(b.substring(s0));
-
-  // Find all numbers in a.
-  for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
-    o = q[i];
-    if (o.x == m[0]) { // The numbers match, so coallesce.
-      if (o.i) {
-        if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i - 1] += o.x;
-          s.splice(o.i, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i - 1] += o.x + s[o.i + 1];
-          s.splice(o.i, 2);
-          for (j = i + 1; j < n; ++j) q[j].i -= 2;
-        }
-      } else {
-          if (s[o.i + 1] == null) { // This match is followed by another number.
-          s[o.i] = o.x;
-        } else { // This match is followed by a string, so coallesce twice.
-          s[o.i] = o.x + s[o.i + 1];
-          s.splice(o.i + 1, 1);
-          for (j = i + 1; j < n; ++j) q[j].i--;
-        }
-      }
-      q.splice(i, 1);
-      n--;
-      i--;
-    } else {
-      o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
-    }
-  }
-
-  // Remove any numbers in b not found in a.
-  while (i < n) {
-    o = q.pop();
-    if (s[o.i + 1] == null) { // This match is followed by another number.
-      s[o.i] = o.x;
-    } else { // This match is followed by a string, so coallesce twice.
-      s[o.i] = o.x + s[o.i + 1];
-      s.splice(o.i + 1, 1);
-    }
-    n--;
-  }
-
-  // Special optimization for only a single match.
-  if (s.length === 1) {
-    return s[0] == null ? q[0].x : function() { return b; };
-  }
-
-  // Otherwise, interpolate each of the numbers and rejoin the string.
-  return function(t) {
-    for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
-    return s.join("");
-  };
-};
-
-d3.interpolateRgb = function(a, b) {
-  a = d3.rgb(a);
-  b = d3.rgb(b);
-  var ar = a.r,
-      ag = a.g,
-      ab = a.b,
-      br = b.r - ar,
-      bg = b.g - ag,
-      bb = b.b - ab;
-  return function(t) {
-    return "rgb(" + Math.round(ar + br * t)
-        + "," + Math.round(ag + bg * t)
-        + "," + Math.round(ab + bb * t)
-        + ")";
-  };
-};
-
-// interpolates HSL space, but outputs RGB string (for compatibility)
-d3.interpolateHsl = function(a, b) {
-  a = d3.hsl(a);
-  b = d3.hsl(b);
-  var h0 = a.h,
-      s0 = a.s,
-      l0 = a.l,
-      h1 = b.h - h0,
-      s1 = b.s - s0,
-      l1 = b.l - l0;
-  return function(t) {
-    return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
-  };
-};
-
-d3.interpolateArray = function(a, b) {
-  var x = [],
-      c = [],
-      na = a.length,
-      nb = b.length,
-      n0 = Math.min(a.length, b.length),
-      i;
-  for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
-  for (; i < na; ++i) c[i] = a[i];
-  for (; i < nb; ++i) c[i] = b[i];
-  return function(t) {
-    for (i = 0; i < n0; ++i) c[i] = x[i](t);
-    return c;
-  };
-};
-
-d3.interpolateObject = function(a, b) {
-  var i = {},
-      c = {},
-      k;
-  for (k in a) {
-    if (k in b) {
-      i[k] = d3_interpolateByName(k)(a[k], b[k]);
-    } else {
-      c[k] = a[k];
-    }
-  }
-  for (k in b) {
-    if (!(k in a)) {
-      c[k] = b[k];
-    }
-  }
-  return function(t) {
-    for (k in i) c[k] = i[k](t);
-    return c;
-  };
-}
-
-var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
-    d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1};
-
-function d3_interpolateByName(n) {
-  return n in d3_interpolate_rgb || /\bcolor\b/.test(n)
-      ? d3.interpolateRgb
-      : d3.interpolate;
-}
-
-d3.interpolators = [
-  d3.interpolateObject,
-  function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
-  function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); },
-  function(a, b) { return (typeof b === "string" ? b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(String(a), b); },
-  function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); }
-];
-function d3_uninterpolateNumber(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return (x - a) * b; };
-}
-
-function d3_uninterpolateClamp(a, b) {
-  b = b - (a = +a) ? 1 / (b - a) : 0;
-  return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
-}
-d3.rgb = function(r, g, b) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)
-      : d3_rgb(~~r, ~~g, ~~b);
-};
-
-function d3_rgb(r, g, b) {
-  return new d3_Rgb(r, g, b);
-}
-
-function d3_Rgb(r, g, b) {
-  this.r = r;
-  this.g = g;
-  this.b = b;
-}
-
-d3_Rgb.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  var r = this.r,
-      g = this.g,
-      b = this.b,
-      i = 30;
-  if (!r && !g && !b) return d3_rgb(i, i, i);
-  if (r && r < i) r = i;
-  if (g && g < i) g = i;
-  if (b && b < i) b = i;
-  return d3_rgb(
-    Math.min(255, Math.floor(r / k)),
-    Math.min(255, Math.floor(g / k)),
-    Math.min(255, Math.floor(b / k)));
-};
-
-d3_Rgb.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_rgb(
-    Math.max(0, Math.floor(k * this.r)),
-    Math.max(0, Math.floor(k * this.g)),
-    Math.max(0, Math.floor(k * this.b)));
-};
-
-d3_Rgb.prototype.hsl = function() {
-  return d3_rgb_hsl(this.r, this.g, this.b);
-};
-
-d3_Rgb.prototype.toString = function() {
-  return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
-};
-
-function d3_rgb_hex(v) {
-  return v < 0x10 ? "0" + v.toString(16) : v.toString(16);
-}
-
-function d3_rgb_parse(format, rgb, hsl) {
-  var r = 0, // red channel; int in [0, 255]
-      g = 0, // green channel; int in [0, 255]
-      b = 0, // blue channel; int in [0, 255]
-      m1, // CSS color specification match
-      m2, // CSS color specification type (e.g., rgb)
-      name;
-
-  /* Handle hsl, rgb. */
-  m1 = /([a-z]+)\((.*)\)/i.exec(format);
-  if (m1) {
-    m2 = m1[2].split(",");
-    switch (m1[1]) {
-      case "hsl": {
-        return hsl(
-          parseFloat(m2[0]), // degrees
-          parseFloat(m2[1]) / 100, // percentage
-          parseFloat(m2[2]) / 100 // percentage
-        );
-      }
-      case "rgb": {
-        return rgb(
-          d3_rgb_parseNumber(m2[0]),
-          d3_rgb_parseNumber(m2[1]),
-          d3_rgb_parseNumber(m2[2])
-        );
-      }
-    }
-  }
-
-  /* Named colors. */
-  if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b);
-
-  /* Hexadecimal colors: #rgb and #rrggbb. */
-  if (format != null && format.charAt(0) === "#") {
-    if (format.length === 4) {
-      r = format.charAt(1); r += r;
-      g = format.charAt(2); g += g;
-      b = format.charAt(3); b += b;
-    } else if (format.length === 7) {
-      r = format.substring(1, 3);
-      g = format.substring(3, 5);
-      b = format.substring(5, 7);
-    }
-    r = parseInt(r, 16);
-    g = parseInt(g, 16);
-    b = parseInt(b, 16);
-  }
-
-  return rgb(r, g, b);
-}
-
-function d3_rgb_hsl(r, g, b) {
-  var min = Math.min(r /= 255, g /= 255, b /= 255),
-      max = Math.max(r, g, b),
-      d = max - min,
-      h,
-      s,
-      l = (max + min) / 2;
-  if (d) {
-    s = l < .5 ? d / (max + min) : d / (2 - max - min);
-    if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
-    else if (g == max) h = (b - r) / d + 2;
-    else h = (r - g) / d + 4;
-    h *= 60;
-  } else {
-    s = h = 0;
-  }
-  return d3_hsl(h, s, l);
-}
-
-function d3_rgb_parseNumber(c) { // either integer or percentage
-  var f = parseFloat(c);
-  return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
-}
-
-var d3_rgb_names = {
-  aliceblue: "#f0f8ff",
-  antiquewhite: "#faebd7",
-  aqua: "#00ffff",
-  aquamarine: "#7fffd4",
-  azure: "#f0ffff",
-  beige: "#f5f5dc",
-  bisque: "#ffe4c4",
-  black: "#000000",
-  blanchedalmond: "#ffebcd",
-  blue: "#0000ff",
-  blueviolet: "#8a2be2",
-  brown: "#a52a2a",
-  burlywood: "#deb887",
-  cadetblue: "#5f9ea0",
-  chartreuse: "#7fff00",
-  chocolate: "#d2691e",
-  coral: "#ff7f50",
-  cornflowerblue: "#6495ed",
-  cornsilk: "#fff8dc",
-  crimson: "#dc143c",
-  cyan: "#00ffff",
-  darkblue: "#00008b",
-  darkcyan: "#008b8b",
-  darkgoldenrod: "#b8860b",
-  darkgray: "#a9a9a9",
-  darkgreen: "#006400",
-  darkgrey: "#a9a9a9",
-  darkkhaki: "#bdb76b",
-  darkmagenta: "#8b008b",
-  darkolivegreen: "#556b2f",
-  darkorange: "#ff8c00",
-  darkorchid: "#9932cc",
-  darkred: "#8b0000",
-  darksalmon: "#e9967a",
-  darkseagreen: "#8fbc8f",
-  darkslateblue: "#483d8b",
-  darkslategray: "#2f4f4f",
-  darkslategrey: "#2f4f4f",
-  darkturquoise: "#00ced1",
-  darkviolet: "#9400d3",
-  deeppink: "#ff1493",
-  deepskyblue: "#00bfff",
-  dimgray: "#696969",
-  dimgrey: "#696969",
-  dodgerblue: "#1e90ff",
-  firebrick: "#b22222",
-  floralwhite: "#fffaf0",
-  forestgreen: "#228b22",
-  fuchsia: "#ff00ff",
-  gainsboro: "#dcdcdc",
-  ghostwhite: "#f8f8ff",
-  gold: "#ffd700",
-  goldenrod: "#daa520",
-  gray: "#808080",
-  green: "#008000",
-  greenyellow: "#adff2f",
-  grey: "#808080",
-  honeydew: "#f0fff0",
-  hotpink: "#ff69b4",
-  indianred: "#cd5c5c",
-  indigo: "#4b0082",
-  ivory: "#fffff0",
-  khaki: "#f0e68c",
-  lavender: "#e6e6fa",
-  lavenderblush: "#fff0f5",
-  lawngreen: "#7cfc00",
-  lemonchiffon: "#fffacd",
-  lightblue: "#add8e6",
-  lightcoral: "#f08080",
-  lightcyan: "#e0ffff",
-  lightgoldenrodyellow: "#fafad2",
-  lightgray: "#d3d3d3",
-  lightgreen: "#90ee90",
-  lightgrey: "#d3d3d3",
-  lightpink: "#ffb6c1",
-  lightsalmon: "#ffa07a",
-  lightseagreen: "#20b2aa",
-  lightskyblue: "#87cefa",
-  lightslategray: "#778899",
-  lightslategrey: "#778899",
-  lightsteelblue: "#b0c4de",
-  lightyellow: "#ffffe0",
-  lime: "#00ff00",
-  limegreen: "#32cd32",
-  linen: "#faf0e6",
-  magenta: "#ff00ff",
-  maroon: "#800000",
-  mediumaquamarine: "#66cdaa",
-  mediumblue: "#0000cd",
-  mediumorchid: "#ba55d3",
-  mediumpurple: "#9370db",
-  mediumseagreen: "#3cb371",
-  mediumslateblue: "#7b68ee",
-  mediumspringgreen: "#00fa9a",
-  mediumturquoise: "#48d1cc",
-  mediumvioletred: "#c71585",
-  midnightblue: "#191970",
-  mintcream: "#f5fffa",
-  mistyrose: "#ffe4e1",
-  moccasin: "#ffe4b5",
-  navajowhite: "#ffdead",
-  navy: "#000080",
-  oldlace: "#fdf5e6",
-  olive: "#808000",
-  olivedrab: "#6b8e23",
-  orange: "#ffa500",
-  orangered: "#ff4500",
-  orchid: "#da70d6",
-  palegoldenrod: "#eee8aa",
-  palegreen: "#98fb98",
-  paleturquoise: "#afeeee",
-  palevioletred: "#db7093",
-  papayawhip: "#ffefd5",
-  peachpuff: "#ffdab9",
-  peru: "#cd853f",
-  pink: "#ffc0cb",
-  plum: "#dda0dd",
-  powderblue: "#b0e0e6",
-  purple: "#800080",
-  red: "#ff0000",
-  rosybrown: "#bc8f8f",
-  royalblue: "#4169e1",
-  saddlebrown: "#8b4513",
-  salmon: "#fa8072",
-  sandybrown: "#f4a460",
-  seagreen: "#2e8b57",
-  seashell: "#fff5ee",
-  sienna: "#a0522d",
-  silver: "#c0c0c0",
-  skyblue: "#87ceeb",
-  slateblue: "#6a5acd",
-  slategray: "#708090",
-  slategrey: "#708090",
-  snow: "#fffafa",
-  springgreen: "#00ff7f",
-  steelblue: "#4682b4",
-  tan: "#d2b48c",
-  teal: "#008080",
-  thistle: "#d8bfd8",
-  tomato: "#ff6347",
-  turquoise: "#40e0d0",
-  violet: "#ee82ee",
-  wheat: "#f5deb3",
-  white: "#ffffff",
-  whitesmoke: "#f5f5f5",
-  yellow: "#ffff00",
-  yellowgreen: "#9acd32"
-};
-
-for (var d3_rgb_name in d3_rgb_names) {
-  d3_rgb_names[d3_rgb_name] = d3_rgb_parse(
-      d3_rgb_names[d3_rgb_name],
-      d3_rgb,
-      d3_hsl_rgb);
-}
-d3.hsl = function(h, s, l) {
-  return arguments.length === 1
-      ? d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)
-      : d3_hsl(+h, +s, +l);
-};
-
-function d3_hsl(h, s, l) {
-  return new d3_Hsl(h, s, l);
-}
-
-function d3_Hsl(h, s, l) {
-  this.h = h;
-  this.s = s;
-  this.l = l;
-}
-
-d3_Hsl.prototype.brighter = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, this.l / k);
-};
-
-d3_Hsl.prototype.darker = function(k) {
-  k = Math.pow(0.7, arguments.length ? k : 1);
-  return d3_hsl(this.h, this.s, k * this.l);
-};
-
-d3_Hsl.prototype.rgb = function() {
-  return d3_hsl_rgb(this.h, this.s, this.l);
-};
-
-d3_Hsl.prototype.toString = function() {
-  return "hsl(" + this.h + "," + this.s * 100 + "%," + this.l * 100 + "%)";
-};
-
-function d3_hsl_rgb(h, s, l) {
-  var m1,
-      m2;
-
-  /* Some simple corrections for h, s and l. */
-  h = h % 360; if (h < 0) h += 360;
-  s = s < 0 ? 0 : s > 1 ? 1 : s;
-  l = l < 0 ? 0 : l > 1 ? 1 : l;
-
-  /* From FvD 13.37, CSS Color Module Level 3 */
-  m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
-  m1 = 2 * l - m2;
-
-  function v(h) {
-    if (h > 360) h -= 360;
-    else if (h < 0) h += 360;
-    if (h < 60) return m1 + (m2 - m1) * h / 60;
-    if (h < 180) return m2;
-    if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
-    return m1;
-  }
-
-  function vv(h) {
-    return Math.round(v(h) * 255);
-  }
-
-  return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
-}
-function d3_selection(groups) {
-  d3_arraySubclass(groups, d3_selectionPrototype);
-  return groups;
-}
-
-var d3_select = function(s, n) { return n.querySelector(s); },
-    d3_selectAll = function(s, n) { return n.querySelectorAll(s); };
-
-// Prefer Sizzle, if available.
-if (typeof Sizzle === "function") {
-  d3_select = function(s, n) { return Sizzle(s, n)[0]; };
-  d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
-}
-
-var d3_selectionPrototype = [];
-
-d3.selection = function() {
-  return d3_selectionRoot;
-};
-
-d3.selection.prototype = d3_selectionPrototype;
-d3_selectionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      group,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(subnode = selector.call(node, node.__data__, i));
-        if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selector(selector) {
-  return function() {
-    return d3_select(selector, this);
-  };
-}
-d3_selectionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node, node.__data__, i));
-        subgroup.parentNode = node;
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-
-function d3_selection_selectorAll(selector) {
-  return function() {
-    return d3_selectAll(selector, this);
-  };
-}
-d3_selectionPrototype.attr = function(name, value) {
-  name = d3.ns.qualify(name);
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    return name.local
-        ? node.getAttributeNS(name.space, name.local)
-        : node.getAttribute(name);
-  }
-
-  function attrNull() {
-    this.removeAttribute(name);
-  }
-
-  function attrNullNS() {
-    this.removeAttributeNS(name.space, name.local);
-  }
-
-  function attrConstant() {
-    this.setAttribute(name, value);
-  }
-
-  function attrConstantNS() {
-    this.setAttributeNS(name.space, name.local, value);
-  }
-
-  function attrFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttribute(name);
-    else this.setAttribute(name, x);
-  }
-
-  function attrFunctionNS() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.removeAttributeNS(name.space, name.local);
-    else this.setAttributeNS(name.space, name.local, x);
-  }
-
-  return this.each(value == null
-      ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
-      ? (name.local ? attrFunctionNS : attrFunction)
-      : (name.local ? attrConstantNS : attrConstant)));
-};
-d3_selectionPrototype.classed = function(name, value) {
-  var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) {
-    var node = this.node();
-    if (c = node.classList) return c.contains(name);
-    var c = node.className;
-    re.lastIndex = 0;
-    return re.test(c.baseVal != null ? c.baseVal : c);
-  }
-
-  function classedAdd() {
-    if (c = this.classList) return c.add(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    re.lastIndex = 0;
-    if (!re.test(cv)) {
-      cv = d3_collapse(cv + " " + name);
-      if (cb) c.baseVal = cv;
-      else this.className = cv;
-    }
-  }
-
-  function classedRemove() {
-    if (c = this.classList) return c.remove(name);
-    var c = this.className,
-        cb = c.baseVal != null,
-        cv = cb ? c.baseVal : c;
-    cv = d3_collapse(cv.replace(re, " "));
-    if (cb) c.baseVal = cv;
-    else this.className = cv;
-  }
-
-  function classedFunction() {
-    (value.apply(this, arguments)
-        ? classedAdd
-        : classedRemove).call(this);
-  }
-
-  return this.each(typeof value === "function"
-      ? classedFunction : value
-      ? classedAdd
-      : classedRemove);
-};
-d3_selectionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return window
-      .getComputedStyle(this.node(), null)
-      .getPropertyValue(name);
-
-  function styleNull() {
-    this.style.removeProperty(name);
-  }
-
-  function styleConstant() {
-    this.style.setProperty(name, value, priority);
-  }
-
-  function styleFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) this.style.removeProperty(name);
-    else this.style.setProperty(name, x, priority);
-  }
-
-  return this.each(value == null
-      ? styleNull : (typeof value === "function"
-      ? styleFunction : styleConstant));
-};
-d3_selectionPrototype.property = function(name, value) {
-
-  // If no value is specified, return the first value.
-  if (arguments.length < 2) return this.node()[name];
-
-  function propertyNull() {
-    delete this[name];
-  }
-
-  function propertyConstant() {
-    this[name] = value;
-  }
-
-  function propertyFunction() {
-    var x = value.apply(this, arguments);
-    if (x == null) delete this[name];
-    else this[name] = x;
-  }
-
-  return this.each(value == null
-      ? propertyNull : (typeof value === "function"
-      ? propertyFunction : propertyConstant));
-};
-d3_selectionPrototype.text = function(value) {
-  return arguments.length < 1 ? this.node().textContent
-      : (this.each(typeof value === "function"
-      ? function() { this.textContent = value.apply(this, arguments); }
-      : function() { this.textContent = value; }));
-};
-d3_selectionPrototype.html = function(value) {
-  return arguments.length < 1 ? this.node().innerHTML
-      : (this.each(typeof value === "function"
-      ? function() { this.innerHTML = value.apply(this, arguments); }
-      : function() { this.innerHTML = value; }));
-};
-// TODO append(node)?
-// TODO append(function)?
-d3_selectionPrototype.append = function(name) {
-  name = d3.ns.qualify(name);
-
-  function append() {
-    return this.appendChild(document.createElement(name));
-  }
-
-  function appendNS() {
-    return this.appendChild(document.createElementNS(name.space, name.local));
-  }
-
-  return this.select(name.local ? appendNS : append);
-};
-// TODO insert(node, function)?
-// TODO insert(function, string)?
-// TODO insert(function, function)?
-d3_selectionPrototype.insert = function(name, before) {
-  name = d3.ns.qualify(name);
-
-  function insert() {
-    return this.insertBefore(
-        document.createElement(name),
-        d3_select(before, this));
-  }
-
-  function insertNS() {
-    return this.insertBefore(
-        document.createElementNS(name.space, name.local),
-        d3_select(before, this));
-  }
-
-  return this.select(name.local ? insertNS : insert);
-};
-// TODO remove(selector)?
-// TODO remove(node)?
-// TODO remove(function)?
-d3_selectionPrototype.remove = function() {
-  return this.each(function() {
-    var parent = this.parentNode;
-    if (parent) parent.removeChild(this);
-  });
-};
-// TODO data(null) for clearing data?
-d3_selectionPrototype.data = function(data, join) {
-  var enter = [],
-      update = [],
-      exit = [];
-
-  function bind(group, groupData) {
-    var i,
-        n = group.length,
-        m = groupData.length,
-        n0 = Math.min(n, m),
-        n1 = Math.max(n, m),
-        updateNodes = [],
-        enterNodes = [],
-        exitNodes = [],
-        node,
-        nodeData;
-
-    if (join) {
-      var nodeByKey = {},
-          keys = [],
-          key,
-          j = groupData.length;
-
-      for (i = -1; ++i < n;) {
-        key = join.call(node = group[i], node.__data__, i);
-        if (key in nodeByKey) {
-          exitNodes[j++] = node; // duplicate key
-        } else {
-          nodeByKey[key] = node;
-        }
-        keys.push(key);
-      }
-
-      for (i = -1; ++i < m;) {
-        node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-        delete nodeByKey[key];
-      }
-
-      for (i = -1; ++i < n;) {
-        if (keys[i] in nodeByKey) {
-          exitNodes[i] = group[i];
-        }
-      }
-    } else {
-      for (i = -1; ++i < n0;) {
-        node = group[i];
-        nodeData = groupData[i];
-        if (node) {
-          node.__data__ = nodeData;
-          updateNodes[i] = node;
-          enterNodes[i] = exitNodes[i] = null;
-        } else {
-          enterNodes[i] = d3_selection_dataNode(nodeData);
-          updateNodes[i] = exitNodes[i] = null;
-        }
-      }
-      for (; i < m; ++i) {
-        enterNodes[i] = d3_selection_dataNode(groupData[i]);
-        updateNodes[i] = exitNodes[i] = null;
-      }
-      for (; i < n1; ++i) {
-        exitNodes[i] = group[i];
-        enterNodes[i] = updateNodes[i] = null;
-      }
-    }
-
-    enterNodes.update
-        = updateNodes;
-
-    enterNodes.parentNode
-        = updateNodes.parentNode
-        = exitNodes.parentNode
-        = group.parentNode;
-
-    enter.push(enterNodes);
-    update.push(updateNodes);
-    exit.push(exitNodes);
-  }
-
-  var i = -1,
-      n = this.length,
-      group;
-  if (typeof data === "function") {
-    while (++i < n) {
-      bind(group = this[i], data.call(group, group.parentNode.__data__, i));
-    }
-  } else {
-    while (++i < n) {
-      bind(group = this[i], data);
-    }
-  }
-
-  var selection = d3_selection(update);
-  selection.enter = function() { return d3_selection_enter(enter); };
-  selection.exit = function() { return d3_selection(exit); };
-  return selection;
-};
-
-function d3_selection_dataNode(data) {
-  return {__data__: data};
-}
-function d3_selection_enter(selection) {
-  d3_arraySubclass(selection, d3_selection_enterPrototype);
-  return selection;
-}
-
-var d3_selection_enterPrototype = [];
-
-d3_selection_enterPrototype.append = d3_selectionPrototype.append;
-d3_selection_enterPrototype.insert = d3_selectionPrototype.insert;
-d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
-d3_selection_enterPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      upgroup,
-      group,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    upgroup = (group = this[j]).update;
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = group.parentNode;
-    for (var i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i));
-        subnode.__data__ = node.__data__;
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-// TODO preserve null elements to maintain index?
-d3_selectionPrototype.filter = function(filter) {
-  var subgroups = [],
-      subgroup,
-      group,
-      node;
-
-  for (var j = 0, m = this.length; j < m; j++) {
-    subgroups.push(subgroup = []);
-    subgroup.parentNode = (group = this[j]).parentNode;
-    for (var i = 0, n = group.length; i < n; i++) {
-      if ((node = group[i]) && filter.call(node, node.__data__, i)) {
-        subgroup.push(node);
-      }
-    }
-  }
-
-  return d3_selection(subgroups);
-};
-d3_selectionPrototype.map = function(map) {
-  return this.each(function() {
-    this.__data__ = map.apply(this, arguments);
-  });
-};
-d3_selectionPrototype.sort = function(comparator) {
-  comparator = d3_selection_sortComparator.apply(this, arguments);
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j].sort(comparator), i = 1, n = group.length, prev = group[0]; i < n; i++) {
-      var node = group[i];
-      if (node) {
-        if (prev) prev.parentNode.insertBefore(node, prev.nextSibling);
-        prev = node;
-      }
-    }
-  }
-  return this;
-};
-
-function d3_selection_sortComparator(comparator) {
-  if (!arguments.length) comparator = d3.ascending;
-  return function(a, b) {
-    return comparator(a && a.__data__, b && b.__data__);
-  };
-}
-// type can be namespaced, e.g., "click.foo"
-// listener can be null for removal
-d3_selectionPrototype.on = function(type, listener, capture) {
-  if (arguments.length < 3) capture = false;
-
-  // parse the type specifier
-  var name = "__on" + type, i = type.indexOf(".");
-  if (i > 0) type = type.substring(0, i);
-
-  // if called with only one argument, return the current listener
-  if (arguments.length < 2) return (i = this.node()[name]) && i._;
-
-  // remove the old event listener, and add the new event listener
-  return this.each(function(d, i) {
-    var node = this;
-
-    if (node[name]) node.removeEventListener(type, node[name], capture);
-    if (listener) node.addEventListener(type, node[name] = l, capture);
-
-    // wrapped event listener that preserves i
-    function l(e) {
-      var o = d3.event; // Events can be reentrant (e.g., focus).
-      d3.event = e;
-      try {
-        listener.call(node, node.__data__, i);
-      } finally {
-        d3.event = o;
-      }
-    }
-
-    // stash the unwrapped listener for retrieval
-    l._ = listener;
-  });
-};
-d3_selectionPrototype.each = function(callback) {
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      var node = group[i];
-      if (node) callback.call(node, node.__data__, i, j);
-    }
-  }
-  return this;
-};
-//
-// Note: assigning to the arguments array simultaneously changes the value of
-// the corresponding argument!
-//
-// TODO The `this` argument probably shouldn't be the first argument to the
-// callback, anyway, since it's redundant. However, that will require a major
-// version bump due to backwards compatibility, so I'm not changing it right
-// away.
-//
-d3_selectionPrototype.call = function(callback) {
-  callback.apply(this, (arguments[0] = this, arguments));
-  return this;
-};
-d3_selectionPrototype.empty = function() {
-  return !this.node();
-};
-d3_selectionPrototype.node = function(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) return node;
-    }
-  }
-  return null;
-};
-d3_selectionPrototype.transition = function() {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      subgroup.push((node = group[i]) ? {node: node, delay: 0, duration: 250} : null);
-    }
-  }
-
-  return d3_transition(subgroups, d3_transitionInheritId || ++d3_transitionId);
-};
-var d3_selectionRoot = d3_selection([[document]]);
-
-d3_selectionRoot[0].parentNode = document.documentElement;
-
-// TODO fast singleton implementation!
-d3.select = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.select(selector)
-      : d3_selection([[selector]]); // assume node
-};
-
-d3.selectAll = function(selector) {
-  return typeof selector === "string"
-      ? d3_selectionRoot.selectAll(selector)
-      : d3_selection([selector]); // assume node[]
-};
-function d3_transition(groups, id) {
-  d3_arraySubclass(groups, d3_transitionPrototype);
-
-  var tweens = {},
-      event = d3.dispatch("start", "end"),
-      ease = d3_transitionEase,
-      then = Date.now();
-
-  groups.id = id;
-
-  groups.tween = function(name, tween) {
-    if (arguments.length < 2) return tweens[name];
-    if (tween == null) delete tweens[name];
-    else tweens[name] = tween;
-    return groups;
-  };
-
-  groups.ease = function(value) {
-    if (!arguments.length) return ease;
-    ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
-    return groups;
-  };
-
-  groups.each = function(type, listener) {
-    if (arguments.length < 2) return d3_transition_each.call(groups, type);
-    event[type].add(listener);
-    return groups;
-  };
-
-  d3.timer(function(elapsed) {
-    groups.each(function(d, i, j) {
-      var tweened = [],
-          node = this,
-          delay = groups[j][i].delay,
-          duration = groups[j][i].duration,
-          lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0});
-
-      ++lock.count;
-
-      delay <= elapsed ? start(elapsed) : d3.timer(start, delay, then);
-
-      function start(elapsed) {
-        if (lock.active > id) return stop();
-        lock.active = id;
-
-        for (var tween in tweens) {
-          if (tween = tweens[tween].call(node, d, i)) {
-            tweened.push(tween);
-          }
-        }
-
-        event.start.dispatch.call(node, d, i);
-        if (!tick(elapsed)) d3.timer(tick, 0, then);
-        return 1;
-      }
-
-      function tick(elapsed) {
-        if (lock.active !== id) return stop();
-
-        var t = (elapsed - delay) / duration,
-            e = ease(t),
-            n = tweened.length;
-
-        while (n > 0) {
-          tweened[--n].call(node, e);
-        }
-
-        if (t >= 1) {
-          stop();
-          d3_transitionInheritId = id;
-          event.end.dispatch.call(node, d, i);
-          d3_transitionInheritId = 0;
-          return 1;
-        }
-      }
-
-      function stop() {
-        if (!--lock.count) delete node.__transition__;
-        return 1;
-      }
-    });
-    return 1;
-  }, 0, then);
-
-  return groups;
-}
-
-function d3_transitionTween(b) {
-  return typeof b === "function"
-      ? function(d, i, a) { var v = b.call(this, d, i) + ""; return a != v && d3.interpolate(a, v); }
-      : (b = b + "", function(d, i, a) { return a != b && d3.interpolate(a, b); });
-}
-
-var d3_transitionPrototype = [],
-    d3_transitionId = 0,
-    d3_transitionInheritId = 0,
-    d3_transitionEase = d3.ease("cubic-in-out");
-
-d3_transitionPrototype.call = d3_selectionPrototype.call;
-
-d3.transition = function() {
-  return d3_selectionRoot.transition();
-};
-
-d3.transition.prototype = d3_transitionPrototype;
-d3_transitionPrototype.select = function(selector) {
-  var subgroups = [],
-      subgroup,
-      subnode,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selector(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    subgroups.push(subgroup = []);
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) {
-        if ("__data__" in node.node) subnode.__data__ = node.node.__data__;
-        subgroup.push({node: subnode, delay: node.delay, duration: node.duration});
-      } else {
-        subgroup.push(null);
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.selectAll = function(selector) {
-  var subgroups = [],
-      subgroup,
-      node;
-
-  if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
-
-  for (var j = -1, m = this.length; ++j < m;) {
-    for (var group = this[j], i = -1, n = group.length; ++i < n;) {
-      if (node = group[i]) {
-        subgroups.push(subgroup = selector.call(node.node, node.node.__data__, i));
-        for (var k = -1, o = subgroup.length; ++k < o;) {
-          subgroup[k] = {node: subgroup[k], delay: node.delay, duration: node.duration};
-        }
-      }
-    }
-  }
-
-  return d3_transition(subgroups, this.id).ease(this.ease());
-};
-d3_transitionPrototype.attr = function(name, value) {
-  return this.attrTween(name, d3_transitionTween(value));
-};
-
-d3_transitionPrototype.attrTween = function(name, tween) {
-  name = d3.ns.qualify(name);
-
-  function attrTween(d, i) {
-    var f = tween.call(this, d, i, this.getAttribute(name));
-    return f && function(t) {
-      this.setAttribute(name, f(t));
-    };
-  }
-
-  function attrTweenNS(d, i) {
-    var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
-    return f && function(t) {
-      this.setAttributeNS(name.space, name.local, f(t));
-    };
-  }
-
-  return this.tween("attr." + name, name.local ? attrTweenNS : attrTween);
-};
-d3_transitionPrototype.style = function(name, value, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.styleTween(name, d3_transitionTween(value), priority);
-};
-
-d3_transitionPrototype.styleTween = function(name, tween, priority) {
-  if (arguments.length < 3) priority = "";
-  return this.tween("style." + name, function(d, i) {
-    var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
-    return f && function(t) {
-      this.style.setProperty(name, f(t), priority);
-    };
-  });
-};
-d3_transitionPrototype.text = function(value) {
-  return this.tween("text", function(d, i) {
-    this.textContent = typeof value === "function"
-        ? value.call(this, d, i)
-        : value;
-  });
-};
-d3_transitionPrototype.remove = function() {
-  return this.each("end", function() {
-    var p;
-    if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
-  });
-};
-d3_transitionPrototype.delay = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].delay = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].delay = value; }));
-};
-d3_transitionPrototype.duration = function(value) {
-  var groups = this;
-  return groups.each(typeof value === "function"
-      ? function(d, i, j) { groups[j][i].duration = +value.apply(this, arguments); }
-      : (value = +value, function(d, i, j) { groups[j][i].duration = value; }));
-};
-function d3_transition_each(callback) {
-  for (var j = 0, m = this.length; j < m; j++) {
-    for (var group = this[j], i = 0, n = group.length; i < n; i++) {
-      var node = group[i];
-      if (node) callback.call(node = node.node, node.__data__, i, j);
-    }
-  }
-  return this;
-}
-d3_transitionPrototype.transition = function() {
-  return this.select(d3_this);
-};
-var d3_timer_queue = null,
-    d3_timer_interval, // is an interval (or frame) active?
-    d3_timer_timeout; // is a timeout active?
-
-// The timer will continue to fire until callback returns true.
-d3.timer = function(callback, delay, then) {
-  var found = false,
-      t0,
-      t1 = d3_timer_queue;
-
-  if (arguments.length < 3) {
-    if (arguments.length < 2) delay = 0;
-    else if (!isFinite(delay)) return;
-    then = Date.now();
-  }
-
-  // See if the callback's already in the queue.
-  while (t1) {
-    if (t1.callback === callback) {
-      t1.then = then;
-      t1.delay = delay;
-      found = true;
-      break;
-    }
-    t0 = t1;
-    t1 = t1.next;
-  }
-
-  // Otherwise, add the callback to the queue.
-  if (!found) d3_timer_queue = {
-    callback: callback,
-    then: then,
-    delay: delay,
-    next: d3_timer_queue
-  };
-
-  // Start animatin'!
-  if (!d3_timer_interval) {
-    d3_timer_timeout = clearTimeout(d3_timer_timeout);
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-function d3_timer_step() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  var delay = d3_timer_flush() - now;
-  if (delay > 24) {
-    if (isFinite(delay)) {
-      clearTimeout(d3_timer_timeout);
-      d3_timer_timeout = setTimeout(d3_timer_step, delay);
-    }
-    d3_timer_interval = 0;
-  } else {
-    d3_timer_interval = 1;
-    d3_timer_frame(d3_timer_step);
-  }
-}
-
-d3.timer.flush = function() {
-  var elapsed,
-      now = Date.now(),
-      t1 = d3_timer_queue;
-
-  while (t1) {
-    elapsed = now - t1.then;
-    if (!t1.delay) t1.flush = t1.callback(elapsed);
-    t1 = t1.next;
-  }
-
-  d3_timer_flush();
-};
-
-// Flush after callbacks, to avoid concurrent queue modification.
-function d3_timer_flush() {
-  var t0 = null,
-      t1 = d3_timer_queue,
-      then = Infinity;
-  while (t1) {
-    if (t1.flush) {
-      t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
-    } else {
-      then = Math.min(then, t1.then + t1.delay);
-      t1 = (t0 = t1).next;
-    }
-  }
-  return then;
-}
-
-var d3_timer_frame = window.requestAnimationFrame
-    || window.webkitRequestAnimationFrame
-    || window.mozRequestAnimationFrame
-    || window.oRequestAnimationFrame
-    || window.msRequestAnimationFrame
-    || function(callback) { setTimeout(callback, 17); };
-function d3_noop() {}
-d3.scale = {};
-
-function d3_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-function d3_scale_nice(domain, nice) {
-  var i0 = 0,
-      i1 = domain.length - 1,
-      x0 = domain[i0],
-      x1 = domain[i1],
-      dx;
-
-  if (x1 < x0) {
-    dx = i0; i0 = i1; i1 = dx;
-    dx = x0; x0 = x1; x1 = dx;
-  }
-
-  nice = nice(x1 - x0);
-  domain[i0] = nice.floor(x0);
-  domain[i1] = nice.ceil(x1);
-  return domain;
-}
-
-function d3_scale_niceDefault() {
-  return Math;
-}
-d3.scale.linear = function() {
-  return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false);
-};
-
-function d3_scale_linear(domain, range, interpolate, clamp) {
-  var output,
-      input;
-
-  function rescale() {
-    var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear,
-        uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
-    output = linear(domain, range, uninterpolate, interpolate);
-    input = linear(range, domain, uninterpolate, d3.interpolate);
-    return scale;
-  }
-
-  function scale(x) {
-    return output(x);
-  }
-
-  // Note: requires range is coercible to number!
-  scale.invert = function(y) {
-    return input(y);
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.map(Number);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.rangeRound = function(x) {
-    return scale.range(x).interpolate(d3.interpolateRound);
-  };
-
-  scale.clamp = function(x) {
-    if (!arguments.length) return clamp;
-    clamp = x;
-    return rescale();
-  };
-
-  scale.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolate = x;
-    return rescale();
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(domain, m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(domain, m);
-  };
-
-  scale.nice = function() {
-    d3_scale_nice(domain, d3_scale_linearNice);
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_linear(domain, range, interpolate, clamp);
-  };
-
-  return rescale();
-};
-
-function d3_scale_linearRebind(scale, linear) {
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-  return scale;
-}
-
-function d3_scale_linearNice(dx) {
-  dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
-  return {
-    floor: function(x) { return Math.floor(x / dx) * dx; },
-    ceil: function(x) { return Math.ceil(x / dx) * dx; }
-  };
-}
-
-// TODO Dates? Ugh.
-function d3_scale_linearTickRange(domain, m) {
-  var extent = d3_scaleExtent(domain),
-      span = extent[1] - extent[0],
-      step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
-      err = m / span * step;
-
-  // Filter ticks to get closer to the desired count.
-  if (err <= .15) step *= 10;
-  else if (err <= .35) step *= 5;
-  else if (err <= .75) step *= 2;
-
-  // Round start and stop values to step interval.
-  extent[0] = Math.ceil(extent[0] / step) * step;
-  extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
-  extent[2] = step;
-  return extent;
-}
-
-function d3_scale_linearTicks(domain, m) {
-  return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
-}
-
-function d3_scale_linearTickFormat(domain, m) {
-  return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
-}
-function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
-  var u = uninterpolate(domain[0], domain[1]),
-      i = interpolate(range[0], range[1]);
-  return function(x) {
-    return i(u(x));
-  };
-}
-function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
-  var u = [],
-      i = [],
-      j = 0,
-      n = domain.length;
-
-  while (++j < n) {
-    u.push(uninterpolate(domain[j - 1], domain[j]));
-    i.push(interpolate(range[j - 1], range[j]));
-  }
-
-  return function(x) {
-    var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
-    return i[j](u[j](x));
-  };
-}
-d3.scale.log = function() {
-  return d3_scale_log(d3.scale.linear(), d3_scale_logp);
-};
-
-function d3_scale_log(linear, log) {
-  var pow = log.pow;
-
-  function scale(x) {
-    return linear(log(x));
-  }
-
-  scale.invert = function(x) {
-    return pow(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(pow);
-    log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
-    pow = log.pow;
-    linear.domain(x.map(log));
-    return scale;
-  };
-
-  scale.nice = function() {
-    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
-    return scale;
-  };
-
-  scale.ticks = function() {
-    var extent = d3_scaleExtent(linear.domain()),
-        ticks = [];
-    if (extent.every(isFinite)) {
-      var i = Math.floor(extent[0]),
-          j = Math.ceil(extent[1]),
-          u = pow(extent[0]),
-          v = pow(extent[1]);
-      if (log === d3_scale_logn) {
-        ticks.push(pow(i));
-        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
-      } else {
-        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
-        ticks.push(pow(i));
-      }
-      for (i = 0; ticks[i] < u; i++) {} // strip small values
-      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
-      ticks = ticks.slice(i, j);
-    }
-    return ticks;
-  };
-
-  scale.tickFormat = function() {
-    return d3_scale_logTickFormat;
-  };
-
-  scale.copy = function() {
-    return d3_scale_log(linear.copy(), log);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_logp(x) {
-  return Math.log(x) / Math.LN10;
-}
-
-function d3_scale_logn(x) {
-  return -Math.log(-x) / Math.LN10;
-}
-
-d3_scale_logp.pow = function(x) {
-  return Math.pow(10, x);
-};
-
-d3_scale_logn.pow = function(x) {
-  return -Math.pow(10, -x);
-};
-
-function d3_scale_logTickFormat(d) {
-  return d.toPrecision(1);
-}
-d3.scale.pow = function() {
-  return d3_scale_pow(d3.scale.linear(), 1);
-};
-
-function d3_scale_pow(linear, exponent) {
-  var powp = d3_scale_powPow(exponent),
-      powb = d3_scale_powPow(1 / exponent);
-
-  function scale(x) {
-    return linear(powp(x));
-  }
-
-  scale.invert = function(x) {
-    return powb(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(powb);
-    linear.domain(x.map(powp));
-    return scale;
-  };
-
-  scale.ticks = function(m) {
-    return d3_scale_linearTicks(scale.domain(), m);
-  };
-
-  scale.tickFormat = function(m) {
-    return d3_scale_linearTickFormat(scale.domain(), m);
-  };
-
-  scale.nice = function() {
-    return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
-  };
-
-  scale.exponent = function(x) {
-    if (!arguments.length) return exponent;
-    var domain = scale.domain();
-    powp = d3_scale_powPow(exponent = x);
-    powb = d3_scale_powPow(1 / exponent);
-    return scale.domain(domain);
-  };
-
-  scale.copy = function() {
-    return d3_scale_pow(linear.copy(), exponent);
-  };
-
-  return d3_scale_linearRebind(scale, linear);
-};
-
-function d3_scale_powPow(e) {
-  return function(x) {
-    return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
-  };
-}
-d3.scale.sqrt = function() {
-  return d3.scale.pow().exponent(.5);
-};
-d3.scale.ordinal = function() {
-  return d3_scale_ordinal([], {t: "range", x: []});
-};
-
-function d3_scale_ordinal(domain, ranger) {
-  var index,
-      range,
-      rangeBand;
-
-  function scale(x) {
-    return range[((index[x] || (index[x] = domain.push(x))) - 1) % range.length];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = [];
-    index = {};
-    var i = -1, n = x.length, xi;
-    while (++i < n) if (!index[xi = x[i]]) index[xi] = domain.push(xi);
-    return scale[ranger.t](ranger.x, ranger.p);
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    rangeBand = 0;
-    ranger = {t: "range", x: x};
-    return scale;
-  };
-
-  scale.rangePoints = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length - 1 + padding);
-    range = domain.length < 2 ? [(start + stop) / 2] : d3.range(start + step * padding / 2, stop + step / 2, step);
-    rangeBand = 0;
-    ranger = {t: "rangePoints", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = (stop - start) / (domain.length + padding);
-    range = d3.range(start + step * padding, stop, step);
-    rangeBand = step * (1 - padding);
-    ranger = {t: "rangeBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeRoundBands = function(x, padding) {
-    if (arguments.length < 2) padding = 0;
-    var start = x[0],
-        stop = x[1],
-        step = Math.floor((stop - start) / (domain.length + padding)),
-        err = stop - start - (domain.length - padding) * step;
-    range = d3.range(start + Math.round(err / 2), stop, step);
-    rangeBand = Math.round(step * (1 - padding));
-    ranger = {t: "rangeRoundBands", x: x, p: padding};
-    return scale;
-  };
-
-  scale.rangeBand = function() {
-    return rangeBand;
-  };
-
-  scale.copy = function() {
-    return d3_scale_ordinal(domain, ranger);
-  };
-
-  return scale.domain(domain);
-};
-/*
- * This product includes color specifications and designs developed by Cynthia
- * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
- */
-
-d3.scale.category10 = function() {
-  return d3.scale.ordinal().range(d3_category10);
-};
-
-d3.scale.category20 = function() {
-  return d3.scale.ordinal().range(d3_category20);
-};
-
-d3.scale.category20b = function() {
-  return d3.scale.ordinal().range(d3_category20b);
-};
-
-d3.scale.category20c = function() {
-  return d3.scale.ordinal().range(d3_category20c);
-};
-
-var d3_category10 = [
-  "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
-  "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
-];
-
-var d3_category20 = [
-  "#1f77b4", "#aec7e8",
-  "#ff7f0e", "#ffbb78",
-  "#2ca02c", "#98df8a",
-  "#d62728", "#ff9896",
-  "#9467bd", "#c5b0d5",
-  "#8c564b", "#c49c94",
-  "#e377c2", "#f7b6d2",
-  "#7f7f7f", "#c7c7c7",
-  "#bcbd22", "#dbdb8d",
-  "#17becf", "#9edae5"
-];
-
-var d3_category20b = [
-  "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
-  "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
-  "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
-  "#843c39", "#ad494a", "#d6616b", "#e7969c",
-  "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
-];
-
-var d3_category20c = [
-  "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
-  "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
-  "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
-  "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
-  "#636363", "#969696", "#bdbdbd", "#d9d9d9"
-];
-d3.scale.quantile = function() {
-  return d3_scale_quantile([], []);
-};
-
-function d3_scale_quantile(domain, range) {
-  var thresholds;
-
-  function rescale() {
-    var k = 0,
-        n = domain.length,
-        q = range.length;
-    thresholds = [];
-    while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
-    return scale;
-  }
-
-  function scale(x) {
-    if (isNaN(x = +x)) return NaN;
-    return range[d3.bisect(thresholds, x)];
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return domain;
-    domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.quantiles = function() {
-    return thresholds;
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantile(domain, range); // copy on write!
-  };
-
-  return rescale();
-};
-d3.scale.quantize = function() {
-  return d3_scale_quantize(0, 1, [0, 1]);
-};
-
-function d3_scale_quantize(x0, x1, range) {
-  var kx, i;
-
-  function scale(x) {
-    return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
-  }
-
-  function rescale() {
-    kx = range.length / (x1 - x0);
-    i = range.length - 1;
-    return scale;
-  }
-
-  scale.domain = function(x) {
-    if (!arguments.length) return [x0, x1];
-    x0 = +x[0];
-    x1 = +x[x.length - 1];
-    return rescale();
-  };
-
-  scale.range = function(x) {
-    if (!arguments.length) return range;
-    range = x;
-    return rescale();
-  };
-
-  scale.copy = function() {
-    return d3_scale_quantize(x0, x1, range); // copy on write
-  };
-
-  return rescale();
-};
-d3.svg = {};
-d3.svg.arc = function() {
-  var innerRadius = d3_svg_arcInnerRadius,
-      outerRadius = d3_svg_arcOuterRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  function arc() {
-    var r0 = innerRadius.apply(this, arguments),
-        r1 = outerRadius.apply(this, arguments),
-        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
-        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
-        da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0),
-        df = da < Math.PI ? "0" : "1",
-        c0 = Math.cos(a0),
-        s0 = Math.sin(a0),
-        c1 = Math.cos(a1),
-        s1 = Math.sin(a1);
-    return da >= d3_svg_arcMax
-      ? (r0
-      ? "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "M0," + r0
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0)
-      + "A" + r0 + "," + r0 + " 0 1,0 0," + r0
-      + "Z"
-      : "M0," + r1
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
-      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
-      + "Z")
-      : (r0
-      ? "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L" + r0 * c1 + "," + r0 * s1
-      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
-      + "Z"
-      : "M" + r1 * c0 + "," + r1 * s0
-      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
-      + "L0,0"
-      + "Z");
-  }
-
-  arc.innerRadius = function(v) {
-    if (!arguments.length) return innerRadius;
-    innerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.outerRadius = function(v) {
-    if (!arguments.length) return outerRadius;
-    outerRadius = d3.functor(v);
-    return arc;
-  };
-
-  arc.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return arc;
-  };
-
-  arc.centroid = function() {
-    var r = (innerRadius.apply(this, arguments)
-        + outerRadius.apply(this, arguments)) / 2,
-        a = (startAngle.apply(this, arguments)
-        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
-    return [Math.cos(a) * r, Math.sin(a) * r];
-  };
-
-  return arc;
-};
-
-var d3_svg_arcOffset = -Math.PI / 2,
-    d3_svg_arcMax = 2 * Math.PI - 1e-6;
-
-function d3_svg_arcInnerRadius(d) {
-  return d.innerRadius;
-}
-
-function d3_svg_arcOuterRadius(d) {
-  return d.outerRadius;
-}
-
-function d3_svg_arcStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_arcEndAngle(d) {
-  return d.endAngle;
-}
-function d3_svg_line(projection) {
-  var x = d3_svg_lineX,
-      y = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function line(d) {
-    return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
-  }
-
-  line.x = function(v) {
-    if (!arguments.length) return x;
-    x = v;
-    return line;
-  };
-
-  line.y = function(v) {
-    if (!arguments.length) return y;
-    y = v;
-    return line;
-  };
-
-  line.interpolate = function(v) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = v];
-    return line;
-  };
-
-  line.tension = function(v) {
-    if (!arguments.length) return tension;
-    tension = v;
-    return line;
-  };
-
-  return line;
-}
-
-d3.svg.line = function() {
-  return d3_svg_line(Object);
-};
-
-// Converts the specified array of data into an array of points
-// (x-y tuples), by evaluating the specified `x` and `y` functions on each
-// data point. The `this` context of the evaluated functions is the specified
-// "self" object; each function is passed the current datum and index.
-function d3_svg_linePoints(self, d, x, y) {
-  var points = [],
-      i = -1,
-      n = d.length,
-      fx = typeof x === "function",
-      fy = typeof y === "function",
-      value;
-  if (fx && fy) {
-    while (++i < n) points.push([
-      x.call(self, value = d[i], i),
-      y.call(self, value, i)
-    ]);
-  } else if (fx) {
-    while (++i < n) points.push([x.call(self, d[i], i), y]);
-  } else if (fy) {
-    while (++i < n) points.push([x, y.call(self, d[i], i)]);
-  } else {
-    while (++i < n) points.push([x, y]);
-  }
-  return points;
-}
-
-// The default `x` property, which references d[0].
-function d3_svg_lineX(d) {
-  return d[0];
-}
-
-// The default `y` property, which references d[1].
-function d3_svg_lineY(d) {
-  return d[1];
-}
-
-// The various interpolators supported by the `line` class.
-var d3_svg_lineInterpolators = {
-  "linear": d3_svg_lineLinear,
-  "step-before": d3_svg_lineStepBefore,
-  "step-after": d3_svg_lineStepAfter,
-  "basis": d3_svg_lineBasis,
-  "basis-open": d3_svg_lineBasisOpen,
-  "basis-closed": d3_svg_lineBasisClosed,
-  "bundle": d3_svg_lineBundle,
-  "cardinal": d3_svg_lineCardinal,
-  "cardinal-open": d3_svg_lineCardinalOpen,
-  "cardinal-closed": d3_svg_lineCardinalClosed,
-  "monotone": d3_svg_lineMonotone
-};
-
-// Linear interpolation; generates "L" commands.
-function d3_svg_lineLinear(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepBefore(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
-  return path.join("");
-}
-
-// Step interpolation; generates "H" and "V" commands.
-function d3_svg_lineStepAfter(points) {
-  var path = [],
-      i = 0,
-      n = points.length,
-      p = points[0];
-  path.push(p[0], ",", p[1]);
-  while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
-  return path.join("");
-}
-
-// Open cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalOpen(points, tension) {
-  return points.length < 4
-      ? d3_svg_lineLinear(points)
-      : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Closed cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinalClosed(points, tension) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
-        d3_svg_lineCardinalTangents([points[points.length - 2]]
-        .concat(points, [points[1]]), tension));
-}
-
-// Cardinal spline interpolation; generates "C" commands.
-function d3_svg_lineCardinal(points, tension, closed) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] + d3_svg_lineHermite(points,
-        d3_svg_lineCardinalTangents(points, tension));
-}
-
-// Hermite spline construction; generates "C" commands.
-function d3_svg_lineHermite(points, tangents) {
-  if (tangents.length < 1
-      || (points.length != tangents.length
-      && points.length != tangents.length + 2)) {
-    return d3_svg_lineLinear(points);
-  }
-
-  var quad = points.length != tangents.length,
-      path = "",
-      p0 = points[0],
-      p = points[1],
-      t0 = tangents[0],
-      t = t0,
-      pi = 1;
-
-  if (quad) {
-    path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
-        + "," + p[0] + "," + p[1];
-    p0 = points[1];
-    pi = 2;
-  }
-
-  if (tangents.length > 1) {
-    t = tangents[1];
-    p = points[pi];
-    pi++;
-    path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
-        + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
-        + "," + p[0] + "," + p[1];
-    for (var i = 2; i < tangents.length; i++, pi++) {
-      p = points[pi];
-      t = tangents[i];
-      path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
-          + "," + p[0] + "," + p[1];
-    }
-  }
-
-  if (quad) {
-    var lp = points[pi];
-    path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
-        + "," + lp[0] + "," + lp[1];
-  }
-
-  return path;
-}
-
-// Generates tangents for a cardinal spline.
-function d3_svg_lineCardinalTangents(points, tension) {
-  var tangents = [],
-      a = (1 - tension) / 2,
-      p0,
-      p1 = points[0],
-      p2 = points[1],
-      i = 1,
-      n = points.length;
-  while (++i < n) {
-    p0 = p1;
-    p1 = p2;
-    p2 = points[i];
-    tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
-  }
-  return tangents;
-}
-
-// B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasis(points) {
-  if (points.length < 3) return d3_svg_lineLinear(points);
-  var path = [],
-      i = 1,
-      n = points.length,
-      pi = points[0],
-      x0 = pi[0],
-      y0 = pi[1],
-      px = [x0, x0, x0, (pi = points[1])[0]],
-      py = [y0, y0, y0, pi[1]];
-  path.push(x0, ",", y0);
-  d3_svg_lineBasisBezier(path, px, py);
-  while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  i = -1;
-  while (++i < 2) {
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Open B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisOpen(points) {
-  if (points.length < 4) return d3_svg_lineLinear(points);
-  var path = [],
-      i = -1,
-      n = points.length,
-      pi,
-      px = [0],
-      py = [0];
-  while (++i < 3) {
-    pi = points[i];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
-    + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
-  --i; while (++i < n) {
-    pi = points[i];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-// Closed B-spline interpolation; generates "C" commands.
-function d3_svg_lineBasisClosed(points) {
-  var path,
-      i = -1,
-      n = points.length,
-      m = n + 4,
-      pi,
-      px = [],
-      py = [];
-  while (++i < 4) {
-    pi = points[i % n];
-    px.push(pi[0]);
-    py.push(pi[1]);
-  }
-  path = [
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
-    d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
-  ];
-  --i; while (++i < m) {
-    pi = points[i % n];
-    px.shift(); px.push(pi[0]);
-    py.shift(); py.push(pi[1]);
-    d3_svg_lineBasisBezier(path, px, py);
-  }
-  return path.join("");
-}
-
-function d3_svg_lineBundle(points, tension) {
-  var n = points.length - 1,
-      x0 = points[0][0],
-      y0 = points[0][1],
-      dx = points[n][0] - x0,
-      dy = points[n][1] - y0,
-      i = -1,
-      p,
-      t;
-  while (++i <= n) {
-    p = points[i];
-    t = i / n;
-    p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
-    p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
-  }
-  return d3_svg_lineBasis(points);
-}
-
-// Returns the dot product of the given four-element vectors.
-function d3_svg_lineDot4(a, b) {
-  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
-}
-
-// Matrix to transform basis (b-spline) control points to bezier
-// control points. Derived from FvD 11.2.8.
-var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
-    d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
-    d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
-
-// Pushes a "C" Bézier curve onto the specified path array, given the
-// two specified four-element arrays which define the control points.
-function d3_svg_lineBasisBezier(path, x, y) {
-  path.push(
-      "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
-      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
-}
-
-// Computes the slope from points p0 to p1.
-function d3_svg_lineSlope(p0, p1) {
-  return (p1[1] - p0[1]) / (p1[0] - p0[0]);
-}
-
-// Compute three-point differences for the given points.
-// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
-function d3_svg_lineFiniteDifferences(points) {
-  var i = 0,
-      j = points.length - 1,
-      m = [],
-      p0 = points[0],
-      p1 = points[1],
-      d = m[0] = d3_svg_lineSlope(p0, p1);
-  while (++i < j) {
-    m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
-  }
-  m[i] = d;
-  return m;
-}
-
-// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
-// interpolation. Returns an array of tangent vectors. For details, see
-// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
-function d3_svg_lineMonotoneTangents(points) {
-  var tangents = [],
-      d,
-      a,
-      b,
-      s,
-      m = d3_svg_lineFiniteDifferences(points),
-      i = -1,
-      j = points.length - 1;
-
-  // The first two steps are done by computing finite-differences:
-  // 1. Compute the slopes of the secant lines between successive points.
-  // 2. Initialize the tangents at every point as the average of the secants.
-
-  // Then, for each segment…
-  while (++i < j) {
-    d = d3_svg_lineSlope(points[i], points[i + 1]);
-
-    // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
-    // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
-    // preserve monotonicity. Ignore step 4 and 5 for those k.
-
-    if (Math.abs(d) < 1e-6) {
-      m[i] = m[i + 1] = 0;
-    } else {
-      // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
-      a = m[i] / d;
-      b = m[i + 1] / d;
-
-      // 5. Prevent overshoot and ensure monotonicity by restricting the
-      // magnitude of vector <ak, bk> to a circle of radius 3.
-      s = a * a + b * b;
-      if (s > 9) {
-        s = d * 3 / Math.sqrt(s);
-        m[i] = s * a;
-        m[i + 1] = s * b;
-      }
-    }
-  }
-
-  // Compute the normalized tangent vector from the slopes. Note that if x is
-  // not monotonic, it's possible that the slope will be infinite, so we protect
-  // against NaN by setting the coordinate to zero.
-  i = -1; while (++i <= j) {
-    s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
-      / (6 * (1 + m[i] * m[i]));
-    tangents.push([s || 0, m[i] * s || 0]);
-  }
-
-  return tangents;
-}
-
-function d3_svg_lineMonotone(points) {
-  return points.length < 3
-      ? d3_svg_lineLinear(points)
-      : points[0] +
-        d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
-}
-d3.svg.line.radial = function() {
-  var line = d3_svg_line(d3_svg_lineRadial);
-  line.radius = line.x, delete line.x;
-  line.angle = line.y, delete line.y;
-  return line;
-};
-
-function d3_svg_lineRadial(points) {
-  var point,
-      i = -1,
-      n = points.length,
-      r,
-      a;
-  while (++i < n) {
-    point = points[i];
-    r = point[0];
-    a = point[1] + d3_svg_arcOffset;
-    point[0] = r * Math.cos(a);
-    point[1] = r * Math.sin(a);
-  }
-  return points;
-}
-function d3_svg_area(projection) {
-  var x0 = d3_svg_lineX,
-      x1 = d3_svg_lineX,
-      y0 = 0,
-      y1 = d3_svg_lineY,
-      interpolate = "linear",
-      interpolator = d3_svg_lineInterpolators[interpolate],
-      tension = .7;
-
-  function area(d) {
-    if (d.length < 1) return null;
-    var points0 = d3_svg_linePoints(this, d, x0, y0),
-        points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
-    return "M" + interpolator(projection(points1), tension)
-         + "L" + interpolator(projection(points0.reverse()), tension)
-         + "Z";
-  }
-
-  area.x = function(x) {
-    if (!arguments.length) return x1;
-    x0 = x1 = x;
-    return area;
-  };
-
-  area.x0 = function(x) {
-    if (!arguments.length) return x0;
-    x0 = x;
-    return area;
-  };
-
-  area.x1 = function(x) {
-    if (!arguments.length) return x1;
-    x1 = x;
-    return area;
-  };
-
-  area.y = function(y) {
-    if (!arguments.length) return y1;
-    y0 = y1 = y;
-    return area;
-  };
-
-  area.y0 = function(y) {
-    if (!arguments.length) return y0;
-    y0 = y;
-    return area;
-  };
-
-  area.y1 = function(y) {
-    if (!arguments.length) return y1;
-    y1 = y;
-    return area;
-  };
-
-  area.interpolate = function(x) {
-    if (!arguments.length) return interpolate;
-    interpolator = d3_svg_lineInterpolators[interpolate = x];
-    return area;
-  };
-
-  area.tension = function(x) {
-    if (!arguments.length) return tension;
-    tension = x;
-    return area;
-  };
-
-  return area;
-}
-
-d3.svg.area = function() {
-  return d3_svg_area(Object);
-};
-
-function d3_svg_areaX(points) {
-  return function(d, i) {
-    return points[i][0];
-  };
-}
-
-function d3_svg_areaY(points) {
-  return function(d, i) {
-    return points[i][1];
-  };
-}
-d3.svg.area.radial = function() {
-  var area = d3_svg_area(d3_svg_lineRadial);
-  area.radius = area.x, delete area.x;
-  area.innerRadius = area.x0, delete area.x0;
-  area.outerRadius = area.x1, delete area.x1;
-  area.angle = area.y, delete area.y;
-  area.startAngle = area.y0, delete area.y0;
-  area.endAngle = area.y1, delete area.y1;
-  return area;
-};
-d3.svg.chord = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      radius = d3_svg_chordRadius,
-      startAngle = d3_svg_arcStartAngle,
-      endAngle = d3_svg_arcEndAngle;
-
-  // TODO Allow control point to be customized.
-
-  function chord(d, i) {
-    var s = subgroup(this, source, d, i),
-        t = subgroup(this, target, d, i);
-    return "M" + s.p0
-      + arc(s.r, s.p1) + (equals(s, t)
-      ? curve(s.r, s.p1, s.r, s.p0)
-      : curve(s.r, s.p1, t.r, t.p0)
-      + arc(t.r, t.p1)
-      + curve(t.r, t.p1, s.r, s.p0))
-      + "Z";
-  }
-
-  function subgroup(self, f, d, i) {
-    var subgroup = f.call(self, d, i),
-        r = radius.call(self, subgroup, i),
-        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
-        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
-    return {
-      r: r,
-      a0: a0,
-      a1: a1,
-      p0: [r * Math.cos(a0), r * Math.sin(a0)],
-      p1: [r * Math.cos(a1), r * Math.sin(a1)]
-    };
-  }
-
-  function equals(a, b) {
-    return a.a0 == b.a0 && a.a1 == b.a1;
-  }
-
-  function arc(r, p) {
-    return "A" + r + "," + r + " 0 0,1 " + p;
-  }
-
-  function curve(r0, p0, r1, p1) {
-    return "Q 0,0 " + p1;
-  }
-
-  chord.radius = function(v) {
-    if (!arguments.length) return radius;
-    radius = d3.functor(v);
-    return chord;
-  };
-
-  chord.source = function(v) {
-    if (!arguments.length) return source;
-    source = d3.functor(v);
-    return chord;
-  };
-
-  chord.target = function(v) {
-    if (!arguments.length) return target;
-    target = d3.functor(v);
-    return chord;
-  };
-
-  chord.startAngle = function(v) {
-    if (!arguments.length) return startAngle;
-    startAngle = d3.functor(v);
-    return chord;
-  };
-
-  chord.endAngle = function(v) {
-    if (!arguments.length) return endAngle;
-    endAngle = d3.functor(v);
-    return chord;
-  };
-
-  return chord;
-};
-
-function d3_svg_chordSource(d) {
-  return d.source;
-}
-
-function d3_svg_chordTarget(d) {
-  return d.target;
-}
-
-function d3_svg_chordRadius(d) {
-  return d.radius;
-}
-
-function d3_svg_chordStartAngle(d) {
-  return d.startAngle;
-}
-
-function d3_svg_chordEndAngle(d) {
-  return d.endAngle;
-}
-d3.svg.diagonal = function() {
-  var source = d3_svg_chordSource,
-      target = d3_svg_chordTarget,
-      projection = d3_svg_diagonalProjection;
-
-  function diagonal(d, i) {
-    var p0 = source.call(this, d, i),
-        p3 = target.call(this, d, i),
-        m = (p0.y + p3.y) / 2,
-        p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
-    p = p.map(projection);
-    return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
-  }
-
-  diagonal.source = function(x) {
-    if (!arguments.length) return source;
-    source = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.target = function(x) {
-    if (!arguments.length) return target;
-    target = d3.functor(x);
-    return diagonal;
-  };
-
-  diagonal.projection = function(x) {
-    if (!arguments.length) return projection;
-    projection = x;
-    return diagonal;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalProjection(d) {
-  return [d.x, d.y];
-}
-d3.svg.diagonal.radial = function() {
-  var diagonal = d3.svg.diagonal(),
-      projection = d3_svg_diagonalProjection,
-      projection_ = diagonal.projection;
-
-  diagonal.projection = function(x) {
-    return arguments.length
-        ? projection_(d3_svg_diagonalRadialProjection(projection = x))
-        : projection;
-  };
-
-  return diagonal;
-};
-
-function d3_svg_diagonalRadialProjection(projection) {
-  return function() {
-    var d = projection.apply(this, arguments),
-        r = d[0],
-        a = d[1] + d3_svg_arcOffset;
-    return [r * Math.cos(a), r * Math.sin(a)];
-  };
-}
-d3.svg.mouse = function(container) {
-  return d3_svg_mousePoint(container, d3.event);
-};
-
-// https://bugs.webkit.org/show_bug.cgi?id=44083
-var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
-
-function d3_svg_mousePoint(container, e) {
-  var point = (container.ownerSVGElement || container).createSVGPoint();
-  if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
-    var svg = d3.select(document.body)
-      .append("svg:svg")
-        .style("position", "absolute")
-        .style("top", 0)
-        .style("left", 0);
-    var ctm = svg[0][0].getScreenCTM();
-    d3_mouse_bug44083 = !(ctm.f || ctm.e);
-    svg.remove();
-  }
-  if (d3_mouse_bug44083) {
-    point.x = e.pageX;
-    point.y = e.pageY;
-  } else {
-    point.x = e.clientX;
-    point.y = e.clientY;
-  }
-  point = point.matrixTransform(container.getScreenCTM().inverse());
-  return [point.x, point.y];
-};
-d3.svg.touches = function(container) {
-  var touches = d3.event.touches;
-  return touches ? Array.prototype.map.call(touches, function(touch) {
-    var point = d3_svg_mousePoint(container, touch);
-    point.identifier = touch.identifier;
-    return point;
-  }) : [];
-};
-d3.svg.symbol = function() {
-  var type = d3_svg_symbolType,
-      size = d3_svg_symbolSize;
-
-  function symbol(d, i) {
-    return (d3_svg_symbols[type.call(this, d, i)]
-        || d3_svg_symbols.circle)
-        (size.call(this, d, i));
-  }
-
-  symbol.type = function(x) {
-    if (!arguments.length) return type;
-    type = d3.functor(x);
-    return symbol;
-  };
-
-  // size of symbol in square pixels
-  symbol.size = function(x) {
-    if (!arguments.length) return size;
-    size = d3.functor(x);
-    return symbol;
-  };
-
-  return symbol;
-};
-
-function d3_svg_symbolSize() {
-  return 64;
-}
-
-function d3_svg_symbolType() {
-  return "circle";
-}
-
-// TODO cross-diagonal?
-var d3_svg_symbols = {
-  "circle": function(size) {
-    var r = Math.sqrt(size / Math.PI);
-    return "M0," + r
-        + "A" + r + "," + r + " 0 1,1 0," + (-r)
-        + "A" + r + "," + r + " 0 1,1 0," + r
-        + "Z";
-  },
-  "cross": function(size) {
-    var r = Math.sqrt(size / 5) / 2;
-    return "M" + -3 * r + "," + -r
-        + "H" + -r
-        + "V" + -3 * r
-        + "H" + r
-        + "V" + -r
-        + "H" + 3 * r
-        + "V" + r
-        + "H" + r
-        + "V" + 3 * r
-        + "H" + -r
-        + "V" + r
-        + "H" + -3 * r
-        + "Z";
-  },
-  "diamond": function(size) {
-    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
-        rx = ry * d3_svg_symbolTan30;
-    return "M0," + -ry
-        + "L" + rx + ",0"
-        + " 0," + ry
-        + " " + -rx + ",0"
-        + "Z";
-  },
-  "square": function(size) {
-    var r = Math.sqrt(size) / 2;
-    return "M" + -r + "," + -r
-        + "L" + r + "," + -r
-        + " " + r + "," + r
-        + " " + -r + "," + r
-        + "Z";
-  },
-  "triangle-down": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + ry
-        + "L" + rx +"," + -ry
-        + " " + -rx + "," + -ry
-        + "Z";
-  },
-  "triangle-up": function(size) {
-    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
-        ry = rx * d3_svg_symbolSqrt3 / 2;
-    return "M0," + -ry
-        + "L" + rx +"," + ry
-        + " " + -rx + "," + ry
-        + "Z";
-  }
-};
-
-d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
-
-var d3_svg_symbolSqrt3 = Math.sqrt(3),
-    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
-d3.svg.axis = function() {
-  var scale = d3.scale.linear(),
-      orient = "bottom",
-      tickMajorSize = 6,
-      tickMinorSize = 6,
-      tickEndSize = 6,
-      tickPadding = 3,
-      tickArguments_ = [10],
-      tickFormat_,
-      tickSubdivide = 0;
-
-  function axis(selection) {
-    selection.each(function(d, i, j) {
-      var g = d3.select(this);
-
-      // Ticks.
-      var ticks = scale.ticks.apply(scale, tickArguments_),
-          tickFormat = tickFormat_ == null ? scale.tickFormat.apply(scale, tickArguments_) : tickFormat_;
-
-      // Minor ticks.
-      var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
-          subtick = g.selectAll(".minor").data(subticks, String),
-          subtickEnter = subtick.enter().insert("svg:line", "g").attr("class", "tick minor").style("opacity", 1e-6),
-          subtickExit = transition(subtick.exit()).style("opacity", 1e-6).remove(),
-          subtickUpdate = transition(subtick).style("opacity", 1);
-
-      // Major ticks.
-      var tick = g.selectAll("g").data(ticks, String),
-          tickEnter = tick.enter().insert("svg:g", "path").style("opacity", 1e-6),
-          tickExit = transition(tick.exit()).style("opacity", 1e-6).remove(),
-          tickUpdate = transition(tick).style("opacity", 1),
-          tickTransform;
-
-      // Domain.
-      var range = d3_scaleExtent(scale.range()),
-          path = g.selectAll(".domain").data([0]),
-          pathEnter = path.enter().append("svg:path").attr("class", "domain"),
-          pathUpdate = transition(path);
-
-      // Stash the new scale and grab the old scale.
-      var scale0 = this.__chart__ || scale;
-      this.__chart__ = scale.copy();
-
-      tickEnter.append("svg:line").attr("class", "tick");
-      tickEnter.append("svg:text");
-      tickUpdate.select("text").text(tickFormat);
-
-      switch (orient) {
-        case "bottom": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".71em").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", tickMajorSize);
-          tickUpdate.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
-          break;
-        }
-        case "top": {
-          tickTransform = d3_svg_axisX;
-          subtickUpdate.attr("y2", -tickMinorSize);
-          tickEnter.select("text").attr("text-anchor", "middle");
-          tickUpdate.select("line").attr("y2", -tickMajorSize);
-          tickUpdate.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
-          break;
-        }
-        case "left": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", -tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em").attr("text-anchor", "end");
-          tickUpdate.select("line").attr("x2", -tickMajorSize);
-          tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
-          pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
-          break;
-        }
-        case "right": {
-          tickTransform = d3_svg_axisY;
-          subtickUpdate.attr("x2", tickMinorSize);
-          tickEnter.select("text").attr("dy", ".32em");
-          tickUpdate.select("line").attr("x2", tickMajorSize);
-          tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding);
-          pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
-          break;
-        }
-      }
-
-      tickEnter.call(tickTransform, scale0);
-      tickUpdate.call(tickTransform, scale);
-      tickExit.call(tickTransform, scale);
-
-      subtickEnter.call(tickTransform, scale0);
-      subtickUpdate.call(tickTransform, scale);
-      subtickExit.call(tickTransform, scale);
-
-      function transition(o) {
-        return selection.delay ? o.transition()
-            .delay(selection[j][i].delay)
-            .duration(selection[j][i].duration)
-            .ease(selection.ease()) : o;
-      }
-    });
-  }
-
-  axis.scale = function(x) {
-    if (!arguments.length) return scale;
-    scale = x;
-    return axis;
-  };
-
-  axis.orient = function(x) {
-    if (!arguments.length) return orient;
-    orient = x;
-    return axis;
-  };
-
-  axis.ticks = function() {
-    if (!arguments.length) return tickArguments_;
-    tickArguments_ = arguments;
-    return axis;
-  };
-
-  axis.tickFormat = function(x) {
-    if (!arguments.length) return tickFormat_;
-    tickFormat_ = x;
-    return axis;
-  };
-
-  axis.tickSize = function(x, y, z) {
-    if (!arguments.length) return tickMajorSize;
-    var n = arguments.length - 1;
-    tickMajorSize = +x;
-    tickMinorSize = n > 1 ? +y : tickMajorSize;
-    tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
-    return axis;
-  };
-
-  axis.tickPadding = function(x) {
-    if (!arguments.length) return tickPadding;
-    tickPadding = +x;
-    return axis;
-  };
-
-  axis.tickSubdivide = function(x) {
-    if (!arguments.length) return tickSubdivide;
-    tickSubdivide = +x;
-    return axis;
-  };
-
-  return axis;
-};
-
-function d3_svg_axisX(selection, x) {
-  selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
-}
-
-function d3_svg_axisY(selection, y) {
-  selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; });
-}
-
-function d3_svg_axisSubdivide(scale, ticks, m) {
-  subticks = [];
-  if (m && ticks.length > 1) {
-    var extent = d3_scaleExtent(scale.domain()),
-        subticks,
-        i = -1,
-        n = ticks.length,
-        d = (ticks[1] - ticks[0]) / ++m,
-        j,
-        v;
-    while (++i < n) {
-      for (j = m; --j > 0;) {
-        if ((v = +ticks[i] - j * d) >= extent[0]) {
-          subticks.push(v);
-        }
-      }
-    }
-    for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) {
-      subticks.push(v);
-    }
-  }
-  return subticks;
-}
-d3.behavior = {};
-d3.behavior.drag = function() {
-  var event = d3.dispatch("drag", "dragstart", "dragend");
-
-  function drag() {
-    this
-        .on("mousedown.drag", mousedown)
-        .on("touchstart.drag", mousedown);
-
-    d3.select(window)
-        .on("mousemove.drag", d3_behavior_dragMove)
-        .on("touchmove.drag", d3_behavior_dragMove)
-        .on("mouseup.drag", d3_behavior_dragUp, true)
-        .on("touchend.drag", d3_behavior_dragUp, true)
-        .on("click.drag", d3_behavior_dragClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_dragEvent = event;
-    d3_behavior_dragOffset = d3_behavior_dragPoint((d3_behavior_dragTarget = this).parentNode);
-    d3_behavior_dragMoved = 0;
-    d3_behavior_dragArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_dragDispatch("dragstart");
-  }
-
-  drag.on = function(type, listener) {
-    event[type].add(listener);
-    return drag;
-  };
-
-  return drag;
-};
-
-var d3_behavior_dragEvent,
-    d3_behavior_dragTarget,
-    d3_behavior_dragArguments,
-    d3_behavior_dragOffset,
-    d3_behavior_dragMoved,
-    d3_behavior_dragStopClick;
-
-function d3_behavior_dragDispatch(type) {
-  var o = d3.event, p = d3_behavior_dragTarget.parentNode, dx = 0, dy = 0;
-
-  if (p) {
-    p = d3_behavior_dragPoint(p);
-    dx = p[0] - d3_behavior_dragOffset[0];
-    dy = p[1] - d3_behavior_dragOffset[1];
-    d3_behavior_dragOffset = p;
-    d3_behavior_dragMoved |= dx | dy;
-  }
-
-  try {
-    d3.event = {dx: dx, dy: dy};
-    d3_behavior_dragEvent[type].dispatch.apply(d3_behavior_dragTarget, d3_behavior_dragArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-
-function d3_behavior_dragPoint(container) {
-  return d3.event.touches
-      ? d3.svg.touches(container)[0]
-      : d3.svg.mouse(container);
-}
-
-function d3_behavior_dragMove() {
-  if (!d3_behavior_dragTarget) return;
-  var parent = d3_behavior_dragTarget.parentNode;
-
-  // O NOES! The drag element was removed from the DOM.
-  if (!parent) return d3_behavior_dragUp();
-
-  d3_behavior_dragDispatch("drag");
-  d3_behavior_dragCancel();
-}
-
-function d3_behavior_dragUp() {
-  if (!d3_behavior_dragTarget) return;
-  d3_behavior_dragDispatch("dragend");
-  d3_behavior_dragTarget = null;
-
-  // If the node was moved, prevent the mouseup from propagating.
-  // Also prevent the subsequent click from propagating (e.g., for anchors).
-  if (d3_behavior_dragMoved) {
-    d3_behavior_dragStopClick = true;
-    d3_behavior_dragCancel();
-  }
-}
-
-function d3_behavior_dragClick() {
-  if (d3_behavior_dragStopClick) {
-    d3_behavior_dragCancel();
-    d3_behavior_dragStopClick = false;
-  }
-}
-
-function d3_behavior_dragCancel() {
-  d3.event.stopPropagation();
-  d3.event.preventDefault();
-}
-// TODO unbind zoom behavior?
-// TODO unbind listener?
-d3.behavior.zoom = function() {
-  var xyz = [0, 0, 0],
-      event = d3.dispatch("zoom");
-
-  function zoom() {
-    this
-        .on("mousedown.zoom", mousedown)
-        .on("mousewheel.zoom", mousewheel)
-        .on("DOMMouseScroll.zoom", mousewheel)
-        .on("dblclick.zoom", dblclick)
-        .on("touchstart.zoom", touchstart);
-
-    d3.select(window)
-        .on("mousemove.zoom", d3_behavior_zoomMousemove)
-        .on("mouseup.zoom", d3_behavior_zoomMouseup)
-        .on("touchmove.zoom", d3_behavior_zoomTouchmove)
-        .on("touchend.zoom", d3_behavior_zoomTouchup)
-        .on("click.zoom", d3_behavior_zoomClick, true);
-  }
-
-  // snapshot the local context for subsequent dispatch
-  function start() {
-    d3_behavior_zoomXyz = xyz;
-    d3_behavior_zoomDispatch = event.zoom.dispatch;
-    d3_behavior_zoomTarget = this;
-    d3_behavior_zoomArguments = arguments;
-  }
-
-  function mousedown() {
-    start.apply(this, arguments);
-    d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomMoved = false;
-    d3.event.preventDefault();
-    window.focus();
-  }
-
-  // store starting mouse location
-  function mousewheel() {
-    start.apply(this, arguments);
-    if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
-    d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming);
-  }
-
-  function dblclick() {
-    start.apply(this, arguments);
-    var mouse = d3.svg.mouse(d3_behavior_zoomTarget);
-    d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse));
-  }
-
-  // doubletap detection
-  function touchstart() {
-    start.apply(this, arguments);
-    var touches = d3_behavior_zoomTouchup(),
-        touch,
-        now = Date.now();
-    if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) {
-      d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]);
-    }
-    d3_behavior_zoomLast = now;
-  }
-
-  zoom.on = function(type, listener) {
-    event[type].add(listener);
-    return zoom;
-  };
-
-  return zoom;
-};
-
-var d3_behavior_zoomDiv,
-    d3_behavior_zoomPanning,
-    d3_behavior_zoomZooming,
-    d3_behavior_zoomLocations = {}, // identifier -> location
-    d3_behavior_zoomLast = 0,
-    d3_behavior_zoomXyz,
-    d3_behavior_zoomDispatch,
-    d3_behavior_zoomTarget,
-    d3_behavior_zoomArguments,
-    d3_behavior_zoomMoved,
-    d3_behavior_zoomStopClick;
-
-function d3_behavior_zoomLocation(point) {
-  return [
-    point[0] - d3_behavior_zoomXyz[0],
-    point[1] - d3_behavior_zoomXyz[1],
-    d3_behavior_zoomXyz[2]
-  ];
-}
-
-// detect the pixels that would be scrolled by this wheel event
-function d3_behavior_zoomDelta() {
-
-  // mousewheel events are totally broken!
-  // https://bugs.webkit.org/show_bug.cgi?id=40441
-  // not only that, but Chrome and Safari differ in re. to acceleration!
-  if (!d3_behavior_zoomDiv) {
-    d3_behavior_zoomDiv = d3.select("body").append("div")
-        .style("visibility", "hidden")
-        .style("top", 0)
-        .style("height", 0)
-        .style("width", 0)
-        .style("overflow-y", "scroll")
-      .append("div")
-        .style("height", "2000px")
-      .node().parentNode;
-  }
-
-  var e = d3.event, delta;
-  try {
-    d3_behavior_zoomDiv.scrollTop = 1000;
-    d3_behavior_zoomDiv.dispatchEvent(e);
-    delta = 1000 - d3_behavior_zoomDiv.scrollTop;
-  } catch (error) {
-    delta = e.wheelDelta || (-e.detail * 5);
-  }
-
-  return delta * .005;
-}
-
-// Note: Since we don't rotate, it's possible for the touches to become
-// slightly detached from their original positions. Thus, we recompute the
-// touch points on touchend as well as touchstart!
-function d3_behavior_zoomTouchup() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget),
-      i = -1,
-      n = touches.length,
-      touch;
-  while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch);
-  return touches;
-}
-
-function d3_behavior_zoomTouchmove() {
-  var touches = d3.svg.touches(d3_behavior_zoomTarget);
-  switch (touches.length) {
-
-    // single-touch pan
-    case 1: {
-      var touch = touches[0];
-      d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]);
-      break;
-    }
-
-    // double-touch pan + zoom
-    case 2: {
-      var p0 = touches[0],
-          p1 = touches[1],
-          p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2],
-          l0 = d3_behavior_zoomLocations[p0.identifier],
-          l1 = d3_behavior_zoomLocations[p1.identifier],
-          l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]];
-      d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2);
-      break;
-    }
-  }
-}
-
-function d3_behavior_zoomMousemove() {
-  d3_behavior_zoomZooming = null;
-  if (d3_behavior_zoomPanning) {
-    d3_behavior_zoomMoved = true;
-    d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
-  }
-}
-
-function d3_behavior_zoomMouseup() {
-  if (d3_behavior_zoomPanning) {
-    if (d3_behavior_zoomMoved) d3_behavior_zoomStopClick = true;
-    d3_behavior_zoomMousemove();
-    d3_behavior_zoomPanning = null;
-  }
-}
-
-function d3_behavior_zoomClick() {
-  if (d3_behavior_zoomStopClick) {
-    d3.event.stopPropagation();
-    d3.event.preventDefault();
-    d3_behavior_zoomStopClick = false;
-  }
-}
-
-function d3_behavior_zoomTo(z, x0, x1) {
-  var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]),
-      x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0],
-      y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1],
-      o = d3.event, // Events can be reentrant (e.g., focus).
-      k = Math.pow(2, z);
-
-  d3.event = {
-    scale: k,
-    translate: [x, y],
-    transform: function(sx, sy) {
-      if (sx) transform(sx, x);
-      if (sy) transform(sy, y);
-    }
-  };
-
-  function transform(scale, o) {
-    var domain = scale.__domain || (scale.__domain = scale.domain()),
-        range = scale.range().map(function(v) { return (v - o) / k; });
-    scale.domain(domain).domain(range.map(scale.invert));
-  }
-
-  try {
-    d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments);
-  } finally {
-    d3.event = o;
-  }
-
-  o.preventDefault();
-}
-})();
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.layout.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.layout.js
deleted file mode 100755
index 6cc1d7161677597ae7f718a4c0cafb90a240a56a..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.layout.js
+++ /dev/null
@@ -1,1865 +0,0 @@
-(function(){d3.layout = {};
-// Implements hierarchical edge bundling using Holten's algorithm. For each
-// input link, a path is computed that travels through the tree, up the parent
-// hierarchy to the least common ancestor, and then back down to the destination
-// node. Each path is simply an array of nodes.
-d3.layout.bundle = function() {
-  return function(links) {
-    var paths = [],
-        i = -1,
-        n = links.length;
-    while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
-    return paths;
-  };
-};
-
-function d3_layout_bundlePath(link) {
-  var start = link.source,
-      end = link.target,
-      lca = d3_layout_bundleLeastCommonAncestor(start, end),
-      points = [start];
-  while (start !== lca) {
-    start = start.parent;
-    points.push(start);
-  }
-  var k = points.length;
-  while (end !== lca) {
-    points.splice(k, 0, end);
-    end = end.parent;
-  }
-  return points;
-}
-
-function d3_layout_bundleAncestors(node) {
-  var ancestors = [],
-      parent = node.parent;
-  while (parent != null) {
-    ancestors.push(node);
-    node = parent;
-    parent = parent.parent;
-  }
-  ancestors.push(node);
-  return ancestors;
-}
-
-function d3_layout_bundleLeastCommonAncestor(a, b) {
-  if (a === b) return a;
-  var aNodes = d3_layout_bundleAncestors(a),
-      bNodes = d3_layout_bundleAncestors(b),
-      aNode = aNodes.pop(),
-      bNode = bNodes.pop(),
-      sharedNode = null;
-  while (aNode === bNode) {
-    sharedNode = aNode;
-    aNode = aNodes.pop();
-    bNode = bNodes.pop();
-  }
-  return sharedNode;
-}
-d3.layout.chord = function() {
-  var chord = {},
-      chords,
-      groups,
-      matrix,
-      n,
-      padding = 0,
-      sortGroups,
-      sortSubgroups,
-      sortChords;
-
-  function relayout() {
-    var subgroups = {},
-        groupSums = [],
-        groupIndex = d3.range(n),
-        subgroupIndex = [],
-        k,
-        x,
-        x0,
-        i,
-        j;
-
-    chords = [];
-    groups = [];
-
-    // Compute the sum.
-    k = 0, i = -1; while (++i < n) {
-      x = 0, j = -1; while (++j < n) {
-        x += matrix[i][j];
-      }
-      groupSums.push(x);
-      subgroupIndex.push(d3.range(n));
-      k += x;
-    }
-
-    // Sort groups…
-    if (sortGroups) {
-      groupIndex.sort(function(a, b) {
-        return sortGroups(groupSums[a], groupSums[b]);
-      });
-    }
-
-    // Sort subgroups…
-    if (sortSubgroups) {
-      subgroupIndex.forEach(function(d, i) {
-        d.sort(function(a, b) {
-          return sortSubgroups(matrix[i][a], matrix[i][b]);
-        });
-      });
-    }
-
-    // Convert the sum to scaling factor for [0, 2pi].
-    // TODO Allow start and end angle to be specified.
-    // TODO Allow padding to be specified as percentage?
-    k = (2 * Math.PI - padding * n) / k;
-
-    // Compute the start and end angle for each group and subgroup.
-    x = 0, i = -1; while (++i < n) {
-      x0 = x, j = -1; while (++j < n) {
-        var di = groupIndex[i],
-            dj = subgroupIndex[i][j],
-            v = matrix[di][dj];
-        subgroups[di + "-" + dj] = {
-          index: di,
-          subindex: dj,
-          startAngle: x,
-          endAngle: x += v * k,
-          value: v
-        };
-      }
-      groups.push({
-        index: di,
-        startAngle: x0,
-        endAngle: x,
-        value: (x - x0) / k
-      });
-      x += padding;
-    }
-
-    // Generate chords for each (non-empty) subgroup-subgroup link.
-    i = -1; while (++i < n) {
-      j = i - 1; while (++j < n) {
-        var source = subgroups[i + "-" + j],
-            target = subgroups[j + "-" + i];
-        if (source.value || target.value) {
-          chords.push(source.value < target.value
-              ? {source: target, target: source}
-              : {source: source, target: target});
-        }
-      }
-    }
-
-    if (sortChords) resort();
-  }
-
-  function resort() {
-    chords.sort(function(a, b) {
-      return sortChords(a.target.value, b.target.value);
-    });
-  }
-
-  chord.matrix = function(x) {
-    if (!arguments.length) return matrix;
-    n = (matrix = x) && matrix.length;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.padding = function(x) {
-    if (!arguments.length) return padding;
-    padding = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortGroups = function(x) {
-    if (!arguments.length) return sortGroups;
-    sortGroups = x;
-    chords = groups = null;
-    return chord;
-  };
-
-  chord.sortSubgroups = function(x) {
-    if (!arguments.length) return sortSubgroups;
-    sortSubgroups = x;
-    chords = null;
-    return chord;
-  };
-
-  chord.sortChords = function(x) {
-    if (!arguments.length) return sortChords;
-    sortChords = x;
-    if (chords) resort();
-    return chord;
-  };
-
-  chord.chords = function() {
-    if (!chords) relayout();
-    return chords;
-  };
-
-  chord.groups = function() {
-    if (!groups) relayout();
-    return groups;
-  };
-
-  return chord;
-};
-// A rudimentary force layout using Gauss-Seidel.
-d3.layout.force = function() {
-  var force = {},
-      event = d3.dispatch("tick"),
-      size = [1, 1],
-      drag,
-      alpha,
-      friction = .9,
-      linkDistance = d3_layout_forceLinkDistance,
-      linkStrength = d3_layout_forceLinkStrength,
-      charge = -30,
-      gravity = .1,
-      theta = .8,
-      interval,
-      nodes = [],
-      links = [],
-      distances,
-      strengths;
-
-  function repulse(node, kc) {
-    return function(quad, x1, y1, x2, y2) {
-      if (quad.point !== node) {
-        var dx = quad.cx - node.x,
-            dy = quad.cy - node.y,
-            dn = 1 / Math.sqrt(dx * dx + dy * dy);
-
-        /* Barnes-Hut criterion. */
-        if ((x2 - x1) * dn < theta) {
-          var k = kc * quad.count * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-          return true;
-        }
-
-        if (quad.point && isFinite(dn)) {
-          var k = kc * dn * dn;
-          node.px -= dx * k;
-          node.py -= dy * k;
-        }
-      }
-    };
-  }
-
-  function tick() {
-    var n = nodes.length,
-        m = links.length,
-        q,
-        i, // current index
-        o, // current object
-        s, // current source
-        t, // current target
-        l, // current distance
-        k, // current force
-        x, // x-distance
-        y; // y-distance
-
-    // gauss-seidel relaxation for links
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      s = o.source;
-      t = o.target;
-      x = t.x - s.x;
-      y = t.y - s.y;
-      if (l = (x * x + y * y)) {
-        l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
-        x *= l;
-        y *= l;
-        t.x -= x * (k = s.weight / (t.weight + s.weight));
-        t.y -= y * k;
-        s.x += x * (k = 1 - k);
-        s.y += y * k;
-      }
-    }
-
-    // apply gravity forces
-    if (k = alpha * gravity) {
-      x = size[0] / 2;
-      y = size[1] / 2;
-      i = -1; if (k) while (++i < n) {
-        o = nodes[i];
-        o.x += (x - o.x) * k;
-        o.y += (y - o.y) * k;
-      }
-    }
-
-    // compute quadtree center of mass and apply charge forces
-    if (k = alpha * charge) {
-      d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes));
-      i = -1; while (++i < n) {
-        if (!(o = nodes[i]).fixed) {
-          q.visit(repulse(o, k));
-        }
-      }
-    }
-
-    // position verlet integration
-    i = -1; while (++i < n) {
-      o = nodes[i];
-      if (o.fixed) {
-        o.x = o.px;
-        o.y = o.py;
-      } else {
-        o.x -= (o.px - (o.px = o.x)) * friction;
-        o.y -= (o.py - (o.py = o.y)) * friction;
-      }
-    }
-
-    event.tick.dispatch({type: "tick", alpha: alpha});
-
-    // simulated annealing, basically
-    return (alpha *= .99) < .005;
-  }
-
-  force.on = function(type, listener) {
-    event[type].add(listener);
-    return force;
-  };
-
-  force.nodes = function(x) {
-    if (!arguments.length) return nodes;
-    nodes = x;
-    return force;
-  };
-
-  force.links = function(x) {
-    if (!arguments.length) return links;
-    links = x;
-    return force;
-  };
-
-  force.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return force;
-  };
-
-  force.linkDistance = function(x) {
-    if (!arguments.length) return linkDistance;
-    linkDistance = d3.functor(x);
-    return force;
-  };
-
-  // For backwards-compatibility.
-  force.distance = force.linkDistance;
-
-  force.linkStrength = function(x) {
-    if (!arguments.length) return linkStrength;
-    linkStrength = d3.functor(x);
-    return force;
-  };
-
-  force.friction = function(x) {
-    if (!arguments.length) return friction;
-    friction = x;
-    return force;
-  };
-
-  force.charge = function(x) {
-    if (!arguments.length) return charge;
-    charge = x;
-    return force;
-  };
-
-  force.gravity = function(x) {
-    if (!arguments.length) return gravity;
-    gravity = x;
-    return force;
-  };
-
-  force.theta = function(x) {
-    if (!arguments.length) return theta;
-    theta = x;
-    return force;
-  };
-
-  force.start = function() {
-    var i,
-        j,
-        n = nodes.length,
-        m = links.length,
-        w = size[0],
-        h = size[1],
-        neighbors,
-        o;
-
-    for (i = 0; i < n; ++i) {
-      (o = nodes[i]).index = i;
-      o.weight = 0;
-    }
-
-    distances = [];
-    strengths = [];
-    for (i = 0; i < m; ++i) {
-      o = links[i];
-      if (typeof o.source == "number") o.source = nodes[o.source];
-      if (typeof o.target == "number") o.target = nodes[o.target];
-      distances[i] = linkDistance.call(this, o, i);
-      strengths[i] = linkStrength.call(this, o, i);
-      ++o.source.weight;
-      ++o.target.weight;
-    }
-
-    for (i = 0; i < n; ++i) {
-      o = nodes[i];
-      if (isNaN(o.x)) o.x = position("x", w);
-      if (isNaN(o.y)) o.y = position("y", h);
-      if (isNaN(o.px)) o.px = o.x;
-      if (isNaN(o.py)) o.py = o.y;
-    }
-
-    // initialize node position based on first neighbor
-    function position(dimension, size) {
-      var neighbors = neighbor(i),
-          j = -1,
-          m = neighbors.length,
-          x;
-      while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
-      return Math.random() * size;
-    }
-
-    // initialize neighbors lazily
-    function neighbor() {
-      if (!neighbors) {
-        neighbors = [];
-        for (j = 0; j < n; ++j) {
-          neighbors[j] = [];
-        }
-        for (j = 0; j < m; ++j) {
-          var o = links[j];
-          neighbors[o.source.index].push(o.target);
-          neighbors[o.target.index].push(o.source);
-        }
-      }
-      return neighbors[i];
-    }
-
-    return force.resume();
-  };
-
-  force.resume = function() {
-    alpha = .1;
-    d3.timer(tick);
-    return force;
-  };
-
-  force.stop = function() {
-    alpha = 0;
-    return force;
-  };
-
-  // use `node.call(force.drag)` to make nodes draggable
-  force.drag = function() {
-    if (!drag) drag = d3.behavior.drag()
-        .on("dragstart", dragstart)
-        .on("drag", d3_layout_forceDrag)
-        .on("dragend", d3_layout_forceDragEnd);
-
-    this.on("mouseover.force", d3_layout_forceDragOver)
-        .on("mouseout.force", d3_layout_forceDragOut)
-        .call(drag);
-  };
-
-  function dragstart(d) {
-    d3_layout_forceDragOver(d3_layout_forceDragNode = d);
-    d3_layout_forceDragForce = force;
-  }
-
-  return force;
-};
-
-var d3_layout_forceDragForce,
-    d3_layout_forceDragNode;
-
-function d3_layout_forceDragOver(d) {
-  d.fixed |= 2;
-}
-
-function d3_layout_forceDragOut(d) {
-  if (d !== d3_layout_forceDragNode) d.fixed &= 1;
-}
-
-function d3_layout_forceDragEnd() {
-  d3_layout_forceDrag();
-  d3_layout_forceDragNode.fixed &= 1;
-  d3_layout_forceDragForce = d3_layout_forceDragNode = null;
-}
-
-function d3_layout_forceDrag() {
-  d3_layout_forceDragNode.px += d3.event.dx;
-  d3_layout_forceDragNode.py += d3.event.dy;
-  d3_layout_forceDragForce.resume(); // restart annealing
-}
-
-function d3_layout_forceAccumulate(quad) {
-  var cx = 0,
-      cy = 0;
-  quad.count = 0;
-  if (!quad.leaf) {
-    var nodes = quad.nodes,
-        n = nodes.length,
-        i = -1,
-        c;
-    while (++i < n) {
-      c = nodes[i];
-      if (c == null) continue;
-      d3_layout_forceAccumulate(c);
-      quad.count += c.count;
-      cx += c.count * c.cx;
-      cy += c.count * c.cy;
-    }
-  }
-  if (quad.point) {
-    // jitter internal nodes that are coincident
-    if (!quad.leaf) {
-      quad.point.x += Math.random() - .5;
-      quad.point.y += Math.random() - .5;
-    }
-    quad.count++;
-    cx += quad.point.x;
-    cy += quad.point.y;
-  }
-  quad.cx = cx / quad.count;
-  quad.cy = cy / quad.count;
-}
-
-function d3_layout_forceLinkDistance(link) {
-  return 20;
-}
-
-function d3_layout_forceLinkStrength(link) {
-  return 1;
-}
-d3.layout.partition = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      size = [1, 1]; // width, height
-
-  function position(node, x, dx, dy) {
-    var children = node.children;
-    node.x = x;
-    node.y = node.depth * dy;
-    node.dx = dx;
-    node.dy = dy;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          c,
-          d;
-      dx = node.value ? dx / node.value : 0;
-      while (++i < n) {
-        position(c = children[i], x, d = c.value * dx, dy);
-        x += d;
-      }
-    }
-  }
-
-  function depth(node) {
-    var children = node.children,
-        d = 0;
-    if (children) {
-      var i = -1,
-          n = children.length;
-      while (++i < n) d = Math.max(d, depth(children[i]));
-    }
-    return 1 + d;
-  }
-
-  function partition(d, i) {
-    var nodes = hierarchy.call(this, d, i);
-    position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
-    return nodes;
-  }
-
-  partition.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return partition;
-  };
-
-  return d3_layout_hierarchyRebind(partition, hierarchy);
-};
-d3.layout.pie = function() {
-  var value = Number,
-      sort = null,
-      startAngle = 0,
-      endAngle = 2 * Math.PI;
-
-  function pie(data, i) {
-
-    // Compute the start angle.
-    var a = +(typeof startAngle === "function"
-        ? startAngle.apply(this, arguments)
-        : startAngle);
-
-    // Compute the angular range (end - start).
-    var k = (typeof endAngle === "function"
-        ? endAngle.apply(this, arguments)
-        : endAngle) - startAngle;
-
-    // Optionally sort the data.
-    var index = d3.range(data.length);
-    if (sort != null) index.sort(function(i, j) {
-      return sort(data[i], data[j]);
-    });
-
-    // Compute the numeric values for each data element.
-    var values = data.map(value);
-
-    // Convert k into a scale factor from value to angle, using the sum.
-    k /= values.reduce(function(p, d) { return p + d; }, 0);
-
-    // Compute the arcs!
-    var arcs = index.map(function(i) {
-      return {
-        data: data[i],
-        value: d = values[i],
-        startAngle: a,
-        endAngle: a += d * k
-      };
-    });
-
-    // Return the arcs in the original data's order.
-    return data.map(function(d, i) {
-      return arcs[index[i]];
-    });
-  }
-
-  /**
-   * Specifies the value function *x*, which returns a nonnegative numeric value
-   * for each datum. The default value function is `Number`. The value function
-   * is passed two arguments: the current datum and the current index.
-   */
-  pie.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return pie;
-  };
-
-  /**
-   * Specifies a sort comparison operator *x*. The comparator is passed two data
-   * elements from the data array, a and b; it returns a negative value if a is
-   * less than b, a positive value if a is greater than b, and zero if a equals
-   * b.
-   */
-  pie.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall start angle of the pie chart. Defaults to 0. The
-   * start angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.startAngle = function(x) {
-    if (!arguments.length) return startAngle;
-    startAngle = x;
-    return pie;
-  };
-
-  /**
-   * Specifies the overall end angle of the pie chart. Defaults to 2Ï€. The
-   * end angle can be specified either as a constant or as a function; in the
-   * case of a function, it is evaluated once per array (as opposed to per
-   * element).
-   */
-  pie.endAngle = function(x) {
-    if (!arguments.length) return endAngle;
-    endAngle = x;
-    return pie;
-  };
-
-  return pie;
-};
-// data is two-dimensional array of x,y; we populate y0
-d3.layout.stack = function() {
-  var values = Object,
-      order = d3_layout_stackOrders["default"],
-      offset = d3_layout_stackOffsets["zero"],
-      out = d3_layout_stackOut,
-      x = d3_layout_stackX,
-      y = d3_layout_stackY;
-
-  function stack(data, index) {
-
-    // Convert series to canonical two-dimensional representation.
-    var series = data.map(function(d, i) {
-      return values.call(stack, d, i);
-    });
-
-    // Convert each series to canonical [[x,y]] representation.
-    var points = series.map(function(d, i) {
-      return d.map(function(v, i) {
-        return [x.call(stack, v, i), y.call(stack, v, i)];
-      });
-    });
-
-    // Compute the order of series, and permute them.
-    var orders = order.call(stack, points, index);
-    series = d3.permute(series, orders);
-    points = d3.permute(points, orders);
-
-    // Compute the baseline…
-    var offsets = offset.call(stack, points, index);
-
-    // And propagate it to other series.
-    var n = series.length,
-        m = series[0].length,
-        i,
-        j,
-        o;
-    for (j = 0; j < m; ++j) {
-      out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
-      for (i = 1; i < n; ++i) {
-        out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
-      }
-    }
-
-    return data;
-  }
-
-  stack.values = function(x) {
-    if (!arguments.length) return values;
-    values = x;
-    return stack;
-  };
-
-  stack.order = function(x) {
-    if (!arguments.length) return order;
-    order = typeof x === "function" ? x : d3_layout_stackOrders[x];
-    return stack;
-  };
-
-  stack.offset = function(x) {
-    if (!arguments.length) return offset;
-    offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
-    return stack;
-  };
-
-  stack.x = function(z) {
-    if (!arguments.length) return x;
-    x = z;
-    return stack;
-  };
-
-  stack.y = function(z) {
-    if (!arguments.length) return y;
-    y = z;
-    return stack;
-  };
-
-  stack.out = function(z) {
-    if (!arguments.length) return out;
-    out = z;
-    return stack;
-  };
-
-  return stack;
-}
-
-function d3_layout_stackX(d) {
-  return d.x;
-}
-
-function d3_layout_stackY(d) {
-  return d.y;
-}
-
-function d3_layout_stackOut(d, y0, y) {
-  d.y0 = y0;
-  d.y = y;
-}
-
-var d3_layout_stackOrders = {
-
-  "inside-out": function(data) {
-    var n = data.length,
-        i,
-        j,
-        max = data.map(d3_layout_stackMaxIndex),
-        sums = data.map(d3_layout_stackReduceSum),
-        index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
-        top = 0,
-        bottom = 0,
-        tops = [],
-        bottoms = [];
-    for (i = 0; i < n; ++i) {
-      j = index[i];
-      if (top < bottom) {
-        top += sums[j];
-        tops.push(j);
-      } else {
-        bottom += sums[j];
-        bottoms.push(j);
-      }
-    }
-    return bottoms.reverse().concat(tops);
-  },
-
-  "reverse": function(data) {
-    return d3.range(data.length).reverse();
-  },
-
-  "default": function(data) {
-    return d3.range(data.length);
-  }
-
-};
-
-var d3_layout_stackOffsets = {
-
-  "silhouette": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        sums = [],
-        max = 0,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o > max) max = o;
-      sums.push(o);
-    }
-    for (j = 0; j < m; ++j) {
-      y0[j] = (max - sums[j]) / 2;
-    }
-    return y0;
-  },
-
-  "wiggle": function(data) {
-    var n = data.length,
-        x = data[0],
-        m = x.length,
-        max = 0,
-        i,
-        j,
-        k,
-        s1,
-        s2,
-        s3,
-        dx,
-        o,
-        o0,
-        y0 = [];
-    y0[0] = o = o0 = 0;
-    for (j = 1; j < m; ++j) {
-      for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
-      for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
-        for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
-          s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
-        }
-        s2 += s3 * data[i][j][1];
-      }
-      y0[j] = o -= s1 ? s2 / s1 * dx : 0;
-      if (o < o0) o0 = o;
-    }
-    for (j = 0; j < m; ++j) y0[j] -= o0;
-    return y0;
-  },
-
-  "expand": function(data) {
-    var n = data.length,
-        m = data[0].length,
-        k = 1 / n,
-        i,
-        j,
-        o,
-        y0 = [];
-    for (j = 0; j < m; ++j) {
-      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
-      if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
-      else for (i = 0; i < n; i++) data[i][j][1] = k;
-    }
-    for (j = 0; j < m; ++j) y0[j] = 0;
-    return y0;
-  },
-
-  "zero": function(data) {
-    var j = -1,
-        m = data[0].length,
-        y0 = [];
-    while (++j < m) y0[j] = 0;
-    return y0;
-  }
-
-};
-
-function d3_layout_stackMaxIndex(array) {
-  var i = 1,
-      j = 0,
-      v = array[0][1],
-      k,
-      n = array.length;
-  for (; i < n; ++i) {
-    if ((k = array[i][1]) > v) {
-      j = i;
-      v = k;
-    }
-  }
-  return j;
-}
-
-function d3_layout_stackReduceSum(d) {
-  return d.reduce(d3_layout_stackSum, 0);
-}
-
-function d3_layout_stackSum(p, d) {
-  return p + d[1];
-}
-d3.layout.histogram = function() {
-  var frequency = true,
-      valuer = Number,
-      ranger = d3_layout_histogramRange,
-      binner = d3_layout_histogramBinSturges;
-
-  function histogram(data, i) {
-    var bins = [],
-        values = data.map(valuer, this),
-        range = ranger.call(this, values, i),
-        thresholds = binner.call(this, range, values, i),
-        bin,
-        i = -1,
-        n = values.length,
-        m = thresholds.length - 1,
-        k = frequency ? 1 : 1 / n,
-        x;
-
-    // Initialize the bins.
-    while (++i < m) {
-      bin = bins[i] = [];
-      bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
-      bin.y = 0;
-    }
-
-    // Fill the bins, ignoring values outside the range.
-    i = -1; while(++i < n) {
-      x = values[i];
-      if ((x >= range[0]) && (x <= range[1])) {
-        bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
-        bin.y += k;
-        bin.push(data[i]);
-      }
-    }
-
-    return bins;
-  }
-
-  // Specifies how to extract a value from the associated data. The default
-  // value function is `Number`, which is equivalent to the identity function.
-  histogram.value = function(x) {
-    if (!arguments.length) return valuer;
-    valuer = x;
-    return histogram;
-  };
-
-  // Specifies the range of the histogram. Values outside the specified range
-  // will be ignored. The argument `x` may be specified either as a two-element
-  // array representing the minimum and maximum value of the range, or as a
-  // function that returns the range given the array of values and the current
-  // index `i`. The default range is the extent (minimum and maximum) of the
-  // values.
-  histogram.range = function(x) {
-    if (!arguments.length) return ranger;
-    ranger = d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies how to bin values in the histogram. The argument `x` may be
-  // specified as a number, in which case the range of values will be split
-  // uniformly into the given number of bins. Or, `x` may be an array of
-  // threshold values, defining the bins; the specified array must contain the
-  // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
-  // may be a function which is evaluated, being passed the range, the array of
-  // values, and the current index `i`, returning an array of thresholds. The
-  // default bin function will divide the values into uniform bins using
-  // Sturges' formula.
-  histogram.bins = function(x) {
-    if (!arguments.length) return binner;
-    binner = typeof x === "number"
-        ? function(range) { return d3_layout_histogramBinFixed(range, x); }
-        : d3.functor(x);
-    return histogram;
-  };
-
-  // Specifies whether the histogram's `y` value is a count (frequency) or a
-  // probability (density). The default value is true.
-  histogram.frequency = function(x) {
-    if (!arguments.length) return frequency;
-    frequency = !!x;
-    return histogram;
-  };
-
-  return histogram;
-};
-
-function d3_layout_histogramBinSturges(range, values) {
-  return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
-}
-
-function d3_layout_histogramBinFixed(range, n) {
-  var x = -1,
-      b = +range[0],
-      m = (range[1] - b) / n,
-      f = [];
-  while (++x <= n) f[x] = m * x + b;
-  return f;
-}
-
-function d3_layout_histogramRange(values) {
-  return [d3.min(values), d3.max(values)];
-}
-d3.layout.hierarchy = function() {
-  var sort = d3_layout_hierarchySort,
-      children = d3_layout_hierarchyChildren,
-      value = d3_layout_hierarchyValue;
-
-  // Recursively compute the node depth and value.
-  // Also converts the data representation into a standard hierarchy structure.
-  function recurse(data, depth, nodes) {
-    var childs = children.call(hierarchy, data, depth),
-        node = d3_layout_hierarchyInline ? data : {data: data};
-    node.depth = depth;
-    nodes.push(node);
-    if (childs) {
-      var i = -1,
-          n = childs.length,
-          c = node.children = [],
-          v = 0,
-          j = depth + 1;
-      while (++i < n) {
-        d = recurse(childs[i], j, nodes);
-        d.parent = node;
-        c.push(d);
-        v += d.value;
-      }
-      if (sort) c.sort(sort);
-      if (value) node.value = v;
-    } else if (value) {
-      node.value = +value.call(hierarchy, data, depth) || 0;
-    }
-    return node;
-  }
-
-  // Recursively re-evaluates the node value.
-  function revalue(node, depth) {
-    var children = node.children,
-        v = 0;
-    if (children) {
-      var i = -1,
-          n = children.length,
-          j = depth + 1;
-      while (++i < n) v += revalue(children[i], j);
-    } else if (value) {
-      v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0;
-    }
-    if (value) node.value = v;
-    return v;
-  }
-
-  function hierarchy(d) {
-    var nodes = [];
-    recurse(d, 0, nodes);
-    return nodes;
-  }
-
-  hierarchy.sort = function(x) {
-    if (!arguments.length) return sort;
-    sort = x;
-    return hierarchy;
-  };
-
-  hierarchy.children = function(x) {
-    if (!arguments.length) return children;
-    children = x;
-    return hierarchy;
-  };
-
-  hierarchy.value = function(x) {
-    if (!arguments.length) return value;
-    value = x;
-    return hierarchy;
-  };
-
-  // Re-evaluates the `value` property for the specified hierarchy.
-  hierarchy.revalue = function(root) {
-    revalue(root, 0);
-    return root;
-  };
-
-  return hierarchy;
-};
-
-// A method assignment helper for hierarchy subclasses.
-function d3_layout_hierarchyRebind(object, hierarchy) {
-  object.sort = d3.rebind(object, hierarchy.sort);
-  object.children = d3.rebind(object, hierarchy.children);
-  object.links = d3_layout_hierarchyLinks;
-  object.value = d3.rebind(object, hierarchy.value);
-
-  // If the new API is used, enabling inlining.
-  object.nodes = function(d) {
-    d3_layout_hierarchyInline = true;
-    return (object.nodes = object)(d);
-  };
-
-  return object;
-}
-
-function d3_layout_hierarchyChildren(d) {
-  return d.children;
-}
-
-function d3_layout_hierarchyValue(d) {
-  return d.value;
-}
-
-function d3_layout_hierarchySort(a, b) {
-  return b.value - a.value;
-}
-
-// Returns an array source+target objects for the specified nodes.
-function d3_layout_hierarchyLinks(nodes) {
-  return d3.merge(nodes.map(function(parent) {
-    return (parent.children || []).map(function(child) {
-      return {source: parent, target: child};
-    });
-  }));
-}
-
-// For backwards-compatibility, don't enable inlining by default.
-var d3_layout_hierarchyInline = false;
-d3.layout.pack = function() {
-  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
-      size = [1, 1];
-
-  function pack(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    // Recursively compute the layout.
-    root.x = 0;
-    root.y = 0;
-    d3_layout_packTree(root);
-
-    // Scale the layout to fit the requested size.
-    var w = size[0],
-        h = size[1],
-        k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
-    d3_layout_packTransform(root, w / 2, h / 2, k);
-
-    return nodes;
-  }
-
-  pack.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return pack;
-  };
-
-  return d3_layout_hierarchyRebind(pack, hierarchy);
-};
-
-function d3_layout_packSort(a, b) {
-  return a.value - b.value;
-}
-
-function d3_layout_packInsert(a, b) {
-  var c = a._pack_next;
-  a._pack_next = b;
-  b._pack_prev = a;
-  b._pack_next = c;
-  c._pack_prev = b;
-}
-
-function d3_layout_packSplice(a, b) {
-  a._pack_next = b;
-  b._pack_prev = a;
-}
-
-function d3_layout_packIntersects(a, b) {
-  var dx = b.x - a.x,
-      dy = b.y - a.y,
-      dr = a.r + b.r;
-  return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
-}
-
-function d3_layout_packCircle(nodes) {
-  var xMin = Infinity,
-      xMax = -Infinity,
-      yMin = Infinity,
-      yMax = -Infinity,
-      n = nodes.length,
-      a, b, c, j, k;
-
-  function bound(node) {
-    xMin = Math.min(node.x - node.r, xMin);
-    xMax = Math.max(node.x + node.r, xMax);
-    yMin = Math.min(node.y - node.r, yMin);
-    yMax = Math.max(node.y + node.r, yMax);
-  }
-
-  // Create node links.
-  nodes.forEach(d3_layout_packLink);
-
-  // Create first node.
-  a = nodes[0];
-  a.x = -a.r;
-  a.y = 0;
-  bound(a);
-
-  // Create second node.
-  if (n > 1) {
-    b = nodes[1];
-    b.x = b.r;
-    b.y = 0;
-    bound(b);
-
-    // Create third node and build chain.
-    if (n > 2) {
-      c = nodes[2];
-      d3_layout_packPlace(a, b, c);
-      bound(c);
-      d3_layout_packInsert(a, c);
-      a._pack_prev = c;
-      d3_layout_packInsert(c, b);
-      b = a._pack_next;
-
-      // Now iterate through the rest.
-      for (var i = 3; i < n; i++) {
-        d3_layout_packPlace(a, b, c = nodes[i]);
-
-        // Search for the closest intersection.
-        var isect = 0, s1 = 1, s2 = 1;
-        for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
-          if (d3_layout_packIntersects(j, c)) {
-            isect = 1;
-            break;
-          }
-        }
-        if (isect == 1) {
-          for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
-            if (d3_layout_packIntersects(k, c)) {
-              if (s2 < s1) {
-                isect = -1;
-                j = k;
-              }
-              break;
-            }
-          }
-        }
-
-        // Update node chain.
-        if (isect == 0) {
-          d3_layout_packInsert(a, c);
-          b = c;
-          bound(c);
-        } else if (isect > 0) {
-          d3_layout_packSplice(a, j);
-          b = j;
-          i--;
-        } else { // isect < 0
-          d3_layout_packSplice(j, b);
-          a = j;
-          i--;
-        }
-      }
-    }
-  }
-
-  // Re-center the circles and return the encompassing radius.
-  var cx = (xMin + xMax) / 2,
-      cy = (yMin + yMax) / 2,
-      cr = 0;
-  for (var i = 0; i < n; i++) {
-    var node = nodes[i];
-    node.x -= cx;
-    node.y -= cy;
-    cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
-  }
-
-  // Remove node links.
-  nodes.forEach(d3_layout_packUnlink);
-
-  return cr;
-}
-
-function d3_layout_packLink(node) {
-  node._pack_next = node._pack_prev = node;
-}
-
-function d3_layout_packUnlink(node) {
-  delete node._pack_next;
-  delete node._pack_prev;
-}
-
-function d3_layout_packTree(node) {
-  var children = node.children;
-  if (children) {
-    children.forEach(d3_layout_packTree);
-    node.r = d3_layout_packCircle(children);
-  } else {
-    node.r = Math.sqrt(node.value);
-  }
-}
-
-function d3_layout_packTransform(node, x, y, k) {
-  var children = node.children;
-  node.x = (x += k * node.x);
-  node.y = (y += k * node.y);
-  node.r *= k;
-  if (children) {
-    var i = -1, n = children.length;
-    while (++i < n) d3_layout_packTransform(children[i], x, y, k);
-  }
-}
-
-function d3_layout_packPlace(a, b, c) {
-  var da = b.r + c.r,
-      db = a.r + c.r,
-      dx = b.x - a.x,
-      dy = b.y - a.y,
-      dc = Math.sqrt(dx * dx + dy * dy),
-      cos = (db * db + dc * dc - da * da) / (2 * db * dc),
-      theta = Math.acos(cos),
-      x = cos * db,
-      h = Math.sin(theta) * db;
-  dx /= dc;
-  dy /= dc;
-  c.x = a.x + x * dx + h * dy;
-  c.y = a.y + x * dy - h * dx;
-}
-// Implements a hierarchical layout using the cluster (or dendogram) algorithm.
-d3.layout.cluster = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function cluster(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0],
-        previousNode,
-        x = 0,
-        kx,
-        ky;
-
-    // First walk, computing the initial x & y values.
-    d3_layout_treeVisitAfter(root, function(node) {
-      if (node.children) {
-        node.x = d3_layout_clusterX(node.children);
-        node.y = d3_layout_clusterY(node.children);
-      } else {
-        node.x = previousNode ? x += separation(node, previousNode) : 0;
-        node.y = 0;
-        previousNode = node;
-      }
-    });
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_clusterLeft(root),
-        right = d3_layout_clusterRight(root),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2;
-
-    // Second walk, normalizing x & y to the desired size.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = (1 - node.y / root.y) * size[1];
-    });
-
-    return nodes;
-  }
-
-  cluster.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return cluster;
-  };
-
-  cluster.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return cluster;
-  };
-
-  return d3_layout_hierarchyRebind(cluster, hierarchy);
-};
-
-function d3_layout_clusterY(children) {
-  return 1 + d3.max(children, function(child) {
-    return child.y;
-  });
-}
-
-function d3_layout_clusterX(children) {
-  return children.reduce(function(x, child) {
-    return x + child.x;
-  }, 0) / children.length;
-}
-
-function d3_layout_clusterLeft(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterLeft(children[0]) : node;
-}
-
-function d3_layout_clusterRight(node) {
-  var children = node.children;
-  return children ? d3_layout_clusterRight(children[children.length - 1]) : node;
-}
-// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
-d3.layout.tree = function() {
-  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
-      separation = d3_layout_treeSeparation,
-      size = [1, 1]; // width, height
-
-  function tree(d, i) {
-    var nodes = hierarchy.call(this, d, i),
-        root = nodes[0];
-
-    function firstWalk(node, previousSibling) {
-      var children = node.children,
-          layout = node._tree;
-      if (children && (n = children.length)) {
-        var n,
-            firstChild = children[0],
-            previousChild,
-            ancestor = firstChild,
-            child,
-            i = -1;
-        while (++i < n) {
-          child = children[i];
-          firstWalk(child, previousChild);
-          ancestor = apportion(child, previousChild, ancestor);
-          previousChild = child;
-        }
-        d3_layout_treeShift(node);
-        var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-          layout.mod = layout.prelim - midpoint;
-        } else {
-          layout.prelim = midpoint;
-        }
-      } else {
-        if (previousSibling) {
-          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
-        }
-      }
-    }
-
-    function secondWalk(node, x) {
-      node.x = node._tree.prelim + x;
-      var children = node.children;
-      if (children) {
-        var i = -1,
-            n = children.length;
-        x += node._tree.mod;
-        while (++i < n) {
-          secondWalk(children[i], x);
-        }
-      }
-    }
-
-    function apportion(node, previousSibling, ancestor) {
-      if (previousSibling) {
-        var vip = node,
-            vop = node,
-            vim = previousSibling,
-            vom = node.parent.children[0],
-            sip = vip._tree.mod,
-            sop = vop._tree.mod,
-            sim = vim._tree.mod,
-            som = vom._tree.mod,
-            shift;
-        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
-          vom = d3_layout_treeLeft(vom);
-          vop = d3_layout_treeRight(vop);
-          vop._tree.ancestor = node;
-          shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
-          if (shift > 0) {
-            d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
-            sip += shift;
-            sop += shift;
-          }
-          sim += vim._tree.mod;
-          sip += vip._tree.mod;
-          som += vom._tree.mod;
-          sop += vop._tree.mod;
-        }
-        if (vim && !d3_layout_treeRight(vop)) {
-          vop._tree.thread = vim;
-          vop._tree.mod += sim - sop;
-        }
-        if (vip && !d3_layout_treeLeft(vom)) {
-          vom._tree.thread = vip;
-          vom._tree.mod += sip - som;
-          ancestor = node;
-        }
-      }
-      return ancestor;
-    }
-
-    // Initialize temporary layout variables.
-    d3_layout_treeVisitAfter(root, function(node, previousSibling) {
-      node._tree = {
-        ancestor: node,
-        prelim: 0,
-        mod: 0,
-        change: 0,
-        shift: 0,
-        number: previousSibling ? previousSibling._tree.number + 1 : 0
-      };
-    });
-
-    // Compute the layout using Buchheim et al.'s algorithm.
-    firstWalk(root);
-    secondWalk(root, -root._tree.prelim);
-
-    // Compute the left-most, right-most, and depth-most nodes for extents.
-    var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
-        right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
-        deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
-        x0 = left.x - separation(left, right) / 2,
-        x1 = right.x + separation(right, left) / 2,
-        y1 = deep.depth || 1;
-
-    // Clear temporary layout variables; transform x and y.
-    d3_layout_treeVisitAfter(root, function(node) {
-      node.x = (node.x - x0) / (x1 - x0) * size[0];
-      node.y = node.depth / y1 * size[1];
-      delete node._tree;
-    });
-
-    return nodes;
-  }
-
-  tree.separation = function(x) {
-    if (!arguments.length) return separation;
-    separation = x;
-    return tree;
-  };
-
-  tree.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return tree;
-  };
-
-  return d3_layout_hierarchyRebind(tree, hierarchy);
-};
-
-function d3_layout_treeSeparation(a, b) {
-  return a.parent == b.parent ? 1 : 2;
-}
-
-// function d3_layout_treeSeparationRadial(a, b) {
-//   return (a.parent == b.parent ? 1 : 2) / a.depth;
-// }
-
-function d3_layout_treeLeft(node) {
-  return node.children ? node.children[0] : node._tree.thread;
-}
-
-function d3_layout_treeRight(node) {
-  return node.children ? node.children[node.children.length - 1] : node._tree.thread;
-}
-
-function d3_layout_treeSearch(node, compare) {
-  var children = node.children;
-  if (children) {
-    var child,
-        n = children.length,
-        i = -1;
-    while (++i < n) {
-      if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
-        node = child;
-      }
-    }
-  }
-  return node;
-}
-
-function d3_layout_treeRightmost(a, b) {
-  return a.x - b.x;
-}
-
-function d3_layout_treeLeftmost(a, b) {
-  return b.x - a.x;
-}
-
-function d3_layout_treeDeepest(a, b) {
-  return a.depth - b.depth;
-}
-
-function d3_layout_treeVisitAfter(node, callback) {
-  function visit(node, previousSibling) {
-    var children = node.children;
-    if (children) {
-      var child,
-          previousChild = null,
-          i = -1,
-          n = children.length;
-      while (++i < n) {
-        child = children[i];
-        visit(child, previousChild);
-        previousChild = child;
-      }
-    }
-    callback(node, previousSibling);
-  }
-  visit(node, null);
-}
-
-function d3_layout_treeShift(node) {
-  var shift = 0,
-      change = 0,
-      children = node.children,
-      i = children.length,
-      child;
-  while (--i >= 0) {
-    child = children[i]._tree;
-    child.prelim += shift;
-    child.mod += shift;
-    shift += child.shift + (change += child.change);
-  }
-}
-
-function d3_layout_treeMove(ancestor, node, shift) {
-  ancestor = ancestor._tree;
-  node = node._tree;
-  var change = shift / (node.number - ancestor.number);
-  ancestor.change += change;
-  node.change -= change;
-  node.shift += shift;
-  node.prelim += shift;
-  node.mod += shift;
-}
-
-function d3_layout_treeAncestor(vim, node, ancestor) {
-  return vim._tree.ancestor.parent == node.parent
-      ? vim._tree.ancestor
-      : ancestor;
-}
-// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
-// Modified to support a target aspect ratio by Jeff Heer
-d3.layout.treemap = function() {
-  var hierarchy = d3.layout.hierarchy(),
-      round = Math.round,
-      size = [1, 1], // width, height
-      padding = null,
-      pad = d3_layout_treemapPadNull,
-      sticky = false,
-      stickies,
-      ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
-
-  // Compute the area for each child based on value & scale.
-  function scale(children, k) {
-    var i = -1,
-        n = children.length,
-        child,
-        area;
-    while (++i < n) {
-      area = (child = children[i]).value * (k < 0 ? 0 : k);
-      child.area = isNaN(area) || area <= 0 ? 0 : area;
-    }
-  }
-
-  // Recursively arranges the specified node's children into squarified rows.
-  function squarify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        row = [],
-        children = node.children.slice(), // copy-on-write
-        child,
-        best = Infinity, // the best row score so far
-        score, // the current row score
-        u = Math.min(rect.dx, rect.dy), // initial orientation
-        n;
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while ((n = children.length) > 0) {
-      row.push(child = children[n - 1]);
-      row.area += child.area;
-      if ((score = worst(row, u)) <= best) { // continue with this orientation
-        children.pop();
-        best = score;
-      } else { // abort, and try a different orientation
-        row.area -= row.pop().area;
-        position(row, u, rect, false);
-        u = Math.min(rect.dx, rect.dy);
-        row.length = row.area = 0;
-        best = Infinity;
-      }
-    }
-    if (row.length) {
-      position(row, u, rect, true);
-      row.length = row.area = 0;
-    }
-    node.children.forEach(squarify);
-  }
-
-  // Recursively resizes the specified node's children into existing rows.
-  // Preserves the existing layout!
-  function stickify(node) {
-    if (!node.children) return;
-    var rect = pad(node),
-        children = node.children.slice(), // copy-on-write
-        child,
-        row = [];
-    scale(children, rect.dx * rect.dy / node.value);
-    row.area = 0;
-    while (child = children.pop()) {
-      row.push(child);
-      row.area += child.area;
-      if (child.z != null) {
-        position(row, child.z ? rect.dx : rect.dy, rect, !children.length);
-        row.length = row.area = 0;
-      }
-    }
-    node.children.forEach(stickify);
-  }
-
-  // Computes the score for the specified row, as the worst aspect ratio.
-  function worst(row, u) {
-    var s = row.area,
-        r,
-        rmax = 0,
-        rmin = Infinity,
-        i = -1,
-        n = row.length;
-    while (++i < n) {
-      if (!(r = row[i].area)) continue;
-      if (r < rmin) rmin = r;
-      if (r > rmax) rmax = r;
-    }
-    s *= s;
-    u *= u;
-    return s
-        ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
-        : Infinity;
-  }
-
-  // Positions the specified row of nodes. Modifies `rect`.
-  function position(row, u, rect, flush) {
-    var i = -1,
-        n = row.length,
-        x = rect.x,
-        y = rect.y,
-        v = u ? round(row.area / u) : 0,
-        o;
-    if (u == rect.dx) { // horizontal subdivision
-      if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dy = v;
-        x += o.dx = v ? round(o.area / v) : 0;
-      }
-      o.z = true;
-      o.dx += rect.x + rect.dx - x; // rounding error
-      rect.y += v;
-      rect.dy -= v;
-    } else { // vertical subdivision
-      if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
-      while (++i < n) {
-        o = row[i];
-        o.x = x;
-        o.y = y;
-        o.dx = v;
-        y += o.dy = v ? round(o.area / v) : 0;
-      }
-      o.z = false;
-      o.dy += rect.y + rect.dy - y; // rounding error
-      rect.x += v;
-      rect.dx -= v;
-    }
-  }
-
-  function treemap(d) {
-    var nodes = stickies || hierarchy(d),
-        root = nodes[0];
-    root.x = 0;
-    root.y = 0;
-    root.dx = size[0];
-    root.dy = size[1];
-    if (stickies) hierarchy.revalue(root);
-    scale([root], root.dx * root.dy / root.value);
-    (stickies ? stickify : squarify)(root);
-    if (sticky) stickies = nodes;
-    return nodes;
-  }
-
-  treemap.size = function(x) {
-    if (!arguments.length) return size;
-    size = x;
-    return treemap;
-  };
-
-  treemap.padding = function(x) {
-    if (!arguments.length) return padding;
-
-    function padFunction(node) {
-      var p = x.call(treemap, node, node.depth);
-      return p == null
-          ? d3_layout_treemapPadNull(node)
-          : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
-    }
-
-    function padConstant(node) {
-      return d3_layout_treemapPad(node, x);
-    }
-
-    var type;
-    pad = (padding = x) == null ? d3_layout_treemapPadNull
-        : (type = typeof x) === "function" ? padFunction
-        : type === "number" ? (x = [x, x, x, x], padConstant)
-        : padConstant;
-    return treemap;
-  };
-
-  treemap.round = function(x) {
-    if (!arguments.length) return round != Number;
-    round = x ? Math.round : Number;
-    return treemap;
-  };
-
-  treemap.sticky = function(x) {
-    if (!arguments.length) return sticky;
-    sticky = x;
-    stickies = null;
-    return treemap;
-  };
-
-  treemap.ratio = function(x) {
-    if (!arguments.length) return ratio;
-    ratio = x;
-    return treemap;
-  };
-
-  return d3_layout_hierarchyRebind(treemap, hierarchy);
-};
-
-function d3_layout_treemapPadNull(node) {
-  return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
-}
-
-function d3_layout_treemapPad(node, padding) {
-  var x = node.x + padding[3],
-      y = node.y + padding[0],
-      dx = node.dx - padding[1] - padding[3],
-      dy = node.dy - padding[0] - padding[2];
-  if (dx < 0) { x += dx / 2; dx = 0; }
-  if (dy < 0) { y += dy / 2; dy = 0; }
-  return {x: x, y: y, dx: dx, dy: dy};
-}
-})();
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.time.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.time.js
deleted file mode 100644
index e1c0831c88e2984fbabc189a5347238bde72abb2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.time.js
+++ /dev/null
@@ -1,692 +0,0 @@
-(function(){d3.time = {};
-
-var d3_time = Date;
-d3.time.format = function(template) {
-  var n = template.length;
-
-  function format(date) {
-    var string = [],
-        i = -1,
-        j = 0,
-        c,
-        f;
-    while (++i < n) {
-      if (template.charCodeAt(i) == 37) {
-        string.push(
-            template.substring(j, i),
-            (f = d3_time_formats[c = template.charAt(++i)])
-            ? f(date) : c);
-        j = i + 1;
-      }
-    }
-    string.push(template.substring(j, i));
-    return string.join("");
-  }
-
-  format.parse = function(string) {
-    var date = new d3_time(1900, 0, 1),
-        i = d3_time_parse(date, template, string, 0);
-    if (i != string.length) return null;
-    if (date.hour12) {
-      var hours = date.getHours() % 12;
-      date.setHours(date.hour12pm ? hours + 12 : hours);
-    }
-    delete date.hour12;
-    delete date.hour12pm;
-    return date;
-  };
-
-  format.toString = function() {
-    return template;
-  };
-
-  return format;
-};
-
-function d3_time_parse(date, template, string, j) {
-  var c,
-      p,
-      i = 0,
-      n = template.length,
-      m = string.length;
-  while (i < n) {
-    if (j >= m) return -1;
-    c = template.charCodeAt(i++);
-    if (c == 37) {
-      p = d3_time_parsers[template.charAt(i++)];
-      if (!p || ((j = p(date, string, j)) < 0)) return -1;
-    } else if (c != string.charCodeAt(j++)) {
-      return -1;
-    }
-  }
-  return j;
-}
-
-var d3_time_zfill2 = d3.format("02d"),
-    d3_time_zfill3 = d3.format("03d"),
-    d3_time_zfill4 = d3.format("04d"),
-    d3_time_sfill2 = d3.format("2d");
-
-var d3_time_formats = {
-  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
-  A: function(d) { return d3_time_weekdays[d.getDay()]; },
-  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
-  B: function(d) { return d3_time_months[d.getMonth()]; },
-  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
-  d: function(d) { return d3_time_zfill2(d.getDate()); },
-  e: function(d) { return d3_time_sfill2(d.getDate()); },
-  H: function(d) { return d3_time_zfill2(d.getHours()); },
-  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
-  j: d3_time_dayOfYear,
-  L: function(d) { return d3_time_zfill3(d.getMilliseconds()); },
-  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
-  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
-  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
-  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
-  U: d3_time_weekNumberSunday,
-  w: function(d) { return d.getDay(); },
-  W: d3_time_weekNumberMonday,
-  x: d3.time.format("%m/%d/%y"),
-  X: d3.time.format("%H:%M:%S"),
-  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
-  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
-  Z: d3_time_zone,
-  "%": function(d) { return "%"; }
-};
-
-var d3_time_parsers = {
-  a: d3_time_parseWeekdayAbbrev,
-  A: d3_time_parseWeekday,
-  b: d3_time_parseMonthAbbrev,
-  B: d3_time_parseMonth,
-  c: d3_time_parseLocaleFull,
-  d: d3_time_parseDay,
-  e: d3_time_parseDay,
-  H: d3_time_parseHour24,
-  I: d3_time_parseHour12,
-  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
-  L: d3_time_parseMilliseconds,
-  m: d3_time_parseMonthNumber,
-  M: d3_time_parseMinutes,
-  p: d3_time_parseAmPm,
-  S: d3_time_parseSeconds,
-  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
-  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
-  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
-  x: d3_time_parseLocaleDate,
-  X: d3_time_parseLocaleTime,
-  y: d3_time_parseYear,
-  Y: d3_time_parseFullYear
-  // ,
-  // Z: function(d, s, i) { /*TODO time zone */ return i; },
-  // "%": function(d, s, i) { /*TODO literal % */ return i; }
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekdayAbbrev(date, string, i) {
-  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
-}
-
-var d3_time_weekdayAbbrevLookup = {
-  sun: 3,
-  mon: 3,
-  tue: 3,
-  wed: 3,
-  thu: 3,
-  fri: 3,
-  sat: 3
-};
-
-// Note: weekday is validated, but does not set the date.
-function d3_time_parseWeekday(date, string, i) {
-  d3_time_weekdayRe.lastIndex = 0;
-  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
-  return n ? i += n[0].length : -1;
-}
-
-var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
-
-var d3_time_weekdays = [
-  "Sunday",
-  "Monday",
-  "Tuesday",
-  "Wednesday",
-  "Thursday",
-  "Friday",
-  "Saturday"
-];
-
-function d3_time_parseMonthAbbrev(date, string, i) {
-  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
-  return n == null ? -1 : (date.setMonth(n), i);
-}
-
-var d3_time_monthAbbrevLookup = {
-  jan: 0,
-  feb: 1,
-  mar: 2,
-  apr: 3,
-  may: 4,
-  jun: 5,
-  jul: 6,
-  aug: 7,
-  sep: 8,
-  oct: 9,
-  nov: 10,
-  dec: 11
-};
-
-function d3_time_parseMonth(date, string, i) {
-  d3_time_monthRe.lastIndex = 0;
-  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
-  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
-}
-
-var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
-
-var d3_time_monthLookup = {
-  january: 0,
-  february: 1,
-  march: 2,
-  april: 3,
-  may: 4,
-  june: 5,
-  july: 6,
-  august: 7,
-  september: 8,
-  october: 9,
-  november: 10,
-  december: 11
-};
-
-var d3_time_months = [
-  "January",
-  "February",
-  "March",
-  "April",
-  "May",
-  "June",
-  "July",
-  "August",
-  "September",
-  "October",
-  "November",
-  "December"
-];
-
-function d3_time_parseLocaleFull(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
-}
-
-function d3_time_parseLocaleDate(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
-}
-
-function d3_time_parseLocaleTime(date, string, i) {
-  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
-}
-
-function d3_time_parseFullYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
-  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseYear(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_century() {
-  return ~~(new Date().getFullYear() / 1000) * 1000;
-}
-
-function d3_time_parseMonthNumber(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
-}
-
-function d3_time_parseDay(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [0,23].
-function d3_time_parseHour24(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't validate that the hour is in the range [1,12].
-function d3_time_parseHour12(date, string, i) {
-  date.hour12 = true;
-  return d3_time_parseHour24(date, string, i);
-}
-
-function d3_time_parseMinutes(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseSeconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
-  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
-}
-
-function d3_time_parseMilliseconds(date, string, i) {
-  d3_time_numberRe.lastIndex = 0;
-  var n = d3_time_numberRe.exec(string.substring(i, i + 3));
-  return n ? (date.setMilliseconds(+n[0]), i += n[0].length) : -1;
-}
-
-// Note: we don't look at the next directive.
-var d3_time_numberRe = /\s*\d+/;
-
-function d3_time_parseAmPm(date, string, i) {
-  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
-  return n == null ? -1 : (date.hour12pm = n, i);
-}
-
-var d3_time_amPmLookup = {
-  am: 0,
-  pm: 1
-};
-
-function d3_time_year(d) {
-  return new d3_time(d.getFullYear(), 0, 1);
-}
-
-function d3_time_daysElapsed(d0, d1) {
-  return ~~((d1 - d0) / 864e5 - (d1.getTimezoneOffset() - d0.getTimezoneOffset()) / 1440);
-}
-
-function d3_time_dayOfYear(d) {
-  return d3_time_zfill3(1 + d3_time_daysElapsed(d3_time_year(d), d));
-}
-
-function d3_time_weekNumberSunday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + d0.getDay()) / 7));
-}
-
-function d3_time_weekNumberMonday(d) {
-  var d0 = d3_time_year(d);
-  return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + (d0.getDay() + 6) % 7) / 7));
-}
-
-// TODO table of time zone offset names?
-function d3_time_zone(d) {
-  var z = d.getTimezoneOffset(),
-      zs = z > 0 ? "-" : "+",
-      zh = ~~(Math.abs(z) / 60),
-      zm = Math.abs(z) % 60;
-  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
-}
-d3.time.format.utc = function(template) {
-  var local = d3.time.format(template);
-
-  function format(date) {
-    try {
-      d3_time = d3_time_format_utc;
-      var utc = new d3_time();
-      utc._ = date;
-      return local(utc);
-    } finally {
-      d3_time = Date;
-    }
-  }
-
-  format.parse = function(string) {
-    try {
-      d3_time = d3_time_format_utc;
-      var date = local.parse(string);
-      return date && date._;
-    } finally {
-      d3_time = Date;
-    }
-  };
-
-  format.toString = local.toString;
-
-  return format;
-};
-
-function d3_time_format_utc() {
-  this._ = new Date(Date.UTC.apply(this, arguments));
-}
-
-d3_time_format_utc.prototype = {
-  getDate: function() { return this._.getUTCDate(); },
-  getDay: function() { return this._.getUTCDay(); },
-  getFullYear: function() { return this._.getUTCFullYear(); },
-  getHours: function() { return this._.getUTCHours(); },
-  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
-  getMinutes: function() { return this._.getUTCMinutes(); },
-  getMonth: function() { return this._.getUTCMonth(); },
-  getSeconds: function() { return this._.getUTCSeconds(); },
-  getTimezoneOffset: function() { return 0; },
-  valueOf: function() { return this._.getTime(); },
-  setDate: function(x) { this._.setUTCDate(x); },
-  setDay: function(x) { this._.setUTCDay(x); },
-  setFullYear: function(x) { this._.setUTCFullYear(x); },
-  setHours: function(x) { this._.setUTCHours(x); },
-  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
-  setMinutes: function(x) { this._.setUTCMinutes(x); },
-  setMonth: function(x) { this._.setUTCMonth(x); },
-  setSeconds: function(x) { this._.setUTCSeconds(x); }
-};
-var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
-
-d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso;
-
-function d3_time_formatIsoNative(date) {
-  return date.toISOString();
-}
-
-d3_time_formatIsoNative.parse = function(string) {
-  return new Date(string);
-};
-
-d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
-function d3_time_range(floor, step, number) {
-  return function(t0, t1, dt) {
-    var time = floor(t0), times = [];
-    if (time < t0) step(time);
-    if (dt > 1) {
-      while (time < t1) {
-        var date = new Date(+time);
-        if (!(number(date) % dt)) times.push(date);
-        step(time);
-      }
-    } else {
-      while (time < t1) times.push(new Date(+time)), step(time);
-    }
-    return times;
-  };
-}
-d3.time.second = function(date) {
-  return new Date(~~(date / 1e3) * 1e3);
-};
-
-d3.time.second.utc = d3.time.second;
-d3.time.seconds = d3_time_range(d3.time.second, function(date) {
-  date.setTime(date.getTime() + 1e3);
-}, function(date) {
-  return date.getSeconds();
-});
-
-d3.time.seconds.utc = d3.time.seconds;
-d3.time.minute = function(date) {
-  return new Date(~~(date / 6e4) * 6e4);
-};
-
-d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getMinutes();
-});
-
-d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
-  return date.getUTCMinutes();
-});
-
-function d3_time_minutesStep(date) {
-  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
-}
-d3.time.hour = function(date) {
-  var offset = date.getTimezoneOffset() / 60;
-  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
-};
-
-d3.time.hour.utc = function(date) {
-  return new Date(~~(date / 36e5) * 36e5);
-};
-d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
-  return date.getHours();
-});
-
-d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
-  return date.getUTCHours();
-});
-
-function d3_time_hoursStep(date) {
-  date.setTime(date.getTime() + 36e5);
-}
-d3.time.day = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
-};
-
-d3.time.day.utc = function(date) {
-  return new Date(~~(date / 864e5) * 864e5);
-};
-d3.time.days = d3_time_range(d3.time.day, function(date) {
-  date.setDate(date.getDate() + 1);
-}, function(date) {
-  return date.getDate() - 1;
-});
-
-d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 1);
-}, function(date) {
-  return date.getUTCDate() - 1;
-});
-d3.time.week = function(date) {
-  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
-  return date;
-};
-
-d3.time.week.utc = function(date) {
-  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
-  return date;
-};
-d3.time.weeks = d3_time_range(d3.time.week, function(date) {
-  date.setDate(date.getDate() + 7);
-}, function(date) {
-  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
-});
-
-d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
-  date.setUTCDate(date.getUTCDate() + 7);
-}, function(date) {
-  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
-});
-d3.time.month = function(date) {
-  return new Date(date.getFullYear(), date.getMonth(), 1);
-};
-
-d3.time.month.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
-};
-d3.time.months = d3_time_range(d3.time.month, function(date) {
-  date.setMonth(date.getMonth() + 1);
-}, function(date) {
-  return date.getMonth();
-});
-
-d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
-  date.setUTCMonth(date.getUTCMonth() + 1);
-}, function(date) {
-  return date.getUTCMonth();
-});
-d3.time.year = function(date) {
-  return new Date(date.getFullYear(), 0, 1);
-};
-
-d3.time.year.utc = function(date) {
-  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
-};
-d3.time.years = d3_time_range(d3.time.year, function(date) {
-  date.setFullYear(date.getFullYear() + 1);
-}, function(date) {
-  return date.getFullYear();
-});
-
-d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
-  date.setUTCFullYear(date.getUTCFullYear() + 1);
-}, function(date) {
-  return date.getUTCFullYear();
-});
-// TODO nice
-function d3_time_scale(linear, methods, format) {
-
-  function scale(x) {
-    return linear(x);
-  }
-
-  scale.invert = function(x) {
-    return d3_time_scaleDate(linear.invert(x));
-  };
-
-  scale.domain = function(x) {
-    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
-    linear.domain(x);
-    return scale;
-  };
-
-  scale.ticks = function(m, k) {
-    var extent = d3_time_scaleExtent(scale.domain());
-    if (typeof m !== "function") {
-      var span = extent[1] - extent[0],
-          target = span / m,
-          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
-      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
-      m = methods[i];
-      k = m[1];
-      m = m[0];
-    }
-    return m(extent[0], extent[1], k);
-  };
-
-  scale.tickFormat = function() {
-    return format;
-  };
-
-  scale.copy = function() {
-    return d3_time_scale(linear.copy(), methods, format);
-  };
-
-  // TOOD expose d3_scale_linear_rebind?
-  scale.range = d3.rebind(scale, linear.range);
-  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
-  scale.interpolate = d3.rebind(scale, linear.interpolate);
-  scale.clamp = d3.rebind(scale, linear.clamp);
-
-  return scale;
-}
-
-// TODO expose d3_scaleExtent?
-function d3_time_scaleExtent(domain) {
-  var start = domain[0], stop = domain[domain.length - 1];
-  return start < stop ? [start, stop] : [stop, start];
-}
-
-function d3_time_scaleDate(t) {
-  return new Date(t);
-}
-
-function d3_time_scaleFormat(formats) {
-  return function(date) {
-    var i = formats.length - 1, f = formats[i];
-    while (!f[1](date)) f = formats[--i];
-    return f[0](date);
-  };
-}
-
-var d3_time_scaleSteps = [
-  1e3,    // 1-second
-  5e3,    // 5-second
-  15e3,   // 15-second
-  3e4,    // 30-second
-  6e4,    // 1-minute
-  3e5,    // 5-minute
-  9e5,    // 15-minute
-  18e5,   // 30-minute
-  36e5,   // 1-hour
-  108e5,  // 3-hour
-  216e5,  // 6-hour
-  432e5,  // 12-hour
-  864e5,  // 1-day
-  1728e5, // 2-day
-  6048e5, // 1-week
-  1728e6, // 1-month
-  7776e6, // 3-month
-  31536e6 // 1-year
-];
-
-var d3_time_scaleLocalMethods = [
-  [d3.time.seconds, 1],
-  [d3.time.seconds, 5],
-  [d3.time.seconds, 15],
-  [d3.time.seconds, 30],
-  [d3.time.minutes, 1],
-  [d3.time.minutes, 5],
-  [d3.time.minutes, 15],
-  [d3.time.minutes, 30],
-  [d3.time.hours, 1],
-  [d3.time.hours, 3],
-  [d3.time.hours, 6],
-  [d3.time.hours, 12],
-  [d3.time.days, 1],
-  [d3.time.days, 2],
-  [d3.time.weeks, 1],
-  [d3.time.months, 1],
-  [d3.time.months, 3],
-  [d3.time.years, 1]
-];
-
-var d3_time_scaleLocalFormats = [
-  [d3.time.format("%Y"), function(d) { return true; }],
-  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
-  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
-  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
-  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
-  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
-  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
-];
-
-var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
-
-d3.time.scale = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
-};
-var d3_time_scaleUTCMethods = [
-  [d3.time.seconds.utc, 1],
-  [d3.time.seconds.utc, 5],
-  [d3.time.seconds.utc, 15],
-  [d3.time.seconds.utc, 30],
-  [d3.time.minutes.utc, 1],
-  [d3.time.minutes.utc, 5],
-  [d3.time.minutes.utc, 15],
-  [d3.time.minutes.utc, 30],
-  [d3.time.hours.utc, 1],
-  [d3.time.hours.utc, 3],
-  [d3.time.hours.utc, 6],
-  [d3.time.hours.utc, 12],
-  [d3.time.days.utc, 1],
-  [d3.time.days.utc, 2],
-  [d3.time.weeks.utc, 1],
-  [d3.time.months.utc, 1],
-  [d3.time.months.utc, 3],
-  [d3.time.years.utc, 1]
-];
-
-var d3_time_scaleUTCFormats = [
-  [d3.time.format.utc("%Y"), function(d) { return true; }],
-  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
-  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
-  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
-  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
-  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
-];
-
-var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
-
-d3.time.scale.utc = function() {
-  return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
-};
-})();
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.tsv.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.tsv.js
deleted file mode 100644
index 8d9a5e4f7038bfe558e2cca878854d234b770b8d..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/d3.tsv.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * TSV Parser from:
- *   https://github.com/vlandham/d3.tsv
- */
-(function(){d3.tsv = function(url, callback) {
-  d3.text(url, "text/tab-separated-values", function(text) {
-    callback(text && d3.tsv.parse(text, "\t"));
-  });
-};
-
-d3.tsv.version = "0.0.2"
-d3.tsv.parse = function(text, separator) {
-  var header;
-  return separator && d3.tsv.parseRows(text, separator, function(row, i) {
-    if (i) {
-      var o = {}, j = -1, m = header.length;
-      while (++j < m) o[header[j]] = row[j];
-      return o;
-    } else {
-      header = row;
-      return null;
-    }
-  });
-};
-
-d3.tsv.parseRows = function(text, separator, f) {
-  var EOL = {}, // sentinel value for end-of-line
-      EOF = {}, // sentinel value for end-of-file
-      rows = [], // output rows
-      re = new RegExp("\r\n|[" + separator + "\r\n]", "g"), // field separator regex
-      separatorCode = separator.charCodeAt(0), // code to match separator with
-      n = 0, // the current line number
-      t, // the current token
-      eol; // is the current token followed by EOL?
-
-  re.lastIndex = 0; // work-around bug in FF 3.6
-
-  /** @private Returns the next token. */
-  function token() {
-    if (re.lastIndex >= text.length) return EOF; // special case: end of file
-    if (eol) { eol = false; return EOL; } // special case: end of line
-
-    // special case: quotes
-    var j = re.lastIndex;
-    if (text.charCodeAt(j) === 34) {
-      var i = j;
-      while (i++ < text.length) {
-        if (text.charCodeAt(i) === 34) {
-          if (text.charCodeAt(i + 1) !== 34) break;
-          i++;
-        }
-      }
-      re.lastIndex = i + 2;
-      var c = text.charCodeAt(i + 1);
-      if (c === 13) {
-        eol = true;
-        if (text.charCodeAt(i + 2) === 10) re.lastIndex++;
-      } else if (c === 10) {
-        eol = true;
-      }
-      return text.substring(j + 1, i).replace(/""/g, "\"");
-    }
-
-    // common case
-    var m = re.exec(text);
-    if (m) {
-      eol = m[0].charCodeAt(0) !== separatorCode;
-      return text.substring(j, m.index);
-    }
-    re.lastIndex = text.length;
-    return text.substring(j);
-  }
-
-  while ((t = token()) !== EOF) {
-    var a = [];
-    while ((t !== EOL) && (t !== EOF)) {
-      a.push(t);
-      t = token();
-    }
-    if (f && !(a = f(a, n++))) continue;
-    rows.push(a);
-  }
-
-  return rows;
-};
-d3.tsv.format = function(rows) {
-  return rows.map(function (row) {
-    return d3_formatRow(row, "\t");
-  }).join("\n");
-};
-
-function d3_formatRow(row, separator) {
-  return row.map(d3_formatValue).join(separator);
-}
-
-function d3_formatValue(text) {
-  return /[",\n]/.test(text)
-      ? "\"" + text.replace(/\"/g, "\"\"") + "\""
-      : text;
-}
-})();
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/infra.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/infra.js
deleted file mode 100644
index c292b17ec147d3eeddc2f649802a0b0d64f18148..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/infra.js
+++ /dev/null
@@ -1,70 +0,0 @@
-if (!Array.prototype.filter)
-{
-  Array.prototype.filter = function(fun /*, thisp*/)
-  {
-    var len = this.length;
-    if (typeof fun != "function")
-      throw new TypeError();
-
-    var res = new Array();
-    var thisp = arguments[1];
-    for (var i = 0; i < len; i++)
-    {
-      if (i in this)
-      {
-        var val = this[i]; // in case fun mutates this
-        if (fun.call(thisp, val, i, this))
-          res.push(val);
-      }
-    }
-
-    return res;
-  };
-}
-
-if (!Array.prototype.search)
-{
-  Array.prototype.search = function(fun /*, thisp*/)
-  {
-    var len2 = this.length;
-    if (typeof fun != "function")
-      throw new TypeError();
-
-    var res2 = new Array();
-    var thisp = arguments[1];
-    for (var i = 0; i < len2; i++)
-    {
-      if (i in this)
-      {
-        var val2 = this[i]; // in case fun mutates this
-        if (fun.call(thisp, val2, i, this))
-          res2.push(val2);
-      }
-    }
-
-    return res2;
-  };
-}
-
-if (!Function.prototype.curry) 
-{ 
-	(function () 
-	{
-		var slice = Array.prototype.slice;
-		Function.prototype.curry = function () 
-		{
-			var target = this; 
-			var args = slice.call(arguments);
-			return function () 
-			{
-				var allArgs = args;
-				if (arguments.length > 0) 
-				{ 
-					allArgs = args.concat(slice.call(arguments));
-				}
-				return target.apply(this, allArgs); 
-			};
-		}; 
-	}())
-};
-
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/jquery.dataTables.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/jquery.dataTables.js
deleted file mode 100644
index ae5d1750d90c90f197ff742d72c3ce5da3efa0b0..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/jquery.dataTables.js
+++ /dev/null
@@ -1,11863 +0,0 @@
-/**
- * @summary     DataTables
- * @description Paginate, search and sort HTML tables
- * @version     1.9.2
- * @file        jquery.dataTables.js
- * @author      Allan Jardine (www.sprymedia.co.uk)
- * @contact     www.sprymedia.co.uk/contact
- *
- * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved.
- *
- * This source file is free software, under either the GPL v2 license or a
- * BSD style license, available at:
- *   http://datatables.net/license_gpl2
- *   http://datatables.net/license_bsd
- * 
- * This source file 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 license files for details.
- * 
- * For details please refer to: http://www.datatables.net
- */
-
-/*jslint evil: true, undef: true, browser: true */
-/*globals $, jQuery,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros*/
-
-(/** @lends <global> */function($, window, document, undefined) {
-	/** 
-	 * DataTables is a plug-in for the jQuery Javascript library. It is a 
-	 * highly flexible tool, based upon the foundations of progressive 
-	 * enhancement, which will add advanced interaction controls to any 
-	 * HTML table. For a full list of features please refer to
-	 * <a href="http://datatables.net">DataTables.net</a>.
-	 *
-	 * Note that the <i>DataTable</i> object is not a global variable but is
-	 * aliased to <i>jQuery.fn.DataTable</i> and <i>jQuery.fn.dataTable</i> through which 
-	 * it may be  accessed.
-	 *
-	 *  @class
-	 *  @param {object} [oInit={}] Configuration object for DataTables. Options
-	 *    are defined by {@link DataTable.defaults}
-	 *  @requires jQuery 1.3+
-	 * 
-	 *  @example
-	 *    // Basic initialisation
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable();
-	 *    } );
-	 *  
-	 *  @example
-	 *    // Initialisation with configuration options - in this case, disable
-	 *    // pagination and sorting.
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable( {
-	 *        "bPaginate": false,
-	 *        "bSort": false 
-	 *      } );
-	 *    } );
-	 */
-	var DataTable = function( oInit )
-	{
-		
-		
-		/**
-		 * Add a column to the list used for the table with default values
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} nTh The th element for this column
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAddColumn( oSettings, nTh )
-		{
-			var oDefaults = DataTable.defaults.columns;
-			var iCol = oSettings.aoColumns.length;
-			var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {
-				"sSortingClass": oSettings.oClasses.sSortable,
-				"sSortingClassJUI": oSettings.oClasses.sSortJUI,
-				"nTh": nTh ? nTh : document.createElement('th'),
-				"sTitle":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',
-				"aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
-				"mDataProp": oDefaults.mDataProp ? oDefaults.oDefaults : iCol
-			} );
-			oSettings.aoColumns.push( oCol );
-			
-			/* Add a column specific filter */
-			if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null )
-			{
-				oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch );
-			}
-			else
-			{
-				var oPre = oSettings.aoPreSearchCols[ iCol ];
-				
-				/* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */
-				if ( oPre.bRegex === undefined )
-				{
-					oPre.bRegex = true;
-				}
-				
-				if ( oPre.bSmart === undefined )
-				{
-					oPre.bSmart = true;
-				}
-				
-				if ( oPre.bCaseInsensitive === undefined )
-				{
-					oPre.bCaseInsensitive = true;
-				}
-			}
-			
-			/* Use the column options function to initialise classes etc */
-			_fnColumnOptions( oSettings, iCol, null );
-		}
-		
-		
-		/**
-		 * Apply options for a column
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iCol column index to consider
-		 *  @param {object} oOptions object with sType, bVisible and bSearchable
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnColumnOptions( oSettings, iCol, oOptions )
-		{
-			var oCol = oSettings.aoColumns[ iCol ];
-			
-			/* User specified column options */
-			if ( oOptions !== undefined && oOptions !== null )
-			{
-				if ( oOptions.sType !== undefined )
-				{
-					oCol.sType = oOptions.sType;
-					oCol._bAutoType = false;
-				}
-				
-				$.extend( oCol, oOptions );
-				_fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
-		
-				/* iDataSort to be applied (backwards compatibility), but aDataSort will take
-				 * priority if defined
-				 */
-				if ( oOptions.iDataSort !== undefined )
-				{
-					oCol.aDataSort = [ oOptions.iDataSort ];
-				}
-				_fnMap( oCol, oOptions, "aDataSort" );
-			}
-		
-			/* Cache the data get and set functions for speed */
-			oCol.fnGetData = _fnGetObjectDataFn( oCol.mDataProp );
-			oCol.fnSetData = _fnSetObjectDataFn( oCol.mDataProp );
-			
-			/* Feature sorting overrides column specific when off */
-			if ( !oSettings.oFeatures.bSort )
-			{
-				oCol.bSortable = false;
-			}
-			
-			/* Check that the class assignment is correct for sorting */
-			if ( !oCol.bSortable ||
-				 ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
-			{
-				oCol.sSortingClass = oSettings.oClasses.sSortableNone;
-				oCol.sSortingClassJUI = "";
-			}
-			else if ( oCol.bSortable ||
-			          ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
-			{
-			  oCol.sSortingClass = oSettings.oClasses.sSortable;
-			  oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI;
-			}
-			else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 )
-			{
-				oCol.sSortingClass = oSettings.oClasses.sSortableAsc;
-				oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed;
-			}
-			else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 )
-			{
-				oCol.sSortingClass = oSettings.oClasses.sSortableDesc;
-				oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed;
-			}
-		}
-		
-		
-		/**
-		 * Adjust the table column widths for new data. Note: you would probably want to 
-		 * do a redraw after calling this function!
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAdjustColumnSizing ( oSettings )
-		{
-			/* Not interested in doing column width calculation if autowidth is disabled */
-			if ( oSettings.oFeatures.bAutoWidth === false )
-			{
-				return false;
-			}
-			
-			_fnCalculateColumnWidths( oSettings );
-			for ( var i=0 , iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oSettings.aoColumns[i].nTh.style.width = oSettings.aoColumns[i].sWidth;
-			}
-		}
-		
-		
-		/**
-		 * Covert the index of a visible column to the index in the data array (take account
-		 * of hidden columns)
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iMatch Visible column index to lookup
-		 *  @returns {int} i the data index
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnVisibleToColumnIndex( oSettings, iMatch )
-		{
-			var iColumn = -1;
-			
-			for ( var i=0 ; i<oSettings.aoColumns.length ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible === true )
-				{
-					iColumn++;
-				}
-				
-				if ( iColumn == iMatch )
-				{
-					return i;
-				}
-			}
-			
-			return null;
-		}
-		
-		
-		/**
-		 * Covert the index of an index in the data array and convert it to the visible
-		 *   column index (take account of hidden columns)
-		 *  @param {int} iMatch Column index to lookup
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {int} i the data index
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnColumnIndexToVisible( oSettings, iMatch )
-		{
-			var iVisible = -1;
-			for ( var i=0 ; i<oSettings.aoColumns.length ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible === true )
-				{
-					iVisible++;
-				}
-				
-				if ( i == iMatch )
-				{
-					return oSettings.aoColumns[i].bVisible === true ? iVisible : null;
-				}
-			}
-			
-			return null;
-		}
-		
-		
-		/**
-		 * Get the number of visible columns
-		 *  @returns {int} i the number of visible columns
-		 *  @param {object} oS dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnVisbleColumns( oS )
-		{
-			var iVis = 0;
-			for ( var i=0 ; i<oS.aoColumns.length ; i++ )
-			{
-				if ( oS.aoColumns[i].bVisible === true )
-				{
-					iVis++;
-				}
-			}
-			return iVis;
-		}
-		
-		
-		/**
-		 * Get the sort type based on an input string
-		 *  @param {string} sData data we wish to know the type of
-		 *  @returns {string} type (defaults to 'string' if no type can be detected)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDetectType( sData )
-		{
-			var aTypes = DataTable.ext.aTypes;
-			var iLen = aTypes.length;
-			
-			for ( var i=0 ; i<iLen ; i++ )
-			{
-				var sType = aTypes[i]( sData );
-				if ( sType !== null )
-				{
-					return sType;
-				}
-			}
-			
-			return 'string';
-		}
-		
-		
-		/**
-		 * Figure out how to reorder a display list
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns array {int} aiReturn index list for reordering
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnReOrderIndex ( oSettings, sColumns )
-		{
-			var aColumns = sColumns.split(',');
-			var aiReturn = [];
-			
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				for ( var j=0 ; j<iLen ; j++ )
-				{
-					if ( oSettings.aoColumns[i].sName == aColumns[j] )
-					{
-						aiReturn.push( j );
-						break;
-					}
-				}
-			}
-			
-			return aiReturn;
-		}
-		
-		
-		/**
-		 * Get the column ordering that DataTables expects
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {string} comma separated list of names
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnColumnOrdering ( oSettings )
-		{
-			var sNames = '';
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				sNames += oSettings.aoColumns[i].sName+',';
-			}
-			if ( sNames.length == iLen )
-			{
-				return "";
-			}
-			return sNames.slice(0, -1);
-		}
-		
-		
-		/**
-		 * Take the column definitions and static columns arrays and calculate how
-		 * they relate to column indexes. The callback function will then apply the
-		 * definition found for a column to a suitable configuration object.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {array} aoColDefs The aoColumnDefs array that is to be applied
-		 *  @param {array} aoCols The aoColumns array that defines columns individually
-		 *  @param {function} fn Callback function - takes two parameters, the calculated
-		 *    column index and the definition for that column.
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
-		{
-			var i, iLen, j, jLen, k, kLen;
-		
-			// Column definitions with aTargets
-			if ( aoColDefs )
-			{
-				/* Loop over the definitions array - loop in reverse so first instance has priority */
-				for ( i=aoColDefs.length-1 ; i>=0 ; i-- )
-				{
-					/* Each definition can target multiple columns, as it is an array */
-					var aTargets = aoColDefs[i].aTargets;
-					if ( !$.isArray( aTargets ) )
-					{
-						_fnLog( oSettings, 1, 'aTargets must be an array of targets, not a '+(typeof aTargets) );
-					}
-		
-					for ( j=0, jLen=aTargets.length ; j<jLen ; j++ )
-					{
-						if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )
-						{
-							/* Add columns that we don't yet know about */
-							while( oSettings.aoColumns.length <= aTargets[j] )
-							{
-								_fnAddColumn( oSettings );
-							}
-		
-							/* Integer, basic index */
-							fn( aTargets[j], aoColDefs[i] );
-						}
-						else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )
-						{
-							/* Negative integer, right to left column counting */
-							fn( oSettings.aoColumns.length+aTargets[j], aoColDefs[i] );
-						}
-						else if ( typeof aTargets[j] === 'string' )
-						{
-							/* Class name matching on TH element */
-							for ( k=0, kLen=oSettings.aoColumns.length ; k<kLen ; k++ )
-							{
-								if ( aTargets[j] == "_all" ||
-								     $(oSettings.aoColumns[k].nTh).hasClass( aTargets[j] ) )
-								{
-									fn( k, aoColDefs[i] );
-								}
-							}
-						}
-					}
-				}
-			}
-		
-			// Statically defined columns array
-			if ( aoCols )
-			{
-				for ( i=0, iLen=aoCols.length ; i<iLen ; i++ )
-				{
-					fn( i, aoCols[i] );
-				}
-			}
-		}
-		
-		
-		
-		/**
-		 * Add a data array to the table, creating DOM node etc. This is the parallel to 
-		 * _fnGatherData, but for adding rows from a Javascript source, rather than a
-		 * DOM source.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {array} aData data array to be added
-		 *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAddData ( oSettings, aDataSupplied )
-		{
-			var oCol;
-			
-			/* Take an independent copy of the data source so we can bash it about as we wish */
-			var aDataIn = ($.isArray(aDataSupplied)) ?
-				aDataSupplied.slice() :
-				$.extend( true, {}, aDataSupplied );
-			
-			/* Create the object for storing information about this new row */
-			var iRow = oSettings.aoData.length;
-			var oData = $.extend( true, {}, DataTable.models.oRow );
-			oData._aData = aDataIn;
-			oSettings.aoData.push( oData );
-		
-			/* Create the cells */
-			var nTd, sThisType;
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oCol = oSettings.aoColumns[i];
-		
-				/* Use rendered data for filtering/sorting */
-				if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mDataProp !== null )
-				{
-					_fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) );
-				}
-				else
-				{
-					_fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );
-				}
-				
-				/* See if we should auto-detect the column type */
-				if ( oCol._bAutoType && oCol.sType != 'string' )
-				{
-					/* Attempt to auto detect the type - same as _fnGatherData() */
-					var sVarType = _fnGetCellData( oSettings, iRow, i, 'type' );
-					if ( sVarType !== null && sVarType !== '' )
-					{
-						sThisType = _fnDetectType( sVarType );
-						if ( oCol.sType === null )
-						{
-							oCol.sType = sThisType;
-						}
-						else if ( oCol.sType != sThisType && oCol.sType != "html" )
-						{
-							/* String is always the 'fallback' option */
-							oCol.sType = 'string';
-						}
-					}
-				}
-			}
-			
-			/* Add to the display array */
-			oSettings.aiDisplayMaster.push( iRow );
-		
-			/* Create the DOM imformation */
-			if ( !oSettings.oFeatures.bDeferRender )
-			{
-				_fnCreateTr( oSettings, iRow );
-			}
-		
-			return iRow;
-		}
-		
-		
-		/**
-		 * Read in the data from the target table from the DOM
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGatherData( oSettings )
-		{
-			var iLoop, i, iLen, j, jLen, jInner,
-			 	nTds, nTrs, nTd, aLocalData, iThisIndex,
-				iRow, iRows, iColumn, iColumns, sNodeName,
-				oCol, oData;
-			
-			/*
-			 * Process by row first
-			 * Add the data object for the whole table - storing the tr node. Note - no point in getting
-			 * DOM based data if we are going to go and replace it with Ajax source data.
-			 */
-			if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null )
-			{
-				nTrs = oSettings.nTBody.childNodes;
-				for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-				{
-					if ( nTrs[i].nodeName.toUpperCase() == "TR" )
-					{
-						iThisIndex = oSettings.aoData.length;
-						nTrs[i]._DT_RowIndex = iThisIndex;
-						oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, {
-							"nTr": nTrs[i]
-						} ) );
-						
-						oSettings.aiDisplayMaster.push( iThisIndex );
-						nTds = nTrs[i].childNodes;
-						jInner = 0;
-						
-						for ( j=0, jLen=nTds.length ; j<jLen ; j++ )
-						{
-							sNodeName = nTds[j].nodeName.toUpperCase();
-							if ( sNodeName == "TD" || sNodeName == "TH" )
-							{
-								_fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTds[j].innerHTML) );
-								jInner++;
-							}
-						}
-					}
-				}
-			}
-			
-			/* Gather in the TD elements of the Table - note that this is basically the same as
-			 * fnGetTdNodes, but that function takes account of hidden columns, which we haven't yet
-			 * setup!
-			 */
-			nTrs = _fnGetTrNodes( oSettings );
-			nTds = [];
-			for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-			{
-				for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ )
-				{
-					nTd = nTrs[i].childNodes[j];
-					sNodeName = nTd.nodeName.toUpperCase();
-					if ( sNodeName == "TD" || sNodeName == "TH" )
-					{
-						nTds.push( nTd );
-					}
-				}
-			}
-			
-			/* Now process by column */
-			for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ )
-			{
-				oCol = oSettings.aoColumns[iColumn];
-		
-				/* Get the title of the column - unless there is a user set one */
-				if ( oCol.sTitle === null )
-				{
-					oCol.sTitle = oCol.nTh.innerHTML;
-				}
-				
-				var
-					bAutoType = oCol._bAutoType,
-					bRender = typeof oCol.fnRender === 'function',
-					bClass = oCol.sClass !== null,
-					bVisible = oCol.bVisible,
-					nCell, sThisType, sRendered, sValType;
-				
-				/* A single loop to rule them all (and be more efficient) */
-				if ( bAutoType || bRender || bClass || !bVisible )
-				{
-					for ( iRow=0, iRows=oSettings.aoData.length ; iRow<iRows ; iRow++ )
-					{
-						oData = oSettings.aoData[iRow];
-						nCell = nTds[ (iRow*iColumns) + iColumn ];
-						
-						/* Type detection */
-						if ( bAutoType && oCol.sType != 'string' )
-						{
-							sValType = _fnGetCellData( oSettings, iRow, iColumn, 'type' );
-							if ( sValType !== '' )
-							{
-								sThisType = _fnDetectType( sValType );
-								if ( oCol.sType === null )
-								{
-									oCol.sType = sThisType;
-								}
-								else if ( oCol.sType != sThisType && 
-								          oCol.sType != "html" )
-								{
-									/* String is always the 'fallback' option */
-									oCol.sType = 'string';
-								}
-							}
-						}
-		
-						if ( typeof oCol.mDataProp === 'function' )
-						{
-							nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
-						}
-						
-						/* Rendering */
-						if ( bRender )
-						{
-							sRendered = _fnRender( oSettings, iRow, iColumn );
-							nCell.innerHTML = sRendered;
-							if ( oCol.bUseRendered )
-							{
-								/* Use the rendered data for filtering/sorting */
-								_fnSetCellData( oSettings, iRow, iColumn, sRendered );
-							}
-						}
-						
-						/* Classes */
-						if ( bClass )
-						{
-							nCell.className += ' '+oCol.sClass;
-						}
-						
-						/* Column visability */
-						if ( !bVisible )
-						{
-							oData._anHidden[iColumn] = nCell;
-							nCell.parentNode.removeChild( nCell );
-						}
-						else
-						{
-							oData._anHidden[iColumn] = null;
-						}
-		
-						if ( oCol.fnCreatedCell )
-						{
-							oCol.fnCreatedCell.call( oSettings.oInstance,
-								nCell, _fnGetCellData( oSettings, iRow, iColumn, 'display' ), oData._aData, iRow, iColumn
-							);
-						}
-					}
-				}
-			}
-		
-			/* Row created callbacks */
-			if ( oSettings.aoRowCreatedCallback.length !== 0 )
-			{
-				for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
-				{
-					oData = oSettings.aoData[i];
-					_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, i] );
-				}
-			}
-		}
-		
-		
-		/**
-		 * Take a TR element and convert it to an index in aoData
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} n the TR element to find
-		 *  @returns {int} index if the node is found, null if not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnNodeToDataIndex( oSettings, n )
-		{
-			return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;
-		}
-		
-		
-		/**
-		 * Take a TD element and convert it into a column data index (not the visible index)
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow The row number the TD/TH can be found in
-		 *  @param {node} n The TD/TH element to find
-		 *  @returns {int} index if the node is found, -1 if not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnNodeToColumnIndex( oSettings, iRow, n )
-		{
-			var anCells = _fnGetTdNodes( oSettings, iRow );
-		
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				if ( anCells[i] === n )
-				{
-					return i;
-				}
-			}
-			return -1;
-		}
-		
-		
-		/**
-		 * Get an array of data for a given row from the internal data cache
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData row id
-		 *  @param {string} sSpecific data get type ('type' 'filter' 'sort')
-		 *  @returns {array} Data array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetRowData( oSettings, iRow, sSpecific )
-		{
-			var out = [];
-			for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				out.push( _fnGetCellData( oSettings, iRow, i, sSpecific ) );
-			}
-			return out;
-		}
-		
-		
-		/**
-		 * Get the data for a given cell from the internal cache, taking into account data mapping
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData row id
-		 *  @param {int} iCol Column index
-		 *  @param {string} sSpecific data get type ('display', 'type' 'filter' 'sort')
-		 *  @returns {*} Cell data
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetCellData( oSettings, iRow, iCol, sSpecific )
-		{
-			var sData;
-			var oCol = oSettings.aoColumns[iCol];
-			var oData = oSettings.aoData[iRow]._aData;
-		
-			if ( (sData=oCol.fnGetData( oData, sSpecific )) === undefined )
-			{
-				if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null )
-				{
-					_fnLog( oSettings, 0, "Requested unknown parameter "+
-						(typeof oCol.mDataProp=='function' ? '{mDataprop function}' : "'"+oCol.mDataProp+"'")+
-						" from the data source for row "+iRow );
-					oSettings.iDrawError = oSettings.iDraw;
-				}
-				return oCol.sDefaultContent;
-			}
-		
-			/* When the data source is null, we can use default column data */
-			if ( sData === null && oCol.sDefaultContent !== null )
-			{
-				sData = oCol.sDefaultContent;
-			}
-			else if ( typeof sData === 'function' )
-			{
-				/* If the data source is a function, then we run it and use the return */
-				return sData();
-			}
-		
-			if ( sSpecific == 'display' && sData === null )
-			{
-				return '';
-			}
-			return sData;
-		}
-		
-		
-		/**
-		 * Set the value for a specific cell, into the internal data cache
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData row id
-		 *  @param {int} iCol Column index
-		 *  @param {*} val Value to set
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSetCellData( oSettings, iRow, iCol, val )
-		{
-			var oCol = oSettings.aoColumns[iCol];
-			var oData = oSettings.aoData[iRow]._aData;
-		
-			oCol.fnSetData( oData, val );
-		}
-		
-		
-		/**
-		 * Return a function that can be used to get data from a source object, taking
-		 * into account the ability to use nested objects as a source
-		 *  @param {string|int|function} mSource The data source for the object
-		 *  @returns {function} Data get function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetObjectDataFn( mSource )
-		{
-			if ( mSource === null )
-			{
-				/* Give an empty string for rendering / sorting etc */
-				return function (data, type) {
-					return null;
-				};
-			}
-			else if ( typeof mSource === 'function' )
-			{
-				return function (data, type) {
-					return mSource( data, type );
-				};
-			}
-			else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 )
-			{
-				/* If there is a . in the source string then the data source is in a 
-				 * nested object so we loop over the data for each level to get the next
-				 * level down. On each loop we test for undefined, and if found immediatly
-				 * return. This allows entire objects to be missing and sDefaultContent to
-				 * be used if defined, rather than throwing an error
-				 */
-				var a = mSource.split('.');
-				return function (data, type) {
-					for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-					{
-						data = data[ a[i] ];
-						if ( data === undefined )
-						{
-							return undefined;
-						}
-					}
-					return data;
-				};
-			}
-			else
-			{
-				/* Array or flat object mapping */
-				return function (data, type) {
-					return data[mSource];	
-				};
-			}
-		}
-		
-		
-		/**
-		 * Return a function that can be used to set data from a source object, taking
-		 * into account the ability to use nested objects as a source
-		 *  @param {string|int|function} mSource The data source for the object
-		 *  @returns {function} Data set function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSetObjectDataFn( mSource )
-		{
-			if ( mSource === null )
-			{
-				/* Nothing to do when the data source is null */
-				return function (data, val) {};
-			}
-			else if ( typeof mSource === 'function' )
-			{
-				return function (data, val) {
-					mSource( data, 'set', val );
-				};
-			}
-			else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 )
-			{
-				/* Like the get, we need to get data from a nested object.  */
-				var a = mSource.split('.');
-				return function (data, val) {
-					for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
-					{
-						// If the nested object doesn't currently exist - since we are
-						// trying to set the value - create it
-						if ( data[ a[i] ] === undefined )
-						{
-							data[ a[i] ] = {};
-						}
-						data = data[ a[i] ];
-					}
-					data[ a[a.length-1] ] = val;
-				};
-			}
-			else
-			{
-				/* Array or flat object mapping */
-				return function (data, val) {
-					data[mSource] = val;	
-				};
-			}
-		}
-		
-		
-		/**
-		 * Return an array with the full table data
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns array {array} aData Master data array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetDataMaster ( oSettings )
-		{
-			var aData = [];
-			var iLen = oSettings.aoData.length;
-			for ( var i=0 ; i<iLen; i++ )
-			{
-				aData.push( oSettings.aoData[i]._aData );
-			}
-			return aData;
-		}
-		
-		
-		/**
-		 * Nuke the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnClearTable( oSettings )
-		{
-			oSettings.aoData.splice( 0, oSettings.aoData.length );
-			oSettings.aiDisplayMaster.splice( 0, oSettings.aiDisplayMaster.length );
-			oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length );
-			_fnCalculateEnd( oSettings );
-		}
-		
-		
-		 /**
-		 * Take an array of integers (index array) and remove a target integer (value - not 
-		 * the key!)
-		 *  @param {array} a Index array to target
-		 *  @param {int} iTarget value to find
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDeleteIndex( a, iTarget )
-		{
-			var iTargetIndex = -1;
-			
-			for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-			{
-				if ( a[i] == iTarget )
-				{
-					iTargetIndex = i;
-				}
-				else if ( a[i] > iTarget )
-				{
-					a[i]--;
-				}
-			}
-			
-			if ( iTargetIndex != -1 )
-			{
-				a.splice( iTargetIndex, 1 );
-			}
-		}
-		
-		
-		 /**
-		 * Call the developer defined fnRender function for a given cell (row/column) with
-		 * the required parameters and return the result.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow aoData index for the row
-		 *  @param {int} iCol aoColumns index for the column
-		 *  @returns {*} Return of the developer's fnRender function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnRender( oSettings, iRow, iCol )
-		{
-			var oCol = oSettings.aoColumns[iCol];
-		
-			return oCol.fnRender( {
-				"iDataRow":    iRow,
-				"iDataColumn": iCol,
-				"oSettings":   oSettings,
-				"aData":       oSettings.aoData[iRow]._aData,
-				"mDataProp":   oCol.mDataProp
-			}, _fnGetCellData(oSettings, iRow, iCol, 'display') );
-		}
-		
-		/**
-		 * Create a new TR element (and it's TD children) for a row
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iRow Row to consider
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCreateTr ( oSettings, iRow )
-		{
-			var oData = oSettings.aoData[iRow];
-			var nTd;
-		
-			if ( oData.nTr === null )
-			{
-				oData.nTr = document.createElement('tr');
-		
-				/* Use a private property on the node to allow reserve mapping from the node
-				 * to the aoData array for fast look up
-				 */
-				oData.nTr._DT_RowIndex = iRow;
-		
-				/* Special parameters can be given by the data source to be used on the row */
-				if ( oData._aData.DT_RowId )
-				{
-					oData.nTr.id = oData._aData.DT_RowId;
-				}
-		
-				if ( oData._aData.DT_RowClass )
-				{
-					$(oData.nTr).addClass( oData._aData.DT_RowClass );
-				}
-		
-				/* Process each column */
-				for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					var oCol = oSettings.aoColumns[i];
-					nTd = document.createElement( oCol.sCellType );
-		
-					/* Render if needed - if bUseRendered is true then we already have the rendered
-					 * value in the data source - so can just use that
-					 */
-					nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mDataProp === null)) ?
-						_fnRender( oSettings, iRow, i ) :
-						_fnGetCellData( oSettings, iRow, i, 'display' );
-				
-					/* Add user defined class */
-					if ( oCol.sClass !== null )
-					{
-						nTd.className = oCol.sClass;
-					}
-					
-					if ( oCol.bVisible )
-					{
-						oData.nTr.appendChild( nTd );
-						oData._anHidden[i] = null;
-					}
-					else
-					{
-						oData._anHidden[i] = nTd;
-					}
-		
-					if ( oCol.fnCreatedCell )
-					{
-						oCol.fnCreatedCell.call( oSettings.oInstance,
-							nTd, _fnGetCellData( oSettings, iRow, i, 'display' ), oData._aData, iRow, i
-						);
-					}
-				}
-		
-				_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, iRow] );
-			}
-		}
-		
-		
-		/**
-		 * Create the HTML header for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBuildHead( oSettings )
-		{
-			var i, nTh, iLen, j, jLen;
-			var iThs = oSettings.nTHead.getElementsByTagName('th').length;
-			var iCorrector = 0;
-			var jqChildren;
-			
-			/* If there is a header in place - then use it - otherwise it's going to get nuked... */
-			if ( iThs !== 0 )
-			{
-				/* We've got a thead from the DOM, so remove hidden columns and apply width to vis cols */
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					nTh = oSettings.aoColumns[i].nTh;
-					nTh.setAttribute('role', 'columnheader');
-					if ( oSettings.aoColumns[i].bSortable )
-					{
-						nTh.setAttribute('tabindex', oSettings.iTabIndex);
-						nTh.setAttribute('aria-controls', oSettings.sTableId);
-					}
-		
-					if ( oSettings.aoColumns[i].sClass !== null )
-					{
-						$(nTh).addClass( oSettings.aoColumns[i].sClass );
-					}
-					
-					/* Set the title of the column if it is user defined (not what was auto detected) */
-					if ( oSettings.aoColumns[i].sTitle != nTh.innerHTML )
-					{
-						nTh.innerHTML = oSettings.aoColumns[i].sTitle;
-					}
-				}
-			}
-			else
-			{
-				/* We don't have a header in the DOM - so we are going to have to create one */
-				var nTr = document.createElement( "tr" );
-				
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					nTh = oSettings.aoColumns[i].nTh;
-					nTh.innerHTML = oSettings.aoColumns[i].sTitle;
-					nTh.setAttribute('tabindex', '0');
-					
-					if ( oSettings.aoColumns[i].sClass !== null )
-					{
-						$(nTh).addClass( oSettings.aoColumns[i].sClass );
-					}
-					
-					nTr.appendChild( nTh );
-				}
-				$(oSettings.nTHead).html( '' )[0].appendChild( nTr );
-				_fnDetectHeader( oSettings.aoHeader, oSettings.nTHead );
-			}
-			
-			/* ARIA role for the rows */	
-			$(oSettings.nTHead).children('tr').attr('role', 'row');
-			
-			/* Add the extra markup needed by jQuery UI's themes */
-			if ( oSettings.bJUI )
-			{
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					nTh = oSettings.aoColumns[i].nTh;
-					
-					var nDiv = document.createElement('div');
-					nDiv.className = oSettings.oClasses.sSortJUIWrapper;
-					$(nTh).contents().appendTo(nDiv);
-					
-					var nSpan = document.createElement('span');
-					nSpan.className = oSettings.oClasses.sSortIcon;
-					nDiv.appendChild( nSpan );
-					nTh.appendChild( nDiv );
-				}
-			}
-			
-			if ( oSettings.oFeatures.bSort )
-			{
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					if ( oSettings.aoColumns[i].bSortable !== false )
-					{
-						_fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );
-					}
-					else
-					{
-						$(oSettings.aoColumns[i].nTh).addClass( oSettings.oClasses.sSortableNone );
-					}
-				}
-			}
-			
-			/* Deal with the footer - add classes if required */
-			if ( oSettings.oClasses.sFooterTH !== "" )
-			{
-				$(oSettings.nTFoot).children('tr').children('th').addClass( oSettings.oClasses.sFooterTH );
-			}
-			
-			/* Cache the footer elements */
-			if ( oSettings.nTFoot !== null )
-			{
-				var anCells = _fnGetUniqueThs( oSettings, null, oSettings.aoFooter );
-				for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-				{
-					if ( anCells[i] )
-					{
-						oSettings.aoColumns[i].nTf = anCells[i];
-						if ( oSettings.aoColumns[i].sClass )
-						{
-							$(anCells[i]).addClass( oSettings.aoColumns[i].sClass );
-						}
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Draw the header (or footer) element based on the column visibility states. The
-		 * methodology here is to use the layout array from _fnDetectHeader, modified for
-		 * the instantaneous column visibility, to construct the new layout. The grid is
-		 * traversed over cell at a time in a rows x columns grid fashion, although each 
-		 * cell insert can cover multiple elements in the grid - which is tracks using the
-		 * aApplied array. Cell inserts in the grid will only occur where there isn't
-		 * already a cell in that position.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param array {objects} aoSource Layout array from _fnDetectHeader
-		 *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc, 
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
-		{
-			var i, iLen, j, jLen, k, kLen, n, nLocalTr;
-			var aoLocal = [];
-			var aApplied = [];
-			var iColumns = oSettings.aoColumns.length;
-			var iRowspan, iColspan;
-		
-			if (  bIncludeHidden === undefined )
-			{
-				bIncludeHidden = false;
-			}
-		
-			/* Make a copy of the master layout array, but without the visible columns in it */
-			for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
-			{
-				aoLocal[i] = aoSource[i].slice();
-				aoLocal[i].nTr = aoSource[i].nTr;
-		
-				/* Remove any columns which are currently hidden */
-				for ( j=iColumns-1 ; j>=0 ; j-- )
-				{
-					if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )
-					{
-						aoLocal[i].splice( j, 1 );
-					}
-				}
-		
-				/* Prep the applied array - it needs an element for each row */
-				aApplied.push( [] );
-			}
-		
-			for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
-			{
-				nLocalTr = aoLocal[i].nTr;
-				
-				/* All cells are going to be replaced, so empty out the row */
-				if ( nLocalTr )
-				{
-					while( (n = nLocalTr.firstChild) )
-					{
-						nLocalTr.removeChild( n );
-					}
-				}
-		
-				for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
-				{
-					iRowspan = 1;
-					iColspan = 1;
-		
-					/* Check to see if there is already a cell (row/colspan) covering our target
-					 * insert point. If there is, then there is nothing to do.
-					 */
-					if ( aApplied[i][j] === undefined )
-					{
-						nLocalTr.appendChild( aoLocal[i][j].cell );
-						aApplied[i][j] = 1;
-		
-						/* Expand the cell to cover as many rows as needed */
-						while ( aoLocal[i+iRowspan] !== undefined &&
-						        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )
-						{
-							aApplied[i+iRowspan][j] = 1;
-							iRowspan++;
-						}
-		
-						/* Expand the cell to cover as many columns as needed */
-						while ( aoLocal[i][j+iColspan] !== undefined &&
-						        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )
-						{
-							/* Must update the applied array over the rows for the columns */
-							for ( k=0 ; k<iRowspan ; k++ )
-							{
-								aApplied[i+k][j+iColspan] = 1;
-							}
-							iColspan++;
-						}
-		
-						/* Do the actual expansion in the DOM */
-						aoLocal[i][j].cell.rowSpan = iRowspan;
-						aoLocal[i][j].cell.colSpan = iColspan;
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Insert the required TR nodes into the table for display
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDraw( oSettings )
-		{
-			/* Provide a pre-callback function which can be used to cancel the draw is false is returned */
-			var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
-			if ( $.inArray( false, aPreDraw ) !== -1 )
-			{
-				_fnProcessingDisplay( oSettings, false );
-				return;
-			}
-			
-			var i, iLen, n;
-			var anRows = [];
-			var iRowCount = 0;
-			var iStripes = oSettings.asStripeClasses.length;
-			var iOpenRows = oSettings.aoOpenRows.length;
-			
-			oSettings.bDrawing = true;
-			
-			/* Check and see if we have an initial draw position from state saving */
-			if ( oSettings.iInitDisplayStart !== undefined && oSettings.iInitDisplayStart != -1 )
-			{
-				if ( oSettings.oFeatures.bServerSide )
-				{
-					oSettings._iDisplayStart = oSettings.iInitDisplayStart;
-				}
-				else
-				{
-					oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ?
-						0 : oSettings.iInitDisplayStart;
-				}
-				oSettings.iInitDisplayStart = -1;
-				_fnCalculateEnd( oSettings );
-			}
-			
-			/* Server-side processing draw intercept */
-			if ( oSettings.bDeferLoading )
-			{
-				oSettings.bDeferLoading = false;
-				oSettings.iDraw++;
-			}
-			else if ( !oSettings.oFeatures.bServerSide )
-			{
-				oSettings.iDraw++;
-			}
-			else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )
-			{
-				return;
-			}
-			
-			if ( oSettings.aiDisplay.length !== 0 )
-			{
-				var iStart = oSettings._iDisplayStart;
-				var iEnd = oSettings._iDisplayEnd;
-				
-				if ( oSettings.oFeatures.bServerSide )
-				{
-					iStart = 0;
-					iEnd = oSettings.aoData.length;
-				}
-				
-				for ( var j=iStart ; j<iEnd ; j++ )
-				{
-					var aoData = oSettings.aoData[ oSettings.aiDisplay[j] ];
-					if ( aoData.nTr === null )
-					{
-						_fnCreateTr( oSettings, oSettings.aiDisplay[j] );
-					}
-		
-					var nRow = aoData.nTr;
-					
-					/* Remove the old striping classes and then add the new one */
-					if ( iStripes !== 0 )
-					{
-						var sStripe = oSettings.asStripeClasses[ iRowCount % iStripes ];
-						if ( aoData._sRowStripe != sStripe )
-						{
-							$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );
-							aoData._sRowStripe = sStripe;
-						}
-					}
-					
-					/* Row callback functions - might want to manipule the row */
-					_fnCallbackFire( oSettings, 'aoRowCallback', null, 
-						[nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] );
-					
-					anRows.push( nRow );
-					iRowCount++;
-					
-					/* If there is an open row - and it is attached to this parent - attach it on redraw */
-					if ( iOpenRows !== 0 )
-					{
-						for ( var k=0 ; k<iOpenRows ; k++ )
-						{
-							if ( nRow == oSettings.aoOpenRows[k].nParent )
-							{
-								anRows.push( oSettings.aoOpenRows[k].nTr );
-								break;
-							}
-						}
-					}
-				}
-			}
-			else
-			{
-				/* Table is empty - create a row with an empty message in it */
-				anRows[ 0 ] = document.createElement( 'tr' );
-				
-				if ( oSettings.asStripeClasses[0] )
-				{
-					anRows[ 0 ].className = oSettings.asStripeClasses[0];
-				}
-		
-				var oLang = oSettings.oLanguage;
-				var sZero = oLang.sZeroRecords;
-				if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
-				{
-					sZero = oLang.sLoadingRecords;
-				}
-				else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )
-				{
-					sZero = oLang.sEmptyTable;
-				}
-		
-				var nTd = document.createElement( 'td' );
-				nTd.setAttribute( 'valign', "top" );
-				nTd.colSpan = _fnVisbleColumns( oSettings );
-				nTd.className = oSettings.oClasses.sRowEmpty;
-				nTd.innerHTML = _fnInfoMacros( oSettings, sZero );
-				
-				anRows[ iRowCount ].appendChild( nTd );
-			}
-			
-			/* Header and footer callbacks */
-			_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0], 
-				_fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] );
-			
-			_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0], 
-				_fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] );
-			
-			/* 
-			 * Need to remove any old row from the display - note we can't just empty the tbody using
-			 * $().html('') since this will unbind the jQuery event handlers (even although the node 
-			 * still exists!) - equally we can't use innerHTML, since IE throws an exception.
-			 */
-			var
-				nAddFrag = document.createDocumentFragment(),
-				nRemoveFrag = document.createDocumentFragment(),
-				nBodyPar, nTrs;
-			
-			if ( oSettings.nTBody )
-			{
-				nBodyPar = oSettings.nTBody.parentNode;
-				nRemoveFrag.appendChild( oSettings.nTBody );
-				
-				/* When doing infinite scrolling, only remove child rows when sorting, filtering or start
-				 * up. When not infinite scroll, always do it.
-				 */
-				if ( !oSettings.oScroll.bInfinite || !oSettings._bInitComplete ||
-				 	oSettings.bSorted || oSettings.bFiltered )
-				{
-					while( (n = oSettings.nTBody.firstChild) )
-					{
-						oSettings.nTBody.removeChild( n );
-					}
-				}
-				
-				/* Put the draw table into the dom */
-				for ( i=0, iLen=anRows.length ; i<iLen ; i++ )
-				{
-					nAddFrag.appendChild( anRows[i] );
-				}
-				
-				oSettings.nTBody.appendChild( nAddFrag );
-				if ( nBodyPar !== null )
-				{
-					nBodyPar.appendChild( oSettings.nTBody );
-				}
-			}
-			
-			/* Call all required callback functions for the end of a draw */
-			_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );
-			
-			/* Draw is complete, sorting and filtering must be as well */
-			oSettings.bSorted = false;
-			oSettings.bFiltered = false;
-			oSettings.bDrawing = false;
-			
-			if ( oSettings.oFeatures.bServerSide )
-			{
-				_fnProcessingDisplay( oSettings, false );
-				if ( !oSettings._bInitComplete )
-				{
-					_fnInitComplete( oSettings );
-				}
-			}
-		}
-		
-		
-		/**
-		 * Redraw the table - taking account of the various features which are enabled
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnReDraw( oSettings )
-		{
-			if ( oSettings.oFeatures.bSort )
-			{
-				/* Sorting will refilter and draw for us */
-				_fnSort( oSettings, oSettings.oPreviousSearch );
-			}
-			else if ( oSettings.oFeatures.bFilter )
-			{
-				/* Filtering will redraw for us */
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch );
-			}
-			else
-			{
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-		}
-		
-		
-		/**
-		 * Add the options to the page HTML for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAddOptionsHtml ( oSettings )
-		{
-			/*
-			 * Create a temporary, empty, div which we can later on replace with what we have generated
-			 * we do it this way to rendering the 'options' html offline - speed :-)
-			 */
-			var nHolding = $('<div></div>')[0];
-			oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable );
-			
-			/* 
-			 * All DataTables are wrapped in a div
-			 */
-			oSettings.nTableWrapper = $('<div id="'+oSettings.sTableId+'_wrapper" class="'+oSettings.oClasses.sWrapper+'" role="grid"></div>')[0];
-			oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
-		
-			/* Track where we want to insert the option */
-			var nInsertNode = oSettings.nTableWrapper;
-			
-			/* Loop over the user set positioning and place the elements as needed */
-			var aDom = oSettings.sDom.split('');
-			var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j;
-			for ( var i=0 ; i<aDom.length ; i++ )
-			{
-				iPushFeature = 0;
-				cOption = aDom[i];
-				
-				if ( cOption == '<' )
-				{
-					/* New container div */
-					nNewNode = $('<div></div>')[0];
-					
-					/* Check to see if we should append an id and/or a class name to the container */
-					cNext = aDom[i+1];
-					if ( cNext == "'" || cNext == '"' )
-					{
-						sAttr = "";
-						j = 2;
-						while ( aDom[i+j] != cNext )
-						{
-							sAttr += aDom[i+j];
-							j++;
-						}
-						
-						/* Replace jQuery UI constants */
-						if ( sAttr == "H" )
-						{
-							sAttr = oSettings.oClasses.sJUIHeader;
-						}
-						else if ( sAttr == "F" )
-						{
-							sAttr = oSettings.oClasses.sJUIFooter;
-						}
-						
-						/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
-						 * breaks the string into parts and applies them as needed
-						 */
-						if ( sAttr.indexOf('.') != -1 )
-						{
-							var aSplit = sAttr.split('.');
-							nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
-							nNewNode.className = aSplit[1];
-						}
-						else if ( sAttr.charAt(0) == "#" )
-						{
-							nNewNode.id = sAttr.substr(1, sAttr.length-1);
-						}
-						else
-						{
-							nNewNode.className = sAttr;
-						}
-						
-						i += j; /* Move along the position array */
-					}
-					
-					nInsertNode.appendChild( nNewNode );
-					nInsertNode = nNewNode;
-				}
-				else if ( cOption == '>' )
-				{
-					/* End container div */
-					nInsertNode = nInsertNode.parentNode;
-				}
-				else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange )
-				{
-					/* Length */
-					nTmp = _fnFeatureHtmlLength( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 'f' && oSettings.oFeatures.bFilter )
-				{
-					/* Filter */
-					nTmp = _fnFeatureHtmlFilter( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 'r' && oSettings.oFeatures.bProcessing )
-				{
-					/* pRocessing */
-					nTmp = _fnFeatureHtmlProcessing( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 't' )
-				{
-					/* Table */
-					nTmp = _fnFeatureHtmlTable( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption ==  'i' && oSettings.oFeatures.bInfo )
-				{
-					/* Info */
-					nTmp = _fnFeatureHtmlInfo( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( cOption == 'p' && oSettings.oFeatures.bPaginate )
-				{
-					/* Pagination */
-					nTmp = _fnFeatureHtmlPaginate( oSettings );
-					iPushFeature = 1;
-				}
-				else if ( DataTable.ext.aoFeatures.length !== 0 )
-				{
-					/* Plug-in features */
-					var aoFeatures = DataTable.ext.aoFeatures;
-					for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
-					{
-						if ( cOption == aoFeatures[k].cFeature )
-						{
-							nTmp = aoFeatures[k].fnInit( oSettings );
-							if ( nTmp )
-							{
-								iPushFeature = 1;
-							}
-							break;
-						}
-					}
-				}
-				
-				/* Add to the 2D features array */
-				if ( iPushFeature == 1 && nTmp !== null )
-				{
-					if ( typeof oSettings.aanFeatures[cOption] !== 'object' )
-					{
-						oSettings.aanFeatures[cOption] = [];
-					}
-					oSettings.aanFeatures[cOption].push( nTmp );
-					nInsertNode.appendChild( nTmp );
-				}
-			}
-			
-			/* Built our DOM structure - replace the holding div with what we want */
-			nHolding.parentNode.replaceChild( oSettings.nTableWrapper, nHolding );
-		}
-		
-		
-		/**
-		 * Use the DOM source to create up an array of header cells. The idea here is to
-		 * create a layout grid (array) of rows x columns, which contains a reference
-		 * to the cell that that point in the grid (regardless of col/rowspan), such that
-		 * any column / row could be removed and the new grid constructed
-		 *  @param array {object} aLayout Array to store the calculated layout in
-		 *  @param {node} nThead The header/footer element for the table
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDetectHeader ( aLayout, nThead )
-		{
-			var nTrs = $(nThead).children('tr');
-			var nCell;
-			var i, j, k, l, iLen, jLen, iColShifted;
-			var fnShiftCol = function ( a, i, j ) {
-				while ( a[i][j] ) {
-					j++;
-				}
-				return j;
-			};
-		
-			aLayout.splice( 0, aLayout.length );
-			
-			/* We know how many rows there are in the layout - so prep it */
-			for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-			{
-				aLayout.push( [] );
-			}
-			
-			/* Calculate a layout array */
-			for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-			{
-				var iColumn = 0;
-				
-				/* For every cell in the row... */
-				for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ )
-				{
-					nCell = nTrs[i].childNodes[j];
-		
-					if ( nCell.nodeName.toUpperCase() == "TD" ||
-					     nCell.nodeName.toUpperCase() == "TH" )
-					{
-						/* Get the col and rowspan attributes from the DOM and sanitise them */
-						var iColspan = nCell.getAttribute('colspan') * 1;
-						var iRowspan = nCell.getAttribute('rowspan') * 1;
-						iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
-						iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
-		
-						/* There might be colspan cells already in this row, so shift our target 
-						 * accordingly
-						 */
-						iColShifted = fnShiftCol( aLayout, i, iColumn );
-						
-						/* If there is col / rowspan, copy the information into the layout grid */
-						for ( l=0 ; l<iColspan ; l++ )
-						{
-							for ( k=0 ; k<iRowspan ; k++ )
-							{
-								aLayout[i+k][iColShifted+l] = {
-									"cell": nCell,
-									"unique": iColspan == 1 ? true : false
-								};
-								aLayout[i+k].nTr = nTrs[i];
-							}
-						}
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Get an array of unique th elements, one for each column
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} nHeader automatically detect the layout from this node - optional
-		 *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
-		 *  @returns array {node} aReturn list of unique ths
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
-		{
-			var aReturn = [];
-			if ( !aLayout )
-			{
-				aLayout = oSettings.aoHeader;
-				if ( nHeader )
-				{
-					aLayout = [];
-					_fnDetectHeader( aLayout, nHeader );
-				}
-			}
-		
-			for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )
-			{
-				for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )
-				{
-					if ( aLayout[i][j].unique && 
-						 (!aReturn[j] || !oSettings.bSortCellsTop) )
-					{
-						aReturn[j] = aLayout[i][j].cell;
-					}
-				}
-			}
-			
-			return aReturn;
-		}
-		
-		
-		
-		/**
-		 * Update the table using an Ajax call
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {boolean} Block the table drawing or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAjaxUpdate( oSettings )
-		{
-			if ( oSettings.bAjaxDataGet )
-			{
-				oSettings.iDraw++;
-				_fnProcessingDisplay( oSettings, true );
-				var iColumns = oSettings.aoColumns.length;
-				var aoData = _fnAjaxParameters( oSettings );
-				_fnServerParams( oSettings, aoData );
-				
-				oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData,
-					function(json) {
-						_fnAjaxUpdateDraw( oSettings, json );
-					}, oSettings );
-				return false;
-			}
-			else
-			{
-				return true;
-			}
-		}
-		
-		
-		/**
-		 * Build up the parameters in an object needed for a server-side processing request
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {bool} block the table drawing or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAjaxParameters( oSettings )
-		{
-			var iColumns = oSettings.aoColumns.length;
-			var aoData = [], mDataProp, aaSort, aDataSort;
-			var i, j;
-			
-			aoData.push( { "name": "sEcho",          "value": oSettings.iDraw } );
-			aoData.push( { "name": "iColumns",       "value": iColumns } );
-			aoData.push( { "name": "sColumns",       "value": _fnColumnOrdering(oSettings) } );
-			aoData.push( { "name": "iDisplayStart",  "value": oSettings._iDisplayStart } );
-			aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ?
-				oSettings._iDisplayLength : -1 } );
-				
-			for ( i=0 ; i<iColumns ; i++ )
-			{
-			  mDataProp = oSettings.aoColumns[i].mDataProp;
-				aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } );
-			}
-			
-			/* Filtering */
-			if ( oSettings.oFeatures.bFilter !== false )
-			{
-				aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } );
-				aoData.push( { "name": "bRegex",  "value": oSettings.oPreviousSearch.bRegex } );
-				for ( i=0 ; i<iColumns ; i++ )
-				{
-					aoData.push( { "name": "sSearch_"+i,     "value": oSettings.aoPreSearchCols[i].sSearch } );
-					aoData.push( { "name": "bRegex_"+i,      "value": oSettings.aoPreSearchCols[i].bRegex } );
-					aoData.push( { "name": "bSearchable_"+i, "value": oSettings.aoColumns[i].bSearchable } );
-				}
-			}
-			
-			/* Sorting */
-			if ( oSettings.oFeatures.bSort !== false )
-			{
-				var iCounter = 0;
-		
-				aaSort = ( oSettings.aaSortingFixed !== null ) ?
-					oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
-					oSettings.aaSorting.slice();
-				
-				for ( i=0 ; i<aaSort.length ; i++ )
-				{
-					aDataSort = oSettings.aoColumns[ aaSort[i][0] ].aDataSort;
-					
-					for ( j=0 ; j<aDataSort.length ; j++ )
-					{
-						aoData.push( { "name": "iSortCol_"+iCounter,  "value": aDataSort[j] } );
-						aoData.push( { "name": "sSortDir_"+iCounter,  "value": aaSort[i][1] } );
-						iCounter++;
-					}
-				}
-				aoData.push( { "name": "iSortingCols",   "value": iCounter } );
-				
-				for ( i=0 ; i<iColumns ; i++ )
-				{
-					aoData.push( { "name": "bSortable_"+i,  "value": oSettings.aoColumns[i].bSortable } );
-				}
-			}
-			
-			return aoData;
-		}
-		
-		
-		/**
-		 * Add Ajax parameters from plugins
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param array {objects} aoData name/value pairs to send to the server
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnServerParams( oSettings, aoData )
-		{
-			_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [aoData] );
-		}
-		
-		
-		/**
-		 * Data the data from the server (nuking the old) and redraw the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} json json data return from the server.
-		 *  @param {string} json.sEcho Tracking flag for DataTables to match requests
-		 *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
-		 *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
-		 *  @param {array} json.aaData The data to display on this page
-		 *  @param {string} [json.sColumns] Column ordering (sName, comma separated)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnAjaxUpdateDraw ( oSettings, json )
-		{
-			if ( json.sEcho !== undefined )
-			{
-				/* Protect against old returns over-writing a new one. Possible when you get
-				 * very fast interaction, and later queires are completed much faster
-				 */
-				if ( json.sEcho*1 < oSettings.iDraw )
-				{
-					return;
-				}
-				else
-				{
-					oSettings.iDraw = json.sEcho * 1;
-				}
-			}
-			
-			if ( !oSettings.oScroll.bInfinite ||
-				   (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered)) )
-			{
-				_fnClearTable( oSettings );
-			}
-			oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10);
-			oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10);
-			
-			/* Determine if reordering is required */
-			var sOrdering = _fnColumnOrdering(oSettings);
-			var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering );
-			var aiIndex;
-			if ( bReOrder )
-			{
-				aiIndex = _fnReOrderIndex( oSettings, json.sColumns );
-			}
-			
-			var aData = _fnGetObjectDataFn( oSettings.sAjaxDataProp )( json );
-			for ( var i=0, iLen=aData.length ; i<iLen ; i++ )
-			{
-				if ( bReOrder )
-				{
-					/* If we need to re-order, then create a new array with the correct order and add it */
-					var aDataSorted = [];
-					for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ )
-					{
-						aDataSorted.push( aData[i][ aiIndex[j] ] );
-					}
-					_fnAddData( oSettings, aDataSorted );
-				}
-				else
-				{
-					/* No re-order required, sever got it "right" - just straight add */
-					_fnAddData( oSettings, aData[i] );
-				}
-			}
-			oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-			oSettings.bAjaxDataGet = false;
-			_fnDraw( oSettings );
-			oSettings.bAjaxDataGet = true;
-			_fnProcessingDisplay( oSettings, false );
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for filtering text
-		 *  @returns {node} Filter control element
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlFilter ( oSettings )
-		{
-			var oPreviousSearch = oSettings.oPreviousSearch;
-			
-			var sSearchStr = oSettings.oLanguage.sSearch;
-			sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ?
-			  sSearchStr.replace('_INPUT_', '<input type="text" />') :
-			  sSearchStr==="" ? '<input type="text" />' : sSearchStr+' <input type="text" />';
-			
-			var nFilter = document.createElement( 'div' );
-			nFilter.className = oSettings.oClasses.sFilter;
-			nFilter.innerHTML = '<label>'+sSearchStr+'</label>';
-			if ( !oSettings.aanFeatures.f )
-			{
-				nFilter.id = oSettings.sTableId+'_filter';
-			}
-			
-			var jqFilter = $('input[type="text"]', nFilter);
-		
-			// Store a reference to the input element, so other input elements could be
-			// added to the filter wrapper if needed (submit button for example)
-			nFilter._DT_Input = jqFilter[0];
-		
-			jqFilter.val( oPreviousSearch.sSearch.replace('"','&quot;') );
-			jqFilter.bind( 'keyup.DT', function(e) {
-				/* Update all other filter input elements for the new display */
-				var n = oSettings.aanFeatures.f;
-				var val = this.value==="" ? "" : this.value; // mental IE8 fix :-(
-		
-				for ( var i=0, iLen=n.length ; i<iLen ; i++ )
-				{
-					if ( n[i] != $(this).parents('div.dataTables_filter')[0] )
-					{
-						$(n[i]._DT_Input).val( val );
-					}
-				}
-				
-				/* Now do the filter */
-				if ( val != oPreviousSearch.sSearch )
-				{
-					_fnFilterComplete( oSettings, { 
-						"sSearch": val, 
-						"bRegex": oPreviousSearch.bRegex,
-						"bSmart": oPreviousSearch.bSmart ,
-						"bCaseInsensitive": oPreviousSearch.bCaseInsensitive 
-					} );
-				}
-			} );
-		
-			jqFilter
-				.attr('aria-controls', oSettings.sTableId)
-				.bind( 'keypress.DT', function(e) {
-					/* Prevent form submission */
-					if ( e.keyCode == 13 )
-					{
-						return false;
-					}
-				}
-			);
-			
-			return nFilter;
-		}
-		
-		
-		/**
-		 * Filter the table using both the global filter and column based filtering
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} oSearch search information
-		 *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterComplete ( oSettings, oInput, iForce )
-		{
-			var oPrevSearch = oSettings.oPreviousSearch;
-			var aoPrevSearch = oSettings.aoPreSearchCols;
-			var fnSaveFilter = function ( oFilter ) {
-				/* Save the filtering values */
-				oPrevSearch.sSearch = oFilter.sSearch;
-				oPrevSearch.bRegex = oFilter.bRegex;
-				oPrevSearch.bSmart = oFilter.bSmart;
-				oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
-			};
-		
-			/* In server-side processing all filtering is done by the server, so no point hanging around here */
-			if ( !oSettings.oFeatures.bServerSide )
-			{
-				/* Global filter */
-				_fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive );
-				fnSaveFilter( oInput );
-		
-				/* Now do the individual column filter */
-				for ( var i=0 ; i<oSettings.aoPreSearchCols.length ; i++ )
-				{
-					_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex, 
-						aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
-				}
-				
-				/* Custom filtering */
-				_fnFilterCustom( oSettings );
-			}
-			else
-			{
-				fnSaveFilter( oInput );
-			}
-			
-			/* Tell the draw function we have been filtering */
-			oSettings.bFiltered = true;
-			$(oSettings.oInstance).trigger('filter', oSettings);
-			
-			/* Redraw the table */
-			oSettings._iDisplayStart = 0;
-			_fnCalculateEnd( oSettings );
-			_fnDraw( oSettings );
-			
-			/* Rebuild search array 'offline' */
-			_fnBuildSearchArray( oSettings, 0 );
-		}
-		
-		
-		/**
-		 * Apply custom filtering functions
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterCustom( oSettings )
-		{
-			var afnFilters = DataTable.ext.afnFiltering;
-			for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ )
-			{
-				var iCorrector = 0;
-				for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ )
-				{
-					var iDisIndex = oSettings.aiDisplay[j-iCorrector];
-					
-					/* Check if we should use this row based on the filtering function */
-					if ( !afnFilters[i]( oSettings, _fnGetRowData( oSettings, iDisIndex, 'filter' ), iDisIndex ) )
-					{
-						oSettings.aiDisplay.splice( j-iCorrector, 1 );
-						iCorrector++;
-					}
-				}
-			}
-		}
-		
-		
-		/**
-		 * Filter the table on a per-column basis
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sInput string to filter on
-		 *  @param {int} iColumn column to filter
-		 *  @param {bool} bRegex treat search string as a regular expression or not
-		 *  @param {bool} bSmart use smart filtering or not
-		 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterColumn ( oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive )
-		{
-			if ( sInput === "" )
-			{
-				return;
-			}
-			
-			var iIndexCorrector = 0;
-			var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive );
-			
-			for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- )
-			{
-				var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ),
-					oSettings.aoColumns[iColumn].sType );
-				if ( ! rpSearch.test( sData ) )
-				{
-					oSettings.aiDisplay.splice( i, 1 );
-					iIndexCorrector++;
-				}
-			}
-		}
-		
-		
-		/**
-		 * Filter the data table based on user input and draw the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sInput string to filter on
-		 *  @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0)
-		 *  @param {bool} bRegex treat as a regular expression or not
-		 *  @param {bool} bSmart perform smart filtering or not
-		 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive )
-		{
-			var i;
-			var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive );
-			var oPrevSearch = oSettings.oPreviousSearch;
-			
-			/* Check if we are forcing or not - optional parameter */
-			if ( !iForce )
-			{
-				iForce = 0;
-			}
-			
-			/* Need to take account of custom filtering functions - always filter */
-			if ( DataTable.ext.afnFiltering.length !== 0 )
-			{
-				iForce = 1;
-			}
-			
-			/*
-			 * If the input is blank - we want the full data set
-			 */
-			if ( sInput.length <= 0 )
-			{
-				oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			}
-			else
-			{
-				/*
-				 * We are starting a new search or the new search string is smaller 
-				 * then the old one (i.e. delete). Search from the master array
-			 	 */
-				if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length ||
-					   oPrevSearch.sSearch.length > sInput.length || iForce == 1 ||
-					   sInput.indexOf(oPrevSearch.sSearch) !== 0 )
-				{
-					/* Nuke the old display array - we are going to rebuild it */
-					oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
-					
-					/* Force a rebuild of the search array */
-					_fnBuildSearchArray( oSettings, 1 );
-					
-					/* Search through all records to populate the search array
-					 * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1 
-					 * mapping
-					 */
-					for ( i=0 ; i<oSettings.aiDisplayMaster.length ; i++ )
-					{
-						if ( rpSearch.test(oSettings.asDataSearch[i]) )
-						{
-							oSettings.aiDisplay.push( oSettings.aiDisplayMaster[i] );
-						}
-					}
-			  }
-			  else
-				{
-			  	/* Using old search array - refine it - do it this way for speed
-			  	 * Don't have to search the whole master array again
-					 */
-			  	var iIndexCorrector = 0;
-			  	
-			  	/* Search the current results */
-			  	for ( i=0 ; i<oSettings.asDataSearch.length ; i++ )
-					{
-			  		if ( ! rpSearch.test(oSettings.asDataSearch[i]) )
-						{
-			  			oSettings.aiDisplay.splice( i-iIndexCorrector, 1 );
-			  			iIndexCorrector++;
-			  		}
-			  	}
-			  }
-			}
-		}
-		
-		
-		/**
-		 * Create an array which can be quickly search through
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iMaster use the master data array - optional
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBuildSearchArray ( oSettings, iMaster )
-		{
-			if ( !oSettings.oFeatures.bServerSide )
-			{
-				/* Clear out the old data */
-				oSettings.asDataSearch.splice( 0, oSettings.asDataSearch.length );
-				
-				var aArray = (iMaster && iMaster===1) ?
-				 	oSettings.aiDisplayMaster : oSettings.aiDisplay;
-				
-				for ( var i=0, iLen=aArray.length ; i<iLen ; i++ )
-				{
-					oSettings.asDataSearch[i] = _fnBuildSearchRow( oSettings,
-						_fnGetRowData( oSettings, aArray[i], 'filter' ) );
-				}
-			}
-		}
-		
-		
-		/**
-		 * Create a searchable string from a single data row
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {array} aData Row data array to use for the data to search
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBuildSearchRow( oSettings, aData )
-		{
-			var sSearch = '';
-			if ( oSettings.__nTmpFilter === undefined )
-			{
-				oSettings.__nTmpFilter = document.createElement('div');
-			}
-			var nTmp = oSettings.__nTmpFilter;
-			
-			for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ )
-			{
-				if ( oSettings.aoColumns[j].bSearchable )
-				{
-					var sData = aData[j];
-					sSearch += _fnDataToSearch( sData, oSettings.aoColumns[j].sType )+'  ';
-				}
-			}
-			
-			/* If it looks like there is an HTML entity in the string, attempt to decode it */
-			if ( sSearch.indexOf('&') !== -1 )
-			{
-				nTmp.innerHTML = sSearch;
-				sSearch = nTmp.textContent ? nTmp.textContent : nTmp.innerText;
-				
-				/* IE and Opera appear to put an newline where there is a <br> tag - remove it */
-				sSearch = sSearch.replace(/\n/g," ").replace(/\r/g,"");
-			}
-			
-			return sSearch;
-		}
-		
-		/**
-		 * Build a regular expression object suitable for searching a table
-		 *  @param {string} sSearch string to search for
-		 *  @param {bool} bRegex treat as a regular expression or not
-		 *  @param {bool} bSmart perform smart filtering or not
-		 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-		 *  @returns {RegExp} constructed object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive )
-		{
-			var asSearch, sRegExpString;
-			
-			if ( bSmart )
-			{
-				/* Generate the regular expression to use. Something along the lines of:
-				 * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$
-				 */
-				asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' );
-				sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$';
-				return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" );
-			}
-			else
-			{
-				sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch );
-				return new RegExp( sSearch, bCaseInsensitive ? "i" : "" );
-			}
-		}
-		
-		
-		/**
-		 * Convert raw data into something that the user can search on
-		 *  @param {string} sData data to be modified
-		 *  @param {string} sType data type
-		 *  @returns {string} search string
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnDataToSearch ( sData, sType )
-		{
-			if ( typeof DataTable.ext.ofnSearch[sType] === "function" )
-			{
-				return DataTable.ext.ofnSearch[sType]( sData );
-			}
-			else if ( sData === null )
-			{
-				return '';
-			}
-			else if ( sType == "html" )
-			{
-				return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" );
-			}
-			else if ( typeof sData === "string" )
-			{
-				return sData.replace(/[\r\n]/g," ");
-			}
-			return sData;
-		}
-		
-		
-		/**
-		 * scape a string stuch that it can be used in a regular expression
-		 *  @param {string} sVal string to escape
-		 *  @returns {string} escaped string
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnEscapeRegex ( sVal )
-		{
-			var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ];
-			var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' );
-			return sVal.replace(reReplace, '\\$1');
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for the info display
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Information element
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlInfo ( oSettings )
-		{
-			var nInfo = document.createElement( 'div' );
-			nInfo.className = oSettings.oClasses.sInfo;
-			
-			/* Actions that are to be taken once only for this feature */
-			if ( !oSettings.aanFeatures.i )
-			{
-				/* Add draw callback */
-				oSettings.aoDrawCallback.push( {
-					"fn": _fnUpdateInfo,
-					"sName": "information"
-				} );
-				
-				/* Add id */
-				nInfo.id = oSettings.sTableId+'_info';
-			}
-			oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' );
-			
-			return nInfo;
-		}
-		
-		
-		/**
-		 * Update the information elements in the display
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnUpdateInfo ( oSettings )
-		{
-			/* Show information about the table */
-			if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 )
-			{
-				return;
-			}
-			
-			var
-				oLang = oSettings.oLanguage,
-				iStart = oSettings._iDisplayStart+1,
-				iEnd = oSettings.fnDisplayEnd(),
-				iMax = oSettings.fnRecordsTotal(),
-				iTotal = oSettings.fnRecordsDisplay(),
-				sOut;
-			
-			if ( iTotal === 0 && iTotal == iMax )
-			{
-				/* Empty record set */
-				sOut = oLang.sInfoEmpty;
-			}
-			else if ( iTotal === 0 )
-			{
-				/* Empty record set after filtering */
-				sOut = oLang.sInfoEmpty +' '+ oLang.sInfoFiltered;
-			}
-			else if ( iTotal == iMax )
-			{
-				/* Normal record set */
-				sOut = oLang.sInfo;
-			}
-			else
-			{
-				/* Record set after filtering */
-				sOut = oLang.sInfo +' '+ oLang.sInfoFiltered;
-			}
-		
-			// Convert the macros
-			sOut += oLang.sInfoPostFix;
-			sOut = _fnInfoMacros( oSettings, sOut );
-			
-			if ( oLang.fnInfoCallback !== null )
-			{
-				sOut = oLang.fnInfoCallback.call( oSettings.oInstance, 
-					oSettings, iStart, iEnd, iMax, iTotal, sOut );
-			}
-			
-			var n = oSettings.aanFeatures.i;
-			for ( var i=0, iLen=n.length ; i<iLen ; i++ )
-			{
-				$(n[i]).html( sOut );
-			}
-		}
-		
-		
-		function _fnInfoMacros ( oSettings, str )
-		{
-			var
-				iStart = oSettings._iDisplayStart+1,
-				sStart = oSettings.fnFormatNumber( iStart ),
-				iEnd = oSettings.fnDisplayEnd(),
-				sEnd = oSettings.fnFormatNumber( iEnd ),
-				iTotal = oSettings.fnRecordsDisplay(),
-				sTotal = oSettings.fnFormatNumber( iTotal ),
-				iMax = oSettings.fnRecordsTotal(),
-				sMax = oSettings.fnFormatNumber( iMax );
-		
-			// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
-			// internally
-			if ( oSettings.oScroll.bInfinite )
-			{
-				sStart = oSettings.fnFormatNumber( 1 );
-			}
-		
-			return str.
-				replace('_START_', sStart).
-				replace('_END_',   sEnd).
-				replace('_TOTAL_', sTotal).
-				replace('_MAX_',   sMax);
-		}
-		
-		
-		
-		/**
-		 * Draw the table for the first time, adding all required features
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnInitialise ( oSettings )
-		{
-			var i, iLen, iAjaxStart=oSettings.iInitDisplayStart;
-			
-			/* Ensure that the table data is fully initialised */
-			if ( oSettings.bInitialised === false )
-			{
-				setTimeout( function(){ _fnInitialise( oSettings ); }, 200 );
-				return;
-			}
-			
-			/* Show the display HTML options */
-			_fnAddOptionsHtml( oSettings );
-			
-			/* Build and draw the header / footer for the table */
-			_fnBuildHead( oSettings );
-			_fnDrawHead( oSettings, oSettings.aoHeader );
-			if ( oSettings.nTFoot )
-			{
-				_fnDrawHead( oSettings, oSettings.aoFooter );
-			}
-		
-			/* Okay to show that something is going on now */
-			_fnProcessingDisplay( oSettings, true );
-			
-			/* Calculate sizes for columns */
-			if ( oSettings.oFeatures.bAutoWidth )
-			{
-				_fnCalculateColumnWidths( oSettings );
-			}
-			
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoColumns[i].sWidth !== null )
-				{
-					oSettings.aoColumns[i].nTh.style.width = _fnStringToCss( oSettings.aoColumns[i].sWidth );
-				}
-			}
-			
-			/* If there is default sorting required - let's do it. The sort function will do the
-			 * drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows
-			 * the table to look initialised for Ajax sourcing data (show 'loading' message possibly)
-			 */
-			if ( oSettings.oFeatures.bSort )
-			{
-				_fnSort( oSettings );
-			}
-			else if ( oSettings.oFeatures.bFilter )
-			{
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch );
-			}
-			else
-			{
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-			
-			/* if there is an ajax source load the data */
-			if ( oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
-			{
-				var aoData = [];
-				_fnServerParams( oSettings, aoData );
-				oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) {
-					var aData = (oSettings.sAjaxDataProp !== "") ?
-					 	_fnGetObjectDataFn( oSettings.sAjaxDataProp )(json) : json;
-		
-					/* Got the data - add it to the table */
-					for ( i=0 ; i<aData.length ; i++ )
-					{
-						_fnAddData( oSettings, aData[i] );
-					}
-					
-					/* Reset the init display for cookie saving. We've already done a filter, and
-					 * therefore cleared it before. So we need to make it appear 'fresh'
-					 */
-					oSettings.iInitDisplayStart = iAjaxStart;
-					
-					if ( oSettings.oFeatures.bSort )
-					{
-						_fnSort( oSettings );
-					}
-					else
-					{
-						oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-						_fnCalculateEnd( oSettings );
-						_fnDraw( oSettings );
-					}
-					
-					_fnProcessingDisplay( oSettings, false );
-					_fnInitComplete( oSettings, json );
-				}, oSettings );
-				return;
-			}
-			
-			/* Server-side processing initialisation complete is done at the end of _fnDraw */
-			if ( !oSettings.oFeatures.bServerSide )
-			{
-				_fnProcessingDisplay( oSettings, false );
-				_fnInitComplete( oSettings );
-			}
-		}
-		
-		
-		/**
-		 * Draw the table for the first time, adding all required features
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} [json] JSON from the server that completed the table, if using Ajax source
-		 *    with client-side processing (optional)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnInitComplete ( oSettings, json )
-		{
-			oSettings._bInitComplete = true;
-			_fnCallbackFire( oSettings, 'aoInitComplete', 'init', [oSettings, json] );
-		}
-		
-		
-		/**
-		 * Language compatibility - when certain options are given, and others aren't, we
-		 * need to duplicate the values over, in order to provide backwards compatibility
-		 * with older language files.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnLanguageCompat( oLanguage )
-		{
-			var oDefaults = DataTable.defaults.oLanguage;
-		
-			/* Backwards compatibility - if there is no sEmptyTable given, then use the same as
-			 * sZeroRecords - assuming that is given.
-			 */
-			if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords &&
-				oDefaults.sEmptyTable === "No data available in table" )
-			{
-				_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' );
-			}
-		
-			/* Likewise with loading records */
-			if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords &&
-				oDefaults.sLoadingRecords === "Loading..." )
-			{
-				_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' );
-			}
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for user display length changing
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Display length feature node
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlLength ( oSettings )
-		{
-			if ( oSettings.oScroll.bInfinite )
-			{
-				return null;
-			}
-			
-			/* This can be overruled by not using the _MENU_ var/macro in the language variable */
-			var sName = 'name="'+oSettings.sTableId+'_length"';
-			var sStdMenu = '<select size="1" '+sName+'>';
-			var i, iLen;
-			var aLengthMenu = oSettings.aLengthMenu;
-			
-			if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && 
-					typeof aLengthMenu[1] === 'object' )
-			{
-				for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ )
-				{
-					sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>';
-				}
-			}
-			else
-			{
-				for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ )
-				{
-					sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>';
-				}
-			}
-			sStdMenu += '</select>';
-			
-			var nLength = document.createElement( 'div' );
-			if ( !oSettings.aanFeatures.l )
-			{
-				nLength.id = oSettings.sTableId+'_length';
-			}
-			nLength.className = oSettings.oClasses.sLength;
-			nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>';
-			
-			/*
-			 * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
-			 * and Stefan Skopnik for fixing the fix!
-			 */
-			$('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true);
-			
-			$('select', nLength).bind( 'change.DT', function(e) {
-				var iVal = $(this).val();
-				
-				/* Update all other length options for the new display */
-				var n = oSettings.aanFeatures.l;
-				for ( i=0, iLen=n.length ; i<iLen ; i++ )
-				{
-					if ( n[i] != this.parentNode )
-					{
-						$('select', n[i]).val( iVal );
-					}
-				}
-				
-				/* Redraw the table */
-				oSettings._iDisplayLength = parseInt(iVal, 10);
-				_fnCalculateEnd( oSettings );
-				
-				/* If we have space to show extra rows (backing up from the end point - then do so */
-				if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() )
-				{
-					oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
-					if ( oSettings._iDisplayStart < 0 )
-					{
-						oSettings._iDisplayStart = 0;
-					}
-				}
-				
-				if ( oSettings._iDisplayLength == -1 )
-				{
-					oSettings._iDisplayStart = 0;
-				}
-				
-				_fnDraw( oSettings );
-			} );
-		
-		
-			$('select', nLength).attr('aria-controls', oSettings.sTableId);
-			
-			return nLength;
-		}
-		
-		
-		/**
-		 * Rcalculate the end point based on the start point
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCalculateEnd( oSettings )
-		{
-			if ( oSettings.oFeatures.bPaginate === false )
-			{
-				oSettings._iDisplayEnd = oSettings.aiDisplay.length;
-			}
-			else
-			{
-				/* Set the end point of the display - based on how many elements there are
-				 * still to display
-				 */
-				if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length ||
-					   oSettings._iDisplayLength == -1 )
-				{
-					oSettings._iDisplayEnd = oSettings.aiDisplay.length;
-				}
-				else
-				{
-					oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
-				}
-			}
-		}
-		
-		
-		
-		/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-		 * Note that most of the paging logic is done in 
-		 * DataTable.ext.oPagination
-		 */
-		
-		/**
-		 * Generate the node required for default pagination
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Pagination feature node
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlPaginate ( oSettings )
-		{
-			if ( oSettings.oScroll.bInfinite )
-			{
-				return null;
-			}
-			
-			var nPaginate = document.createElement( 'div' );
-			nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType;
-			
-			DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate, 
-				function( oSettings ) {
-					_fnCalculateEnd( oSettings );
-					_fnDraw( oSettings );
-				}
-			);
-			
-			/* Add a draw callback for the pagination on first instance, to update the paging display */
-			if ( !oSettings.aanFeatures.p )
-			{
-				oSettings.aoDrawCallback.push( {
-					"fn": function( oSettings ) {
-						DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) {
-							_fnCalculateEnd( oSettings );
-							_fnDraw( oSettings );
-						} );
-					},
-					"sName": "pagination"
-				} );
-			}
-			return nPaginate;
-		}
-		
-		
-		/**
-		 * Alter the display settings to change the page
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
-		 *    or page number to jump to (integer)
-		 *  @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnPageChange ( oSettings, mAction )
-		{
-			var iOldStart = oSettings._iDisplayStart;
-			
-			if ( typeof mAction === "number" )
-			{
-				oSettings._iDisplayStart = mAction * oSettings._iDisplayLength;
-				if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() )
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			else if ( mAction == "first" )
-			{
-				oSettings._iDisplayStart = 0;
-			}
-			else if ( mAction == "previous" )
-			{
-				oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ?
-					oSettings._iDisplayStart - oSettings._iDisplayLength :
-					0;
-				
-				/* Correct for underrun */
-				if ( oSettings._iDisplayStart < 0 )
-				{
-				  oSettings._iDisplayStart = 0;
-				}
-			}
-			else if ( mAction == "next" )
-			{
-				if ( oSettings._iDisplayLength >= 0 )
-				{
-					/* Make sure we are not over running the display array */
-					if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )
-					{
-						oSettings._iDisplayStart += oSettings._iDisplayLength;
-					}
-				}
-				else
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			else if ( mAction == "last" )
-			{
-				if ( oSettings._iDisplayLength >= 0 )
-				{
-					var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1;
-					oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength;
-				}
-				else
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			else
-			{
-				_fnLog( oSettings, 0, "Unknown paging action: "+mAction );
-			}
-			$(oSettings.oInstance).trigger('page', oSettings);
-			
-			return iOldStart != oSettings._iDisplayStart;
-		}
-		
-		
-		
-		/**
-		 * Generate the node required for the processing node
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Processing element
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlProcessing ( oSettings )
-		{
-			var nProcessing = document.createElement( 'div' );
-			
-			if ( !oSettings.aanFeatures.r )
-			{
-				nProcessing.id = oSettings.sTableId+'_processing';
-			}
-			nProcessing.innerHTML = oSettings.oLanguage.sProcessing;
-			nProcessing.className = oSettings.oClasses.sProcessing;
-			oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable );
-			
-			return nProcessing;
-		}
-		
-		
-		/**
-		 * Display or hide the processing indicator
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {bool} bShow Show the processing indicator (true) or not (false)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnProcessingDisplay ( oSettings, bShow )
-		{
-			if ( oSettings.oFeatures.bProcessing )
-			{
-				var an = oSettings.aanFeatures.r;
-				for ( var i=0, iLen=an.length ; i<iLen ; i++ )
-				{
-					an[i].style.visibility = bShow ? "visible" : "hidden";
-				}
-			}
-		
-			$(oSettings.oInstance).trigger('processing', [oSettings, bShow]);
-		}
-		
-		
-		
-		/**
-		 * Add any control elements for the table - specifically scrolling
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {node} Node to add to the DOM
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnFeatureHtmlTable ( oSettings )
-		{
-			/* Check if scrolling is enabled or not - if not then leave the DOM unaltered */
-			if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" )
-			{
-				return oSettings.nTable;
-			}
-			
-			/*
-			 * The HTML structure that we want to generate in this function is:
-			 *  div - nScroller
-			 *    div - nScrollHead
-			 *      div - nScrollHeadInner
-			 *        table - nScrollHeadTable
-			 *          thead - nThead
-			 *    div - nScrollBody
-			 *      table - oSettings.nTable
-			 *        thead - nTheadSize
-			 *        tbody - nTbody
-			 *    div - nScrollFoot
-			 *      div - nScrollFootInner
-			 *        table - nScrollFootTable
-			 *          tfoot - nTfoot
-			 */
-			var
-			 	nScroller = document.createElement('div'),
-			 	nScrollHead = document.createElement('div'),
-			 	nScrollHeadInner = document.createElement('div'),
-			 	nScrollBody = document.createElement('div'),
-			 	nScrollFoot = document.createElement('div'),
-			 	nScrollFootInner = document.createElement('div'),
-			 	nScrollHeadTable = oSettings.nTable.cloneNode(false),
-			 	nScrollFootTable = oSettings.nTable.cloneNode(false),
-				nThead = oSettings.nTable.getElementsByTagName('thead')[0],
-			 	nTfoot = oSettings.nTable.getElementsByTagName('tfoot').length === 0 ? null : 
-					oSettings.nTable.getElementsByTagName('tfoot')[0],
-				oClasses = oSettings.oClasses;
-			
-			nScrollHead.appendChild( nScrollHeadInner );
-			nScrollFoot.appendChild( nScrollFootInner );
-			nScrollBody.appendChild( oSettings.nTable );
-			nScroller.appendChild( nScrollHead );
-			nScroller.appendChild( nScrollBody );
-			nScrollHeadInner.appendChild( nScrollHeadTable );
-			nScrollHeadTable.appendChild( nThead );
-			if ( nTfoot !== null )
-			{
-				nScroller.appendChild( nScrollFoot );
-				nScrollFootInner.appendChild( nScrollFootTable );
-				nScrollFootTable.appendChild( nTfoot );
-			}
-			
-			nScroller.className = oClasses.sScrollWrapper;
-			nScrollHead.className = oClasses.sScrollHead;
-			nScrollHeadInner.className = oClasses.sScrollHeadInner;
-			nScrollBody.className = oClasses.sScrollBody;
-			nScrollFoot.className = oClasses.sScrollFoot;
-			nScrollFootInner.className = oClasses.sScrollFootInner;
-			
-			if ( oSettings.oScroll.bAutoCss )
-			{
-				nScrollHead.style.overflow = "hidden";
-				nScrollHead.style.position = "relative";
-				nScrollFoot.style.overflow = "hidden";
-				nScrollBody.style.overflow = "auto";
-			}
-			
-			nScrollHead.style.border = "0";
-			nScrollHead.style.width = "100%";
-			nScrollFoot.style.border = "0";
-			nScrollHeadInner.style.width = oSettings.oScroll.sXInner !== "" ?
-				oSettings.oScroll.sXInner : "100%"; /* will be overwritten */
-			
-			/* Modify attributes to respect the clones */
-			nScrollHeadTable.removeAttribute('id');
-			nScrollHeadTable.style.marginLeft = "0";
-			oSettings.nTable.style.marginLeft = "0";
-			if ( nTfoot !== null )
-			{
-				nScrollFootTable.removeAttribute('id');
-				nScrollFootTable.style.marginLeft = "0";
-			}
-			
-			/* Move caption elements from the body to the header, footer or leave where it is
-			 * depending on the configuration. Note that the DTD says there can be only one caption */
-			var nCaption = $(oSettings.nTable).children('caption');
-			if ( nCaption.length > 0 )
-			{
-				nCaption = nCaption[0];
-				if ( nCaption._captionSide === "top" )
-				{
-					nScrollHeadTable.appendChild( nCaption );
-				}
-				else if ( nCaption._captionSide === "bottom" && nTfoot )
-				{
-					nScrollFootTable.appendChild( nCaption );
-				}
-			}
-			
-			/*
-			 * Sizing
-			 */
-			/* When xscrolling add the width and a scroller to move the header with the body */
-			if ( oSettings.oScroll.sX !== "" )
-			{
-				nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX );
-				nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX );
-				
-				if ( nTfoot !== null )
-				{
-					nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX );	
-				}
-				
-				/* When the body is scrolled, then we also want to scroll the headers */
-				$(nScrollBody).scroll( function (e) {
-					nScrollHead.scrollLeft = this.scrollLeft;
-					
-					if ( nTfoot !== null )
-					{
-						nScrollFoot.scrollLeft = this.scrollLeft;
-					}
-				} );
-			}
-			
-			/* When yscrolling, add the height */
-			if ( oSettings.oScroll.sY !== "" )
-			{
-				nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY );
-			}
-			
-			/* Redraw - align columns across the tables */
-			oSettings.aoDrawCallback.push( {
-				"fn": _fnScrollDraw,
-				"sName": "scrolling"
-			} );
-			
-			/* Infinite scrolling event handlers */
-			if ( oSettings.oScroll.bInfinite )
-			{
-				$(nScrollBody).scroll( function() {
-					/* Use a blocker to stop scrolling from loading more data while other data is still loading */
-					if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 )
-					{
-						/* Check if we should load the next data set */
-						if ( $(this).scrollTop() + $(this).height() > 
-							$(oSettings.nTable).height() - oSettings.oScroll.iLoadGap )
-						{
-							/* Only do the redraw if we have to - we might be at the end of the data */
-							if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() )
-							{
-								_fnPageChange( oSettings, 'next' );
-								_fnCalculateEnd( oSettings );
-								_fnDraw( oSettings );
-							}
-						}
-					}
-				} );
-			}
-			
-			oSettings.nScrollHead = nScrollHead;
-			oSettings.nScrollFoot = nScrollFoot;
-			
-			return nScroller;
-		}
-		
-		
-		/**
-		 * Update the various tables for resizing. It's a bit of a pig this function, but
-		 * basically the idea to:
-		 *   1. Re-create the table inside the scrolling div
-		 *   2. Take live measurements from the DOM
-		 *   3. Apply the measurements
-		 *   4. Clean up
-		 *  @param {object} o dataTables settings object
-		 *  @returns {node} Node to add to the DOM
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnScrollDraw ( o )
-		{
-			var
-				nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0],
-				nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
-				nScrollBody = o.nTable.parentNode,
-				i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis,
-				nTheadSize, nTfootSize,
-				iWidth, aApplied=[], iSanityWidth,
-				nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null,
-				nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null,
-				ie67 = $.browser.msie && $.browser.version <= 7;
-			
-			/*
-			 * 1. Re-create the table inside the scrolling div
-			 */
-			
-			/* Remove the old minimised thead and tfoot elements in the inner table */
-			$(o.nTable).children('thead, tfoot').remove();
-		
-			/* Clone the current header and footer elements and then place it into the inner table */
-			nTheadSize = $(o.nTHead).clone()[0];
-			o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] );
-			
-			if ( o.nTFoot !== null )
-			{
-				nTfootSize = $(o.nTFoot).clone()[0];
-				o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] );
-			}
-			
-			/*
-			 * 2. Take live measurements from the DOM - do not alter the DOM itself!
-			 */
-			
-			/* Remove old sizing and apply the calculated column widths
-			 * Get the unique column headers in the newly created (cloned) header. We want to apply the
-			 * calclated sizes to this header
-			 */
-			if ( o.oScroll.sX === "" )
-			{
-				nScrollBody.style.width = '100%';
-				nScrollHeadInner.parentNode.style.width = '100%';
-			}
-			
-			var nThs = _fnGetUniqueThs( o, nTheadSize );
-			for ( i=0, iLen=nThs.length ; i<iLen ; i++ )
-			{
-				iVis = _fnVisibleToColumnIndex( o, i );
-				nThs[i].style.width = o.aoColumns[iVis].sWidth;
-			}
-			
-			if ( o.nTFoot !== null )
-			{
-				_fnApplyToChildren( function(n) {
-					n.style.width = "";
-				}, nTfootSize.getElementsByTagName('tr') );
-			}
-		
-			// If scroll collapse is enabled, when we put the headers back into the body for sizing, we
-			// will end up forcing the scrollbar to appear, making our measurements wrong for when we
-			// then hide it (end of this function), so add the header height to the body scroller.
-			if ( o.oScroll.bCollapse && o.oScroll.sY !== "" )
-			{
-				nScrollBody.style.height = (nScrollBody.offsetHeight + o.nTHead.offsetHeight)+"px";
-			}
-			
-			/* Size the table as a whole */
-			iSanityWidth = $(o.nTable).outerWidth();
-			if ( o.oScroll.sX === "" )
-			{
-				/* No x scrolling */
-				o.nTable.style.width = "100%";
-				
-				/* I know this is rubbish - but IE7 will make the width of the table when 100% include
-				 * the scrollbar - which is shouldn't. When there is a scrollbar we need to take this
-				 * into account.
-				 */
-				if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight || 
-					$(nScrollBody).css('overflow-y') == "scroll")  )
-				{
-					o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth() - o.oScroll.iBarWidth);
-				}
-			}
-			else
-			{
-				if ( o.oScroll.sXInner !== "" )
-				{
-					/* x scroll inner has been given - use it */
-					o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner);
-				}
-				else if ( iSanityWidth == $(nScrollBody).width() &&
-				   $(nScrollBody).height() < $(o.nTable).height() )
-				{
-					/* There is y-scrolling - try to take account of the y scroll bar */
-					o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth );
-					if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth )
-					{
-						/* Not possible to take account of it */
-						o.nTable.style.width = _fnStringToCss( iSanityWidth );
-					}
-				}
-				else
-				{
-					/* All else fails */
-					o.nTable.style.width = _fnStringToCss( iSanityWidth );
-				}
-			}
-			
-			/* Recalculate the sanity width - now that we've applied the required width, before it was
-			 * a temporary variable. This is required because the column width calculation is done
-			 * before this table DOM is created.
-			 */
-			iSanityWidth = $(o.nTable).outerWidth();
-			
-			/* We want the hidden header to have zero height, so remove padding and borders. Then
-			 * set the width based on the real headers
-			 */
-			anHeadToSize = o.nTHead.getElementsByTagName('tr');
-			anHeadSizers = nTheadSize.getElementsByTagName('tr');
-			
-			_fnApplyToChildren( function(nSizer, nToSize) {
-				oStyle = nSizer.style;
-				oStyle.paddingTop = "0";
-				oStyle.paddingBottom = "0";
-				oStyle.borderTopWidth = "0";
-				oStyle.borderBottomWidth = "0";
-				oStyle.height = 0;
-				
-				iWidth = $(nSizer).width();
-				nToSize.style.width = _fnStringToCss( iWidth );
-				aApplied.push( iWidth );
-			}, anHeadSizers, anHeadToSize );
-			$(anHeadSizers).height(0);
-			
-			if ( o.nTFoot !== null )
-			{
-				/* Clone the current footer and then place it into the body table as a "hidden header" */
-				anFootSizers = nTfootSize.getElementsByTagName('tr');
-				anFootToSize = o.nTFoot.getElementsByTagName('tr');
-				
-				_fnApplyToChildren( function(nSizer, nToSize) {
-					oStyle = nSizer.style;
-					oStyle.paddingTop = "0";
-					oStyle.paddingBottom = "0";
-					oStyle.borderTopWidth = "0";
-					oStyle.borderBottomWidth = "0";
-					oStyle.height = 0;
-					
-					iWidth = $(nSizer).width();
-					nToSize.style.width = _fnStringToCss( iWidth );
-					aApplied.push( iWidth );
-				}, anFootSizers, anFootToSize );
-				$(anFootSizers).height(0);
-			}
-			
-			/*
-			 * 3. Apply the measurements
-			 */
-			
-			/* "Hide" the header and footer that we used for the sizing. We want to also fix their width
-			 * to what they currently are
-			 */
-			_fnApplyToChildren( function(nSizer) {
-				nSizer.innerHTML = "";
-				nSizer.style.width = _fnStringToCss( aApplied.shift() );
-			}, anHeadSizers );
-			
-			if ( o.nTFoot !== null )
-			{
-				_fnApplyToChildren( function(nSizer) {
-					nSizer.innerHTML = "";
-					nSizer.style.width = _fnStringToCss( aApplied.shift() );
-				}, anFootSizers );
-			}
-			
-			/* Sanity check that the table is of a sensible width. If not then we are going to get
-			 * misalignment - try to prevent this by not allowing the table to shrink below its min width
-			 */
-			if ( $(o.nTable).outerWidth() < iSanityWidth )
-			{
-				/* The min width depends upon if we have a vertical scrollbar visible or not */
-				var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || 
-					$(nScrollBody).css('overflow-y') == "scroll")) ?
-						iSanityWidth+o.oScroll.iBarWidth : iSanityWidth;
-				
-				/* IE6/7 are a law unto themselves... */
-				if ( ie67 && (nScrollBody.scrollHeight > 
-					nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll")  )
-				{
-					o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth );
-				}
-				
-				/* Apply the calculated minimum width to the table wrappers */
-				nScrollBody.style.width = _fnStringToCss( iCorrection );
-				nScrollHeadInner.parentNode.style.width = _fnStringToCss( iCorrection );
-				
-				if ( o.nTFoot !== null )
-				{
-					nScrollFootInner.parentNode.style.width = _fnStringToCss( iCorrection );
-				}
-				
-				/* And give the user a warning that we've stopped the table getting too small */
-				if ( o.oScroll.sX === "" )
-				{
-					_fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
-						" misalignment. The table has been drawn at its minimum possible width." );
-				}
-				else if ( o.oScroll.sXInner !== "" )
-				{
-					_fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
-						" misalignment. Increase the sScrollXInner value or remove it to allow automatic"+
-						" calculation" );
-				}
-			}
-			else
-			{
-				nScrollBody.style.width = _fnStringToCss( '100%' );
-				nScrollHeadInner.parentNode.style.width = _fnStringToCss( '100%' );
-				
-				if ( o.nTFoot !== null )
-				{
-					nScrollFootInner.parentNode.style.width = _fnStringToCss( '100%' );
-				}
-			}
-			
-			
-			/*
-			 * 4. Clean up
-			 */
-			if ( o.oScroll.sY === "" )
-			{
-				/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
-				 * the scrollbar height from the visible display, rather than adding it on. We need to
-				 * set the height in order to sort this. Don't want to do it in any other browsers.
-				 */
-				if ( ie67 )
-				{
-					nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth );
-				}
-			}
-			
-			if ( o.oScroll.sY !== "" && o.oScroll.bCollapse )
-			{
-				nScrollBody.style.height = _fnStringToCss( o.oScroll.sY );
-				
-				var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ?
-				 	o.oScroll.iBarWidth : 0;
-				if ( o.nTable.offsetHeight < nScrollBody.offsetHeight )
-				{
-					nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+iExtra );
-				}
-			}
-			
-			/* Finally set the width's of the header and footer tables */
-			var iOuterWidth = $(o.nTable).outerWidth();
-			nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth );
-			nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth );
-		
-			// Figure out if there are scrollbar present - if so then we need a the header and footer to
-			// provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
-			var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll";
-			nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
-			
-			if ( o.nTFoot !== null )
-			{
-				nScrollFootTable.style.width = _fnStringToCss( iOuterWidth );
-				nScrollFootInner.style.width = _fnStringToCss( iOuterWidth );
-				nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
-			}
-		
-			/* Adjust the position of the header incase we loose the y-scrollbar */
-			$(nScrollBody).scroll();
-			
-			/* If sorting or filtering has occurred, jump the scrolling back to the top */
-			if ( o.bSorted || o.bFiltered )
-			{
-				nScrollBody.scrollTop = 0;
-			}
-		}
-		
-		
-		/**
-		 * Apply a given function to the display child nodes of an element array (typically
-		 * TD children of TR rows
-		 *  @param {function} fn Method to apply to the objects
-		 *  @param array {nodes} an1 List of elements to look through for display children
-		 *  @param array {nodes} an2 Another list (identical structure to the first) - optional
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnApplyToChildren( fn, an1, an2 )
-		{
-			for ( var i=0, iLen=an1.length ; i<iLen ; i++ )
-			{
-				for ( var j=0, jLen=an1[i].childNodes.length ; j<jLen ; j++ )
-				{
-					if ( an1[i].childNodes[j].nodeType == 1 )
-					{
-						if ( an2 )
-						{
-							fn( an1[i].childNodes[j], an2[i].childNodes[j] );
-						}
-						else
-						{
-							fn( an1[i].childNodes[j] );
-						}
-					}
-				}
-			}
-		}
-		
-		
-		
-		/**
-		 * Convert a CSS unit width to pixels (e.g. 2em)
-		 *  @param {string} sWidth width to be converted
-		 *  @param {node} nParent parent to get the with for (required for relative widths) - optional
-		 *  @returns {int} iWidth width in pixels
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnConvertToWidth ( sWidth, nParent )
-		{
-			if ( !sWidth || sWidth === null || sWidth === '' )
-			{
-				return 0;
-			}
-			
-			if ( !nParent )
-			{
-				nParent = document.getElementsByTagName('body')[0];
-			}
-			
-			var iWidth;
-			var nTmp = document.createElement( "div" );
-			nTmp.style.width = _fnStringToCss( sWidth );
-			
-			nParent.appendChild( nTmp );
-			iWidth = nTmp.offsetWidth;
-			nParent.removeChild( nTmp );
-			
-			return ( iWidth );
-		}
-		
-		
-		/**
-		 * Calculate the width of columns for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCalculateColumnWidths ( oSettings )
-		{
-			var iTableWidth = oSettings.nTable.offsetWidth;
-			var iUserInputs = 0;
-			var iTmpWidth;
-			var iVisibleColumns = 0;
-			var iColums = oSettings.aoColumns.length;
-			var i, iIndex, iCorrector, iWidth;
-			var oHeaders = $('th', oSettings.nTHead);
-			var widthAttr = oSettings.nTable.getAttribute('width');
-			
-			/* Convert any user input sizes into pixel sizes */
-			for ( i=0 ; i<iColums ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible )
-				{
-					iVisibleColumns++;
-					
-					if ( oSettings.aoColumns[i].sWidth !== null )
-					{
-						iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig, 
-							oSettings.nTable.parentNode );
-						if ( iTmpWidth !== null )
-						{
-							oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
-						}
-							
-						iUserInputs++;
-					}
-				}
-			}
-			
-			/* If the number of columns in the DOM equals the number that we have to process in 
-			 * DataTables, then we can use the offsets that are created by the web-browser. No custom 
-			 * sizes can be set in order for this to happen, nor scrolling used
-			 */
-			if ( iColums == oHeaders.length && iUserInputs === 0 && iVisibleColumns == iColums &&
-				oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" )
-			{
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					iTmpWidth = $(oHeaders[i]).width();
-					if ( iTmpWidth !== null )
-					{
-						oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
-					}
-				}
-			}
-			else
-			{
-				/* Otherwise we are going to have to do some calculations to get the width of each column.
-				 * Construct a 1 row table with the widest node in the data, and any user defined widths,
-				 * then insert it into the DOM and allow the browser to do all the hard work of
-				 * calculating table widths.
-				 */
-				var
-					nCalcTmp = oSettings.nTable.cloneNode( false ),
-					nTheadClone = oSettings.nTHead.cloneNode(true),
-					nBody = document.createElement( 'tbody' ),
-					nTr = document.createElement( 'tr' ),
-					nDivSizing;
-				
-				nCalcTmp.removeAttribute( "id" );
-				nCalcTmp.appendChild( nTheadClone );
-				if ( oSettings.nTFoot !== null )
-				{
-					nCalcTmp.appendChild( oSettings.nTFoot.cloneNode(true) );
-					_fnApplyToChildren( function(n) {
-						n.style.width = "";
-					}, nCalcTmp.getElementsByTagName('tr') );
-				}
-				
-				nCalcTmp.appendChild( nBody );
-				nBody.appendChild( nTr );
-				
-				/* Remove any sizing that was previously applied by the styles */
-				var jqColSizing = $('thead th', nCalcTmp);
-				if ( jqColSizing.length === 0 )
-				{
-					jqColSizing = $('tbody tr:eq(0)>td', nCalcTmp);
-				}
-		
-				/* Apply custom sizing to the cloned header */
-				var nThs = _fnGetUniqueThs( oSettings, nTheadClone );
-				iCorrector = 0;
-				for ( i=0 ; i<iColums ; i++ )
-				{
-					var oColumn = oSettings.aoColumns[i];
-					if ( oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "" )
-					{
-						nThs[i-iCorrector].style.width = _fnStringToCss( oColumn.sWidthOrig );
-					}
-					else if ( oColumn.bVisible )
-					{
-						nThs[i-iCorrector].style.width = "";
-					}
-					else
-					{
-						iCorrector++;
-					}
-				}
-		
-				/* Find the biggest td for each column and put it into the table */
-				for ( i=0 ; i<iColums ; i++ )
-				{
-					if ( oSettings.aoColumns[i].bVisible )
-					{
-						var nTd = _fnGetWidestNode( oSettings, i );
-						if ( nTd !== null )
-						{
-							nTd = nTd.cloneNode(true);
-							if ( oSettings.aoColumns[i].sContentPadding !== "" )
-							{
-								nTd.innerHTML += oSettings.aoColumns[i].sContentPadding;
-							}
-							nTr.appendChild( nTd );
-						}
-					}
-				}
-				
-				/* Build the table and 'display' it */
-				var nWrapper = oSettings.nTable.parentNode;
-				nWrapper.appendChild( nCalcTmp );
-				
-				/* When scrolling (X or Y) we want to set the width of the table as appropriate. However,
-				 * when not scrolling leave the table width as it is. This results in slightly different,
-				 * but I think correct behaviour
-				 */
-				if ( oSettings.oScroll.sX !== "" && oSettings.oScroll.sXInner !== "" )
-				{
-					nCalcTmp.style.width = _fnStringToCss(oSettings.oScroll.sXInner);
-				}
-				else if ( oSettings.oScroll.sX !== "" )
-				{
-					nCalcTmp.style.width = "";
-					if ( $(nCalcTmp).width() < nWrapper.offsetWidth )
-					{
-						nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth );
-					}
-				}
-				else if ( oSettings.oScroll.sY !== "" )
-				{
-					nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth );
-				}
-				else if ( widthAttr )
-				{
-					nCalcTmp.style.width = _fnStringToCss( widthAttr );
-				}
-				nCalcTmp.style.visibility = "hidden";
-				
-				/* Scrolling considerations */
-				_fnScrollingWidthAdjust( oSettings, nCalcTmp );
-				
-				/* Read the width's calculated by the browser and store them for use by the caller. We
-				 * first of all try to use the elements in the body, but it is possible that there are
-				 * no elements there, under which circumstances we use the header elements
-				 */
-				var oNodes = $("tbody tr:eq(0)", nCalcTmp).children();
-				if ( oNodes.length === 0 )
-				{
-					oNodes = _fnGetUniqueThs( oSettings, $('thead', nCalcTmp)[0] );
-				}
-		
-				/* Browsers need a bit of a hand when a width is assigned to any columns when 
-				 * x-scrolling as they tend to collapse the table to the min-width, even if
-				 * we sent the column widths. So we need to keep track of what the table width
-				 * should be by summing the user given values, and the automatic values
-				 */
-				if ( oSettings.oScroll.sX !== "" )
-				{
-					var iTotal = 0;
-					iCorrector = 0;
-					for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-					{
-						if ( oSettings.aoColumns[i].bVisible )
-						{
-							if ( oSettings.aoColumns[i].sWidthOrig === null )
-							{
-								iTotal += $(oNodes[iCorrector]).outerWidth();
-							}
-							else
-							{
-								iTotal += parseInt(oSettings.aoColumns[i].sWidth.replace('px',''), 10) +
-									($(oNodes[iCorrector]).outerWidth() - $(oNodes[iCorrector]).width());
-							}
-							iCorrector++;
-						}
-					}
-					
-					nCalcTmp.style.width = _fnStringToCss( iTotal );
-					oSettings.nTable.style.width = _fnStringToCss( iTotal );
-				}
-		
-				iCorrector = 0;
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					if ( oSettings.aoColumns[i].bVisible )
-					{
-						iWidth = $(oNodes[iCorrector]).width();
-						if ( iWidth !== null && iWidth > 0 )
-						{
-							oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth );
-						}
-						iCorrector++;
-					}
-				}
-		
-				var cssWidth = $(nCalcTmp).css('width');
-				oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ?
-				    cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() );
-				nCalcTmp.parentNode.removeChild( nCalcTmp );
-			}
-		
-			if ( widthAttr )
-			{
-				oSettings.nTable.style.width = _fnStringToCss( widthAttr );
-			}
-		}
-		
-		
-		/**
-		 * Adjust a table's width to take account of scrolling
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} n table node
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnScrollingWidthAdjust ( oSettings, n )
-		{
-			if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" )
-			{
-				/* When y-scrolling only, we want to remove the width of the scroll bar so the table
-				 * + scroll bar will fit into the area avaialble.
-				 */
-				var iOrigWidth = $(n).width();
-				n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth );
-			}
-			else if ( oSettings.oScroll.sX !== "" )
-			{
-				/* When x-scrolling both ways, fix the table at it's current size, without adjusting */
-				n.style.width = _fnStringToCss( $(n).outerWidth() );
-			}
-		}
-		
-		
-		/**
-		 * Get the widest node
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iCol column of interest
-		 *  @returns {string} max strlens for each column
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetWidestNode( oSettings, iCol )
-		{
-			var iMaxIndex = _fnGetMaxLenString( oSettings, iCol );
-			if ( iMaxIndex < 0 )
-			{
-				return null;
-			}
-		
-			if ( oSettings.aoData[iMaxIndex].nTr === null )
-			{
-				var n = document.createElement('td');
-				n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' );
-				return n;
-			}
-			return _fnGetTdNodes(oSettings, iMaxIndex)[iCol];
-		}
-		
-		
-		/**
-		 * Get the maximum strlen for each data column
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iCol column of interest
-		 *  @returns {string} max strlens for each column
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetMaxLenString( oSettings, iCol )
-		{
-			var iMax = -1;
-			var iMaxIndex = -1;
-			
-			for ( var i=0 ; i<oSettings.aoData.length ; i++ )
-			{
-				var s = _fnGetCellData( oSettings, i, iCol, 'display' )+"";
-				s = s.replace( /<.*?>/g, "" );
-				if ( s.length > iMax )
-				{
-					iMax = s.length;
-					iMaxIndex = i;
-				}
-			}
-			
-			return iMaxIndex;
-		}
-		
-		
-		/**
-		 * Append a CSS unit (only if required) to a string
-		 *  @param {array} aArray1 first array
-		 *  @param {array} aArray2 second array
-		 *  @returns {int} 0 if match, 1 if length is different, 2 if no match
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnStringToCss( s )
-		{
-			if ( s === null )
-			{
-				return "0px";
-			}
-			
-			if ( typeof s == 'number' )
-			{
-				if ( s < 0 )
-				{
-					return "0px";
-				}
-				return s+"px";
-			}
-			
-			/* Check if the last character is not 0-9 */
-			var c = s.charCodeAt( s.length-1 );
-			if (c < 0x30 || c > 0x39)
-			{
-				return s;
-			}
-			return s+"px";
-		}
-		
-		
-		/**
-		 * Get the width of a scroll bar in this browser being used
-		 *  @returns {int} width in pixels
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnScrollBarWidth ()
-		{  
-			var inner = document.createElement('p');
-			var style = inner.style;
-			style.width = "100%";
-			style.height = "200px";
-			style.padding = "0px";
-			
-			var outer = document.createElement('div');
-			style = outer.style;
-			style.position = "absolute";
-			style.top = "0px";
-			style.left = "0px";
-			style.visibility = "hidden";
-			style.width = "200px";
-			style.height = "150px";
-			style.padding = "0px";
-			style.overflow = "hidden";
-			outer.appendChild(inner);
-			
-			document.body.appendChild(outer);
-			var w1 = inner.offsetWidth;
-			outer.style.overflow = 'scroll';
-			var w2 = inner.offsetWidth;
-			if ( w1 == w2 )
-			{
-				w2 = outer.clientWidth;
-			}
-			
-			document.body.removeChild(outer);
-			return (w1 - w2);  
-		}
-		
-		
-		
-		/**
-		 * Change the order of the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {bool} bApplyClasses optional - should we apply classes or not
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSort ( oSettings, bApplyClasses )
-		{
-			var
-				i, iLen, j, jLen, k, kLen,
-				sDataType, nTh,
-				aaSort = [],
-			 	aiOrig = [],
-				oSort = DataTable.ext.oSort,
-				aoData = oSettings.aoData,
-				aoColumns = oSettings.aoColumns,
-				oAria = oSettings.oLanguage.oAria;
-			
-			/* No sorting required if server-side or no sorting array */
-			if ( !oSettings.oFeatures.bServerSide && 
-				(oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) )
-			{
-				aaSort = ( oSettings.aaSortingFixed !== null ) ?
-					oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
-					oSettings.aaSorting.slice();
-				
-				/* If there is a sorting data type, and a fuction belonging to it, then we need to
-				 * get the data from the developer's function and apply it for this column
-				 */
-				for ( i=0 ; i<aaSort.length ; i++ )
-				{
-					var iColumn = aaSort[i][0];
-					var iVisColumn = _fnColumnIndexToVisible( oSettings, iColumn );
-					sDataType = oSettings.aoColumns[ iColumn ].sSortDataType;
-					if ( DataTable.ext.afnSortData[sDataType] )
-					{
-						var aData = DataTable.ext.afnSortData[sDataType].call( 
-							oSettings.oInstance, oSettings, iColumn, iVisColumn
-						);
-						if ( aData.length === aoData.length )
-						{
-							for ( j=0, jLen=aoData.length ; j<jLen ; j++ )
-							{
-								_fnSetCellData( oSettings, j, iColumn, aData[j] );
-							}
-						}
-						else
-						{
-							_fnLog( oSettings, 0, "Returned data sort array (col "+iColumn+") is the wrong length" );
-						}
-					}
-				}
-				
-				/* Create a value - key array of the current row positions such that we can use their
-				 * current position during the sort, if values match, in order to perform stable sorting
-				 */
-				for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ )
-				{
-					aiOrig[ oSettings.aiDisplayMaster[i] ] = i;
-				}
-		
-				/* Build an internal data array which is specific to the sort, so we can get and prep
-				 * the data to be sorted only once, rather than needing to do it every time the sorting
-				 * function runs. This make the sorting function a very simple comparison
-				 */
-				var iSortLen = aaSort.length;
-				var fnSortFormat, aDataSort;
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					for ( j=0 ; j<iSortLen ; j++ )
-					{
-						aDataSort = aoColumns[ aaSort[j][0] ].aDataSort;
-		
-						for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )
-						{
-							sDataType = aoColumns[ aDataSort[k] ].sType;
-							fnSortFormat = oSort[ (sDataType ? sDataType : 'string')+"-pre" ];
-							
-							aoData[i]._aSortData[ aDataSort[k] ] = fnSortFormat ?
-								fnSortFormat( _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ) ) :
-								_fnGetCellData( oSettings, i, aDataSort[k], 'sort' );
-						}
-					}
-				}
-				
-				/* Do the sort - here we want multi-column sorting based on a given data source (column)
-				 * and sorting function (from oSort) in a certain direction. It's reasonably complex to
-				 * follow on it's own, but this is what we want (example two column sorting):
-				 *  fnLocalSorting = function(a,b){
-				 *  	var iTest;
-				 *  	iTest = oSort['string-asc']('data11', 'data12');
-				 *  	if (iTest !== 0)
-				 *  		return iTest;
-				 *    iTest = oSort['numeric-desc']('data21', 'data22');
-				 *    if (iTest !== 0)
-				 *  		return iTest;
-				 *  	return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
-				 *  }
-				 * Basically we have a test for each sorting column, if the data in that column is equal,
-				 * test the next column. If all columns match, then we use a numeric sort on the row 
-				 * positions in the original data array to provide a stable sort.
-				 */
-				oSettings.aiDisplayMaster.sort( function ( a, b ) {
-					var k, l, lLen, iTest, aDataSort, sDataType;
-					for ( k=0 ; k<iSortLen ; k++ )
-					{
-						aDataSort = aoColumns[ aaSort[k][0] ].aDataSort;
-		
-						for ( l=0, lLen=aDataSort.length ; l<lLen ; l++ )
-						{
-							sDataType = aoColumns[ aDataSort[l] ].sType;
-							
-							iTest = oSort[ (sDataType ? sDataType : 'string')+"-"+aaSort[k][1] ](
-								aoData[a]._aSortData[ aDataSort[l] ],
-								aoData[b]._aSortData[ aDataSort[l] ]
-							);
-						
-							if ( iTest !== 0 )
-							{
-								return iTest;
-							}
-						}
-					}
-					
-					return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
-				} );
-			}
-			
-			/* Alter the sorting classes to take account of the changes */
-			if ( (bApplyClasses === undefined || bApplyClasses) && !oSettings.oFeatures.bDeferRender )
-			{
-				_fnSortingClasses( oSettings );
-			}
-		
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				var sTitle = aoColumns[i].sTitle.replace( /<.*?>/g, "" );
-				nTh = aoColumns[i].nTh;
-				nTh.removeAttribute('aria-sort');
-				nTh.removeAttribute('aria-label');
-				
-				/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */
-				if ( aoColumns[i].bSortable )
-				{
-					if ( aaSort.length > 0 && aaSort[0][0] == i )
-					{
-						nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" );
-						
-						var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ? 
-							aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0];
-						nTh.setAttribute('aria-label', sTitle+
-							(nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
-					}
-					else
-					{
-						nTh.setAttribute('aria-label', sTitle+
-							(aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
-					}
-				}
-				else
-				{
-					nTh.setAttribute('aria-label', sTitle);
-				}
-			}
-			
-			/* Tell the draw function that we have sorted the data */
-			oSettings.bSorted = true;
-			$(oSettings.oInstance).trigger('sort', oSettings);
-			
-			/* Copy the master data into the draw array and re-draw */
-			if ( oSettings.oFeatures.bFilter )
-			{
-				/* _fnFilter() will redraw the table for us */
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
-			}
-			else
-			{
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-				oSettings._iDisplayStart = 0; /* reset display back to page 0 */
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-		}
-		
-		
-		/**
-		 * Attach a sort handler (click) to a node
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {node} nNode node to attach the handler to
-		 *  @param {int} iDataIndex column sorting index
-		 *  @param {function} [fnCallback] callback function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback )
-		{
-			_fnBindAction( nNode, {}, function (e) {
-				/* If the column is not sortable - don't to anything */
-				if ( oSettings.aoColumns[iDataIndex].bSortable === false )
-				{
-					return;
-				}
-				
-				/*
-				 * This is a little bit odd I admit... I declare a temporary function inside the scope of
-				 * _fnBuildHead and the click handler in order that the code presented here can be used 
-				 * twice - once for when bProcessing is enabled, and another time for when it is 
-				 * disabled, as we need to perform slightly different actions.
-				 *   Basically the issue here is that the Javascript engine in modern browsers don't 
-				 * appear to allow the rendering engine to update the display while it is still excuting
-				 * it's thread (well - it does but only after long intervals). This means that the 
-				 * 'processing' display doesn't appear for a table sort. To break the js thread up a bit
-				 * I force an execution break by using setTimeout - but this breaks the expected 
-				 * thread continuation for the end-developer's point of view (their code would execute
-				 * too early), so we on;y do it when we absolutely have to.
-				 */
-				var fnInnerSorting = function () {
-					var iColumn, iNextSort;
-					
-					/* If the shift key is pressed then we are multipe column sorting */
-					if ( e.shiftKey )
-					{
-						/* Are we already doing some kind of sort on this column? */
-						var bFound = false;
-						for ( var i=0 ; i<oSettings.aaSorting.length ; i++ )
-						{
-							if ( oSettings.aaSorting[i][0] == iDataIndex )
-							{
-								bFound = true;
-								iColumn = oSettings.aaSorting[i][0];
-								iNextSort = oSettings.aaSorting[i][2]+1;
-								
-								if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] )
-								{
-									/* Reached the end of the sorting options, remove from multi-col sort */
-									oSettings.aaSorting.splice( i, 1 );
-								}
-								else
-								{
-									/* Move onto next sorting direction */
-									oSettings.aaSorting[i][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort];
-									oSettings.aaSorting[i][2] = iNextSort;
-								}
-								break;
-							}
-						}
-						
-						/* No sort yet - add it in */
-						if ( bFound === false )
-						{
-							oSettings.aaSorting.push( [ iDataIndex, 
-								oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] );
-						}
-					}
-					else
-					{
-						/* If no shift key then single column sort */
-						if ( oSettings.aaSorting.length == 1 && oSettings.aaSorting[0][0] == iDataIndex )
-						{
-							iColumn = oSettings.aaSorting[0][0];
-							iNextSort = oSettings.aaSorting[0][2]+1;
-							if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] )
-							{
-								iNextSort = 0;
-							}
-							oSettings.aaSorting[0][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort];
-							oSettings.aaSorting[0][2] = iNextSort;
-						}
-						else
-						{
-							oSettings.aaSorting.splice( 0, oSettings.aaSorting.length );
-							oSettings.aaSorting.push( [ iDataIndex, 
-								oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] );
-						}
-					}
-					
-					/* Run the sort */
-					_fnSort( oSettings );
-				}; /* /fnInnerSorting */
-				
-				if ( !oSettings.oFeatures.bProcessing )
-				{
-					fnInnerSorting();
-				}
-				else
-				{
-					_fnProcessingDisplay( oSettings, true );
-					setTimeout( function() {
-						fnInnerSorting();
-						if ( !oSettings.oFeatures.bServerSide )
-						{
-							_fnProcessingDisplay( oSettings, false );
-						}
-					}, 0 );
-				}
-				
-				/* Call the user specified callback function - used for async user interaction */
-				if ( typeof fnCallback == 'function' )
-				{
-					fnCallback( oSettings );
-				}
-			} );
-		}
-		
-		
-		/**
-		 * Set the sorting classes on the header, Note: it is safe to call this function 
-		 * when bSort and bSortClasses are false
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSortingClasses( oSettings )
-		{
-			var i, iLen, j, jLen, iFound;
-			var aaSort, sClass;
-			var iColumns = oSettings.aoColumns.length;
-			var oClasses = oSettings.oClasses;
-			
-			for ( i=0 ; i<iColumns ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bSortable )
-				{
-					$(oSettings.aoColumns[i].nTh).removeClass( oClasses.sSortAsc +" "+ oClasses.sSortDesc +
-						" "+ oSettings.aoColumns[i].sSortingClass );
-				}
-			}
-			
-			if ( oSettings.aaSortingFixed !== null )
-			{
-				aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting );
-			}
-			else
-			{
-				aaSort = oSettings.aaSorting.slice();
-			}
-			
-			/* Apply the required classes to the header */
-			for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bSortable )
-				{
-					sClass = oSettings.aoColumns[i].sSortingClass;
-					iFound = -1;
-					for ( j=0 ; j<aaSort.length ; j++ )
-					{
-						if ( aaSort[j][0] == i )
-						{
-							sClass = ( aaSort[j][1] == "asc" ) ?
-								oClasses.sSortAsc : oClasses.sSortDesc;
-							iFound = j;
-							break;
-						}
-					}
-					$(oSettings.aoColumns[i].nTh).addClass( sClass );
-					
-					if ( oSettings.bJUI )
-					{
-						/* jQuery UI uses extra markup */
-						var jqSpan = $("span."+oClasses.sSortIcon,  oSettings.aoColumns[i].nTh);
-						jqSpan.removeClass(oClasses.sSortJUIAsc +" "+ oClasses.sSortJUIDesc +" "+ 
-							oClasses.sSortJUI +" "+ oClasses.sSortJUIAscAllowed +" "+ oClasses.sSortJUIDescAllowed );
-						
-						var sSpanClass;
-						if ( iFound == -1 )
-						{
-						 	sSpanClass = oSettings.aoColumns[i].sSortingClassJUI;
-						}
-						else if ( aaSort[iFound][1] == "asc" )
-						{
-							sSpanClass = oClasses.sSortJUIAsc;
-						}
-						else
-						{
-							sSpanClass = oClasses.sSortJUIDesc;
-						}
-						
-						jqSpan.addClass( sSpanClass );
-					}
-				}
-				else
-				{
-					/* No sorting on this column, so add the base class. This will have been assigned by
-					 * _fnAddColumn
-					 */
-					$(oSettings.aoColumns[i].nTh).addClass( oSettings.aoColumns[i].sSortingClass );
-				}
-			}
-			
-			/* 
-			 * Apply the required classes to the table body
-			 * Note that this is given as a feature switch since it can significantly slow down a sort
-			 * on large data sets (adding and removing of classes is always slow at the best of times..)
-			 * Further to this, note that this code is admitadly fairly ugly. It could be made a lot 
-			 * simpiler using jQuery selectors and add/removeClass, but that is significantly slower
-			 * (on the order of 5 times slower) - hence the direct DOM manipulation here.
-			 * Note that for defered drawing we do use jQuery - the reason being that taking the first
-			 * row found to see if the whole column needs processed can miss classes since the first
-			 * column might be new.
-			 */
-			sClass = oClasses.sSortColumn;
-			
-			if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses )
-			{
-				var nTds = _fnGetTdNodes( oSettings );
-		
-				/* Remove the old classes */
-				if ( oSettings.oFeatures.bDeferRender )
-				{
-					$(nTds).removeClass(sClass+'1 '+sClass+'2 '+sClass+'3');
-				}
-				else if ( nTds.length >= iColumns )
-				{
-					for ( i=0 ; i<iColumns ; i++ )
-					{
-						if ( nTds[i].className.indexOf(sClass+"1") != -1 )
-						{
-							for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-							{
-								nTds[(iColumns*j)+i].className = 
-									$.trim( nTds[(iColumns*j)+i].className.replace( sClass+"1", "" ) );
-							}
-						}
-						else if ( nTds[i].className.indexOf(sClass+"2") != -1 )
-						{
-							for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-							{
-								nTds[(iColumns*j)+i].className = 
-									$.trim( nTds[(iColumns*j)+i].className.replace( sClass+"2", "" ) );
-							}
-						}
-						else if ( nTds[i].className.indexOf(sClass+"3") != -1 )
-						{
-							for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-							{
-								nTds[(iColumns*j)+i].className = 
-									$.trim( nTds[(iColumns*j)+i].className.replace( " "+sClass+"3", "" ) );
-							}
-						}
-					}
-				}
-				
-				/* Add the new classes to the table */
-				var iClass = 1, iTargetCol;
-				for ( i=0 ; i<aaSort.length ; i++ )
-				{
-					iTargetCol = parseInt( aaSort[i][0], 10 );
-					for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
-					{
-						nTds[(iColumns*j)+iTargetCol].className += " "+sClass+iClass;
-					}
-					
-					if ( iClass < 3 )
-					{
-						iClass++;
-					}
-				}
-			}
-		}
-		
-		
-		
-		/**
-		 * Save the state of a table in a cookie such that the page can be reloaded
-		 *  @param {object} oSettings dataTables settings object
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSaveState ( oSettings )
-		{
-			if ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying )
-			{
-				return;
-			}
-		
-			/* Store the interesting variables */
-			var i, iLen, bInfinite=oSettings.oScroll.bInfinite;
-			var oState = {
-				"iCreate":      new Date().getTime(),
-				"iStart":       (bInfinite ? 0 : oSettings._iDisplayStart),
-				"iEnd":         (bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd),
-				"iLength":      oSettings._iDisplayLength,
-				"aaSorting":    $.extend( true, [], oSettings.aaSorting ),
-				"oSearch":      $.extend( true, {}, oSettings.oPreviousSearch ),
-				"aoSearchCols": $.extend( true, [], oSettings.aoPreSearchCols ),
-				"abVisCols":    []
-			};
-		
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oState.abVisCols.push( oSettings.aoColumns[i].bVisible );
-			}
-		
-			_fnCallbackFire( oSettings, "aoStateSaveParams", 'stateSaveParams', [oSettings, oState] );
-			
-			oSettings.fnStateSave.call( oSettings.oInstance, oSettings, oState );
-		}
-		
-		
-		/**
-		 * Attempt to load a saved table state from a cookie
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {object} oInit DataTables init object so we can override settings
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnLoadState ( oSettings, oInit )
-		{
-			if ( !oSettings.oFeatures.bStateSave )
-			{
-				return;
-			}
-		
-			var oData = oSettings.fnStateLoad.call( oSettings.oInstance, oSettings );
-			if ( !oData )
-			{
-				return;
-			}
-			
-			/* Allow custom and plug-in manipulation functions to alter the saved data set and
-			 * cancelling of loading by returning false
-			 */
-			var abStateLoad = _fnCallbackFire( oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData] );
-			if ( $.inArray( false, abStateLoad ) !== -1 )
-			{
-				return;
-			}
-			
-			/* Store the saved state so it might be accessed at any time */
-			oSettings.oLoadedState = $.extend( true, {}, oData );
-			
-			/* Restore key features */
-			oSettings._iDisplayStart    = oData.iStart;
-			oSettings.iInitDisplayStart = oData.iStart;
-			oSettings._iDisplayEnd      = oData.iEnd;
-			oSettings._iDisplayLength   = oData.iLength;
-			oSettings.aaSorting         = oData.aaSorting.slice();
-			oSettings.saved_aaSorting   = oData.aaSorting.slice();
-			
-			/* Search filtering  */
-			$.extend( oSettings.oPreviousSearch, oData.oSearch );
-			$.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols );
-			
-			/* Column visibility state
-			 * Pass back visibiliy settings to the init handler, but to do not here override
-			 * the init object that the user might have passed in
-			 */
-			oInit.saved_aoColumns = [];
-			for ( var i=0 ; i<oData.abVisCols.length ; i++ )
-			{
-				oInit.saved_aoColumns[i] = {};
-				oInit.saved_aoColumns[i].bVisible = oData.abVisCols[i];
-			}
-		
-			_fnCallbackFire( oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData] );
-		}
-		
-		
-		/**
-		 * Create a new cookie with a value to store the state of a table
-		 *  @param {string} sName name of the cookie to create
-		 *  @param {string} sValue the value the cookie should take
-		 *  @param {int} iSecs duration of the cookie
-		 *  @param {string} sBaseName sName is made up of the base + file name - this is the base
-		 *  @param {function} fnCallback User definable function to modify the cookie
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCreateCookie ( sName, sValue, iSecs, sBaseName, fnCallback )
-		{
-			var date = new Date();
-			date.setTime( date.getTime()+(iSecs*1000) );
-			
-			/* 
-			 * Shocking but true - it would appear IE has major issues with having the path not having
-			 * a trailing slash on it. We need the cookie to be available based on the path, so we
-			 * have to append the file name to the cookie name. Appalling. Thanks to vex for adding the
-			 * patch to use at least some of the path
-			 */
-			var aParts = window.location.pathname.split('/');
-			var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase();
-			var sFullCookie, oData;
-			
-			if ( fnCallback !== null )
-			{
-				oData = (typeof $.parseJSON === 'function') ? 
-					$.parseJSON( sValue ) : eval( '('+sValue+')' );
-				sFullCookie = fnCallback( sNameFile, oData, date.toGMTString(),
-					aParts.join('/')+"/" );
-			}
-			else
-			{
-				sFullCookie = sNameFile + "=" + encodeURIComponent(sValue) +
-					"; expires=" + date.toGMTString() +"; path=" + aParts.join('/')+"/";
-			}
-			
-			/* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies
-			 * belonging to DataTables. This is FAR from bullet proof
-			 */
-			var sOldName="", iOldTime=9999999999999;
-			var iLength = _fnReadCookie( sNameFile )!==null ? document.cookie.length : 
-				sFullCookie.length + document.cookie.length;
-			
-			if ( iLength+10 > 4096 ) /* Magic 10 for padding */
-			{
-				var aCookies =document.cookie.split(';');
-				for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ )
-				{
-					if ( aCookies[i].indexOf( sBaseName ) != -1 )
-					{
-						/* It's a DataTables cookie, so eval it and check the time stamp */
-						var aSplitCookie = aCookies[i].split('=');
-						try { oData = eval( '('+decodeURIComponent(aSplitCookie[1])+')' ); }
-						catch( e ) { continue; }
-						
-						if ( oData.iCreate && oData.iCreate < iOldTime )
-						{
-							sOldName = aSplitCookie[0];
-							iOldTime = oData.iCreate;
-						}
-					}
-				}
-				
-				if ( sOldName !== "" )
-				{
-					document.cookie = sOldName+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+
-						aParts.join('/') + "/";
-				}
-			}
-			
-			document.cookie = sFullCookie;
-		}
-		
-		
-		/**
-		 * Read an old cookie to get a cookie with an old table state
-		 *  @param {string} sName name of the cookie to read
-		 *  @returns {string} contents of the cookie - or null if no cookie with that name found
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnReadCookie ( sName )
-		{
-			var
-				aParts = window.location.pathname.split('/'),
-				sNameEQ = sName + '_' + aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase() + '=',
-			 	sCookieContents = document.cookie.split(';');
-			
-			for( var i=0 ; i<sCookieContents.length ; i++ )
-			{
-				var c = sCookieContents[i];
-				
-				while (c.charAt(0)==' ')
-				{
-					c = c.substring(1,c.length);
-				}
-				
-				if (c.indexOf(sNameEQ) === 0)
-				{
-					return decodeURIComponent( c.substring(sNameEQ.length,c.length) );
-				}
-			}
-			return null;
-		}
-		
-		
-		
-		/**
-		 * Return the settings object for a particular table
-		 *  @param {node} nTable table we are using as a dataTable
-		 *  @returns {object} Settings object - or null if not found
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnSettingsFromNode ( nTable )
-		{
-			for ( var i=0 ; i<DataTable.settings.length ; i++ )
-			{
-				if ( DataTable.settings[i].nTable === nTable )
-				{
-					return DataTable.settings[i];
-				}
-			}
-			
-			return null;
-		}
-		
-		
-		/**
-		 * Return an array with the TR nodes for the table
-		 *  @param {object} oSettings dataTables settings object
-		 *  @returns {array} TR array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetTrNodes ( oSettings )
-		{
-			var aNodes = [];
-			var aoData = oSettings.aoData;
-			for ( var i=0, iLen=aoData.length ; i<iLen ; i++ )
-			{
-				if ( aoData[i].nTr !== null )
-				{
-					aNodes.push( aoData[i].nTr );
-				}
-			}
-			return aNodes;
-		}
-		
-		
-		/**
-		 * Return an flat array with all TD nodes for the table, or row
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} [iIndividualRow] aoData index to get the nodes for - optional 
-		 *    if not given then the return array will contain all nodes for the table
-		 *  @returns {array} TD array
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnGetTdNodes ( oSettings, iIndividualRow )
-		{
-			var anReturn = [];
-			var iCorrector;
-			var anTds;
-			var iRow, iRows=oSettings.aoData.length,
-				iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows;
-			
-			/* Allow the collection to be limited to just one row */
-			if ( iIndividualRow !== undefined )
-			{
-				iStart = iIndividualRow;
-				iEnd = iIndividualRow+1;
-			}
-		
-			for ( iRow=iStart ; iRow<iEnd ; iRow++ )
-			{
-				oData = oSettings.aoData[iRow];
-				if ( oData.nTr !== null )
-				{
-					/* get the TD child nodes - taking into account text etc nodes */
-					anTds = [];
-					for ( iColumn=0, iColumns=oData.nTr.childNodes.length ; iColumn<iColumns ; iColumn++ )
-					{
-						sNodeName = oData.nTr.childNodes[iColumn].nodeName.toLowerCase();
-						if ( sNodeName == 'td' || sNodeName == 'th' )
-						{
-							anTds.push( oData.nTr.childNodes[iColumn] );
-						}
-					}
-		
-					iCorrector = 0;
-					for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ )
-					{
-						if ( oSettings.aoColumns[iColumn].bVisible )
-						{
-							anReturn.push( anTds[iColumn-iCorrector] );
-						}
-						else
-						{
-							anReturn.push( oData._anHidden[iColumn] );
-							iCorrector++;
-						}
-					}
-				}
-			}
-		
-			return anReturn;
-		}
-		
-		
-		/**
-		 * Log an error message
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {int} iLevel log error messages, or display them to the user
-		 *  @param {string} sMesg error message
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnLog( oSettings, iLevel, sMesg )
-		{
-			var sAlert = (oSettings===null) ?
-				"DataTables warning: "+sMesg :
-				"DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg;
-			
-			if ( iLevel === 0 )
-			{
-				if ( DataTable.ext.sErrMode == 'alert' )
-				{
-					alert( sAlert );
-				}
-				else
-				{
-					throw new Error(sAlert);
-				}
-				return;
-			}
-			else if ( window.console && console.log )
-			{
-				console.log( sAlert );
-			}
-		}
-		
-		
-		/**
-		 * See if a property is defined on one object, if so assign it to the other object
-		 *  @param {object} oRet target object
-		 *  @param {object} oSrc source object
-		 *  @param {string} sName property
-		 *  @param {string} [sMappedName] name to map too - optional, sName used if not given
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnMap( oRet, oSrc, sName, sMappedName )
-		{
-			if ( sMappedName === undefined )
-			{
-				sMappedName = sName;
-			}
-			if ( oSrc[sName] !== undefined )
-			{
-				oRet[sMappedName] = oSrc[sName];
-			}
-		}
-		
-		
-		/**
-		 * Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow
-		 * copy arrays. The reason we need to do this, is that we don't want to deep copy array
-		 * init values (such as aaSorting) since the dev wouldn't be able to override them, but
-		 * we do want to deep copy arrays.
-		 *  @param {object} oOut Object to extend
-		 *  @param {object} oExtender Object from which the properties will be applied to oOut
-		 *  @returns {object} oOut Reference, just for convenience - oOut === the return.
-		 *  @memberof DataTable#oApi
-		 *  @todo This doesn't take account of arrays inside the deep copied objects.
-		 */
-		function _fnExtend( oOut, oExtender )
-		{
-			for ( var prop in oExtender )
-			{
-				if ( oExtender.hasOwnProperty(prop) )
-				{
-					if ( typeof oInit[prop] === 'object' && $.isArray(oExtender[prop]) === false )
-					{
-						$.extend( true, oOut[prop], oExtender[prop] );
-					}
-					else
-					{
-						oOut[prop] = oExtender[prop];
-					}
-				}
-			}
-		
-			return oOut;
-		}
-		
-		
-		/**
-		 * Bind an event handers to allow a click or return key to activate the callback.
-		 * This is good for accessability since a return on the keyboard will have the
-		 * same effect as a click, if the element has focus.
-		 *  @param {element} n Element to bind the action to
-		 *  @param {object} oData Data object to pass to the triggered function
-		 *  @param {function} fn Callback function for when the event is triggered
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnBindAction( n, oData, fn )
-		{
-			$(n)
-				.bind( 'click.DT', oData, function (e) {
-						n.blur(); // Remove focus outline for mouse users
-						fn(e);
-					} )
-				.bind( 'keypress.DT', oData, function (e){
-					if ( e.which === 13 ) {
-						fn(e);
-					} } )
-				.bind( 'selectstart.DT', function () {
-					/* Take the brutal approach to cancelling text selection */
-					return false;
-					} );
-		}
-		
-		
-		/**
-		 * Register a callback function. Easily allows a callback function to be added to
-		 * an array store of callback functions that can then all be called together.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sStore Name of the array storeage for the callbacks in oSettings
-		 *  @param {function} fn Function to be called back
-		 *  @param {string} sName Identifying name for the callback (i.e. a label)
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCallbackReg( oSettings, sStore, fn, sName )
-		{
-			if ( fn )
-			{
-				oSettings[sStore].push( {
-					"fn": fn,
-					"sName": sName
-				} );
-			}
-		}
-		
-		
-		/**
-		 * Fire callback functions and trigger events. Note that the loop over the callback
-		 * array store is done backwards! Further note that you do not want to fire off triggers
-		 * in time sensitive applications (for example cell creation) as its slow.
-		 *  @param {object} oSettings dataTables settings object
-		 *  @param {string} sStore Name of the array storeage for the callbacks in oSettings
-		 *  @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger
-		 *    is fired
-		 *  @param {array} aArgs Array of arguments to pass to the callback function / trigger
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs )
-		{
-			var aoStore = oSettings[sStore];
-			var aRet =[];
-		
-			for ( var i=aoStore.length-1 ; i>=0 ; i-- )
-			{
-				aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) );
-			}
-		
-			if ( sTrigger !== null )
-			{
-				$(oSettings.oInstance).trigger(sTrigger, aArgs);
-			}
-		
-			return aRet;
-		}
-		
-		
-		/**
-		 * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other
-		 * library, then we use that as it is fast, safe and accurate. If the function isn't 
-		 * available then we need to built it ourselves - the insperation for this function comes
-		 * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is
-		 * not perfect and absolutely should not be used as a replacement to json2.js - but it does
-		 * do what we need, without requiring a dependency for DataTables.
-		 *  @param {object} o JSON object to be converted
-		 *  @returns {string} JSON string
-		 *  @memberof DataTable#oApi
-		 */
-		var _fnJsonString = (window.JSON) ? JSON.stringify : function( o )
-		{
-			/* Not an object or array */
-			var sType = typeof o;
-			if (sType !== "object" || o === null)
-			{
-				// simple data type
-				if (sType === "string")
-				{
-					o = '"'+o+'"';
-				}
-				return o+"";
-			}
-		
-			/* If object or array, need to recurse over it */
-			var
-				sProp, mValue,
-				json = [],
-				bArr = $.isArray(o);
-			
-			for (sProp in o)
-			{
-				mValue = o[sProp];
-				sType = typeof mValue;
-		
-				if (sType === "string")
-				{
-					mValue = '"'+mValue+'"';
-				}
-				else if (sType === "object" && mValue !== null)
-				{
-					mValue = _fnJsonString(mValue);
-				}
-		
-				json.push((bArr ? "" : '"'+sProp+'":') + mValue);
-			}
-		
-			return (bArr ? "[" : "{") + json + (bArr ? "]" : "}");
-		};
-		
-
-		
-		
-		/**
-		 * Perform a jQuery selector action on the table's TR elements (from the tbody) and
-		 * return the resulting jQuery object.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
-		 *    criterion ("applied") or all TR elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be 
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {object} jQuery object, filtered by the given selector.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Highlight every second row
-		 *      oTable.$('tr:odd').css('backgroundColor', 'blue');
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to rows with 'Webkit' in them, add a background colour and then
-		 *      // remove the filter, thus highlighting the 'Webkit' rows only.
-		 *      oTable.fnFilter('Webkit');
-		 *      oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue');
-		 *      oTable.fnFilter('');
-		 *    } );
-		 */
-		this.$ = function ( sSelector, oOpts )
-		{
-			var i, iLen, a = [], tr;
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var aoData = oSettings.aoData;
-			var aiDisplay = oSettings.aiDisplay;
-			var aiDisplayMaster = oSettings.aiDisplayMaster;
-		
-			if ( !oOpts )
-			{
-				oOpts = {};
-			}
-		
-			oOpts = $.extend( {}, {
-				"filter": "none", // applied
-				"order": "current", // "original"
-				"page": "all" // current
-			}, oOpts );
-		
-			// Current page implies that order=current and fitler=applied, since it is fairly
-			// senseless otherwise
-			if ( oOpts.page == 'current' )
-			{
-				for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ )
-				{
-					tr = aoData[ aiDisplay[i] ].nTr;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "current" && oOpts.filter == "none" )
-			{
-				for ( i=0, iLen=aiDisplayMaster.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ aiDisplayMaster[i] ].nTr;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "current" && oOpts.filter == "applied" )
-			{
-				for ( i=0, iLen=aiDisplay.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ aiDisplay[i] ].nTr;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "original" && oOpts.filter == "none" )
-			{
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ i ].nTr ;
-					if ( tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else if ( oOpts.order == "original" && oOpts.filter == "applied" )
-			{
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					tr = aoData[ i ].nTr;
-					if ( $.inArray( i, aiDisplay ) !== -1 && tr )
-					{
-						a.push( tr );
-					}
-				}
-			}
-			else
-			{
-				_fnLog( oSettings, 1, "Unknown selection options" );
-			}
-		
-			/* We need to filter on the TR elements and also 'find' in their descendants
-			 * to make the selector act like it would in a full table - so we need
-			 * to build both results and then combine them together
-			 */
-			var jqA = $(a);
-			var jqTRs = jqA.filter( sSelector );
-			var jqDescendants = jqA.find( sSelector );
-		
-			return $( [].concat($.makeArray(jqTRs), $.makeArray(jqDescendants)) );
-		};
-		
-		
-		/**
-		 * Almost identical to $ in operation, but in this case returns the data for the matched
-		 * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
-		 * rather than any decendents, so the data can be obtained for the row/cell. If matching
-		 * rows are found, the data returned is the original data array/object that was used to  
-		 * create the row (or a generated array if from a DOM source).
-		 *
-		 * This method is often useful incombination with $ where both functions are given the
-		 * same parameters and the array indexes will match identically.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select elements that meet the current filter
-		 *    criterion ("applied") or all elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the data in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be 
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {array} Data for the matched elements. If any elements, as a result of the
-		 *    selector, were not TR, TD or TH elements in the DataTable, they will have a null 
-		 *    entry in the array.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Get the data from the first row in the table
-		 *      var data = oTable._('tr:first');
-		 *
-		 *      // Do something useful with the data
-		 *      alert( "First cell is: "+data[0] );
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to 'Webkit' and get all data for 
-		 *      oTable.fnFilter('Webkit');
-		 *      var data = oTable._('tr', {"filter": "applied"});
-		 *      
-		 *      // Do something with the data
-		 *      alert( data.length+" rows matched the filter" );
-		 *    } );
-		 */
-		this._ = function ( sSelector, oOpts )
-		{
-			var aOut = [];
-			var i, iLen, iIndex;
-			var aTrs = this.$( sSelector, oOpts );
-		
-			for ( i=0, iLen=aTrs.length ; i<iLen ; i++ )
-			{
-				aOut.push( this.fnGetData(aTrs[i]) );
-			}
-		
-			return aOut;
-		};
-		
-		
-		/**
-		 * Add a single new row or multiple rows of data to the table. Please note
-		 * that this is suitable for client-side processing only - if you are using 
-		 * server-side processing (i.e. "bServerSide": true), then to add data, you
-		 * must add it to the data source, i.e. the server-side, through an Ajax call.
-		 *  @param {array|object} mData The data to be added to the table. This can be:
-		 *    <ul>
-		 *      <li>1D array of data - add a single row with the data provided</li>
-		 *      <li>2D array of arrays - add multiple rows in a single call</li>
-		 *      <li>object - data object when using <i>mDataProp</i></li>
-		 *      <li>array of objects - multiple data objects when using <i>mDataProp</i></li>
-		 *    </ul>
-		 *  @param {bool} [bRedraw=true] redraw the table or not
-		 *  @returns {array} An array of integers, representing the list of indexes in 
-		 *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to 
-		 *    the table.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    // Global var for counter
-		 *    var giCount = 2;
-		 *    
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable();
-		 *    } );
-		 *    
-		 *    function fnClickAddRow() {
-		 *      $('#example').dataTable().fnAddData( [
-		 *        giCount+".1",
-		 *        giCount+".2",
-		 *        giCount+".3",
-		 *        giCount+".4" ]
-		 *      );
-		 *        
-		 *      giCount++;
-		 *    }
-		 */
-		this.fnAddData = function( mData, bRedraw )
-		{
-			if ( mData.length === 0 )
-			{
-				return [];
-			}
-			
-			var aiReturn = [];
-			var iTest;
-			
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			/* Check if we want to add multiple rows or not */
-			if ( typeof mData[0] === "object" && mData[0] !== null )
-			{
-				for ( var i=0 ; i<mData.length ; i++ )
-				{
-					iTest = _fnAddData( oSettings, mData[i] );
-					if ( iTest == -1 )
-					{
-						return aiReturn;
-					}
-					aiReturn.push( iTest );
-				}
-			}
-			else
-			{
-				iTest = _fnAddData( oSettings, mData );
-				if ( iTest == -1 )
-				{
-					return aiReturn;
-				}
-				aiReturn.push( iTest );
-			}
-			
-			oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnReDraw( oSettings );
-			}
-			return aiReturn;
-		};
-		
-		
-		/**
-		 * This function will make DataTables recalculate the column sizes, based on the data 
-		 * contained in the table and the sizes applied to the columns (in the DOM, CSS or 
-		 * through the sWidth parameter). This can be useful when the width of the table's 
-		 * parent element changes (for example a window resize).
-		 *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *      
-		 *      $(window).bind('resize', function () {
-		 *        oTable.fnAdjustColumnSizing();
-		 *      } );
-		 *    } );
-		 */
-		this.fnAdjustColumnSizing = function ( bRedraw )
-		{
-			var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]);
-			_fnAdjustColumnSizing( oSettings );
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				this.fnDraw( false );
-			}
-			else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
-			{
-				/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
-				this.oApi._fnScrollDraw(oSettings);
-			}
-		};
-		
-		
-		/**
-		 * Quickly and simply clear a table
-		 *  @param {bool} [bRedraw=true] redraw the table or not
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
-		 *      oTable.fnClearTable();
-		 *    } );
-		 */
-		this.fnClearTable = function( bRedraw )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			_fnClearTable( oSettings );
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnDraw( oSettings );
-			}
-		};
-		
-		
-		/**
-		 * The exact opposite of 'opening' a row, this function will close any rows which 
-		 * are currently 'open'.
-		 *  @param {node} nTr the table row to 'close'
-		 *  @returns {int} 0 on success, or 1 if failed (can't find the row)
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *      
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *      
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnClose = function( nTr )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
-			{
-				if ( oSettings.aoOpenRows[i].nParent == nTr )
-				{
-					var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode;
-					if ( nTrParent )
-					{
-						/* Remove it if it is currently on display */
-						nTrParent.removeChild( oSettings.aoOpenRows[i].nTr );
-					}
-					oSettings.aoOpenRows.splice( i, 1 );
-					return 0;
-				}
-			}
-			return 1;
-		};
-		
-		
-		/**
-		 * Remove a row for the table
-		 *  @param {mixed} mTarget The index of the row from aoData to be deleted, or
-		 *    the TR element you want to delete
-		 *  @param {function|null} [fnCallBack] Callback function
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @returns {array} The row that was deleted
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Immediately remove the first row
-		 *      oTable.fnDeleteRow( 0 );
-		 *    } );
-		 */
-		this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var i, iLen, iAODataIndex;
-			
-			iAODataIndex = (typeof mTarget === 'object') ? 
-				_fnNodeToDataIndex(oSettings, mTarget) : mTarget;
-			
-			/* Return the data array from this row */
-			var oData = oSettings.aoData.splice( iAODataIndex, 1 );
-		
-			/* Update the _DT_RowIndex parameter */
-			for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoData[i].nTr !== null )
-				{
-					oSettings.aoData[i].nTr._DT_RowIndex = i;
-				}
-			}
-			
-			/* Remove the target row from the search array */
-			var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay );
-			oSettings.asDataSearch.splice( iDisplayIndex, 1 );
-			
-			/* Delete from the display arrays */
-			_fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex );
-			_fnDeleteIndex( oSettings.aiDisplay, iAODataIndex );
-			
-			/* If there is a user callback function - call it */
-			if ( typeof fnCallBack === "function" )
-			{
-				fnCallBack.call( this, oSettings, oData );
-			}
-			
-			/* Check for an 'overflow' they case for displaying the table */
-			if ( oSettings._iDisplayStart >= oSettings.fnRecordsDisplay() )
-			{
-				oSettings._iDisplayStart -= oSettings._iDisplayLength;
-				if ( oSettings._iDisplayStart < 0 )
-				{
-					oSettings._iDisplayStart = 0;
-				}
-			}
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-			
-			return oData;
-		};
-		
-		
-		/**
-		 * Restore the table to it's original state in the DOM by removing all of DataTables 
-		 * enhancements, alterations to the DOM structure of the table and event listeners.
-		 *  @param {boolean} [bRemove=false] Completely remove the table from the DOM
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      // This example is fairly pointless in reality, but shows how fnDestroy can be used
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnDestroy();
-		 *    } );
-		 */
-		this.fnDestroy = function ( bRemove )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var nOrig = oSettings.nTableWrapper.parentNode;
-			var nBody = oSettings.nTBody;
-			var i, iLen;
-		
-			bRemove = (bRemove===undefined) ? false : true;
-			
-			/* Flag to note that the table is currently being destroyed - no action should be taken */
-			oSettings.bDestroying = true;
-			
-			/* Fire off the destroy callbacks for plug-ins etc */
-			_fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] );
-			
-			/* Restore hidden columns */
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoColumns[i].bVisible === false )
-				{
-					this.fnSetColumnVis( i, true );
-				}
-			}
-			
-			/* Blitz all DT events */
-			$(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT');
-			
-			/* If there is an 'empty' indicator row, remove it */
-			$('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove();
-			
-			/* When scrolling we had to break the table up - restore it */
-			if ( oSettings.nTable != oSettings.nTHead.parentNode )
-			{
-				$(oSettings.nTable).children('thead').remove();
-				oSettings.nTable.appendChild( oSettings.nTHead );
-			}
-			
-			if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode )
-			{
-				$(oSettings.nTable).children('tfoot').remove();
-				oSettings.nTable.appendChild( oSettings.nTFoot );
-			}
-			
-			/* Remove the DataTables generated nodes, events and classes */
-			oSettings.nTable.parentNode.removeChild( oSettings.nTable );
-			$(oSettings.nTableWrapper).remove();
-			
-			oSettings.aaSorting = [];
-			oSettings.aaSortingFixed = [];
-			_fnSortingClasses( oSettings );
-			
-			$(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') );
-			
-			$('th, td', oSettings.nTHead).removeClass( [
-				oSettings.oClasses.sSortable,
-				oSettings.oClasses.sSortableAsc,
-				oSettings.oClasses.sSortableDesc,
-				oSettings.oClasses.sSortableNone ].join(' ')
-			);
-			if ( oSettings.bJUI )
-			{
-				$('th span.'+oSettings.oClasses.sSortIcon
-					+ ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove();
-		
-				$('th, td', oSettings.nTHead).each( function () {
-					var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this);
-					var kids = jqWrapper.contents();
-					$(this).append( kids );
-					jqWrapper.remove();
-				} );
-			}
-			
-			/* Add the TR elements back into the table in their original order */
-			if ( !bRemove && oSettings.nTableReinsertBefore )
-			{
-				nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore );
-			}
-			else if ( !bRemove )
-			{
-				nOrig.appendChild( oSettings.nTable );
-			}
-		
-			for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aoData[i].nTr !== null )
-				{
-					nBody.appendChild( oSettings.aoData[i].nTr );
-				}
-			}
-			
-			/* Restore the width of the original table */
-			if ( oSettings.oFeatures.bAutoWidth === true )
-			{
-			  oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth);
-			}
-			
-			/* If the were originally odd/even type classes - then we add them back here. Note
-			 * this is not fool proof (for example if not all rows as odd/even classes - but 
-			 * it's a good effort without getting carried away
-			 */
-			$(nBody).children('tr:even').addClass( oSettings.asDestroyStripes[0] );
-			$(nBody).children('tr:odd').addClass( oSettings.asDestroyStripes[1] );
-			
-			/* Remove the settings object from the settings array */
-			for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
-			{
-				if ( DataTable.settings[i] == oSettings )
-				{
-					DataTable.settings.splice( i, 1 );
-				}
-			}
-			
-			/* End it all */
-			oSettings = null;
-		};
-		
-		
-		/**
-		 * Redraw the table
-		 *  @param {bool} [bComplete=true] Re-filter and resort (if enabled) the table before the draw.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
-		 *      oTable.fnDraw();
-		 *    } );
-		 */
-		this.fnDraw = function( bComplete )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			if ( bComplete === false )
-			{
-				_fnCalculateEnd( oSettings );
-				_fnDraw( oSettings );
-			}
-			else
-			{
-				_fnReDraw( oSettings );
-			}
-		};
-		
-		
-		/**
-		 * Filter the input based on data
-		 *  @param {string} sInput String to filter the table on
-		 *  @param {int|null} [iColumn] Column to limit filtering to
-		 *  @param {bool} [bRegex=false] Treat as regular expression or not
-		 *  @param {bool} [bSmart=true] Perform smart filtering or not
-		 *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
-		 *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Sometime later - filter...
-		 *      oTable.fnFilter( 'test string' );
-		 *    } );
-		 */
-		this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			if ( !oSettings.oFeatures.bFilter )
-			{
-				return;
-			}
-			
-			if ( bRegex === undefined || bRegex === null )
-			{
-				bRegex = false;
-			}
-			
-			if ( bSmart === undefined || bSmart === null )
-			{
-				bSmart = true;
-			}
-			
-			if ( bShowGlobal === undefined || bShowGlobal === null )
-			{
-				bShowGlobal = true;
-			}
-			
-			if ( bCaseInsensitive === undefined || bCaseInsensitive === null )
-			{
-				bCaseInsensitive = true;
-			}
-			
-			if ( iColumn === undefined || iColumn === null )
-			{
-				/* Global filter */
-				_fnFilterComplete( oSettings, {
-					"sSearch":sInput+"",
-					"bRegex": bRegex,
-					"bSmart": bSmart,
-					"bCaseInsensitive": bCaseInsensitive
-				}, 1 );
-				
-				if ( bShowGlobal && oSettings.aanFeatures.f )
-				{
-					var n = oSettings.aanFeatures.f;
-					for ( var i=0, iLen=n.length ; i<iLen ; i++ )
-					{
-						$(n[i]._DT_Input).val( sInput );
-					}
-				}
-			}
-			else
-			{
-				/* Single column filter */
-				$.extend( oSettings.aoPreSearchCols[ iColumn ], {
-					"sSearch": sInput+"",
-					"bRegex": bRegex,
-					"bSmart": bSmart,
-					"bCaseInsensitive": bCaseInsensitive
-				} );
-				_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
-			}
-		};
-		
-		
-		/**
-		 * Get the data for the whole table, an individual row or an individual cell based on the 
-		 * provided parameters.
-		 *  @param {int|node} [mRow] A TR row node, TD/TH cell node or an integer. If given as
-		 *    a TR node then the data source for the whole row will be returned. If given as a
-		 *    TD/TH cell node then iCol will be automatically calculated and the data for the
-		 *    cell returned. If given as an integer, then this is treated as the aoData internal
-		 *    data index for the row (see fnGetPosition) and the data for that row used.
-		 *  @param {int} [iCol] Optional column index that you want the data of.
-		 *  @returns {array|object|string} If mRow is undefined, then the data for all rows is
-		 *    returned. If mRow is defined, just data for that row, and is iCol is
-		 *    defined, only data for the designated cell is returned.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    // Row data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('tr').click( function () {
-		 *        var data = oTable.fnGetData( this );
-		 *        // ... do something with the array / object of data for the row
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Individual cell data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('td').click( function () {
-		 *        var sData = oTable.fnGetData( this );
-		 *        alert( 'The cell clicked on had the value of '+sData );
-		 *      } );
-		 *    } );
-		 */
-		this.fnGetData = function( mRow, iCol )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			if ( mRow !== undefined )
-			{
-				var iRow = mRow;
-				if ( typeof mRow === 'object' )
-				{
-					var sNode = mRow.nodeName.toLowerCase();
-					if (sNode === "tr" )
-					{
-						iRow = _fnNodeToDataIndex(oSettings, mRow);
-					}
-					else if ( sNode === "td" )
-					{
-						iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode);
-						iCol = _fnNodeToColumnIndex( oSettings, iRow, mRow );
-					}
-				}
-		
-				if ( iCol !== undefined )
-				{
-					return _fnGetCellData( oSettings, iRow, iCol, '' );
-				}
-				return (oSettings.aoData[iRow]!==undefined) ?
-					oSettings.aoData[iRow]._aData : null;
-			}
-			return _fnGetDataMaster( oSettings );
-		};
-		
-		
-		/**
-		 * Get an array of the TR nodes that are used in the table's body. Note that you will 
-		 * typically want to use the '$' API method in preference to this as it is more 
-		 * flexible.
-		 *  @param {int} [iRow] Optional row index for the TR element you want
-		 *  @returns {array|node} If iRow is undefined, returns an array of all TR elements
-		 *    in the table's body, or iRow is defined, just the TR element requested.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Get the nodes from the table
-		 *      var nNodes = oTable.fnGetNodes( );
-		 *    } );
-		 */
-		this.fnGetNodes = function( iRow )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			
-			if ( iRow !== undefined ) {
-				return (oSettings.aoData[iRow]!==undefined) ?
-					oSettings.aoData[iRow].nTr : null;
-			}
-			return _fnGetTrNodes( oSettings );
-		};
-		
-		
-		/**
-		 * Get the array indexes of a particular cell from it's DOM element
-		 * and column index including hidden columns
-		 *  @param {node} nNode this can either be a TR, TD or TH in the table's body
-		 *  @returns {int} If nNode is given as a TR, then a single index is returned, or
-		 *    if given as a cell, an array of [row index, column index (visible)] is given.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example tbody td').click( function () {
-		 *        // Get the position of the current data from the node
-		 *        var aPos = oTable.fnGetPosition( this );
-		 *        
-		 *        // Get the data array for this row
-		 *        var aData = oTable.fnGetData( aPos[0] );
-		 *        
-		 *        // Update the data array and return the value
-		 *        aData[ aPos[1] ] = 'clicked';
-		 *        this.innerHTML = 'clicked';
-		 *      } );
-		 *      
-		 *      // Init DataTables
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnGetPosition = function( nNode )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var sNodeName = nNode.nodeName.toUpperCase();
-			
-			if ( sNodeName == "TR" )
-			{
-				return _fnNodeToDataIndex(oSettings, nNode);
-			}
-			else if ( sNodeName == "TD" || sNodeName == "TH" )
-			{
-				var iDataIndex = _fnNodeToDataIndex( oSettings, nNode.parentNode );
-				var iColumnIndex = _fnNodeToColumnIndex( oSettings, iDataIndex, nNode );
-				return [ iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex ), iColumnIndex ];
-			}
-			return null;
-		};
-		
-		
-		/**
-		 * Check to see if a row is 'open' or not.
-		 *  @param {node} nTr the table row to check
-		 *  @returns {boolean} true if the row is currently open, false otherwise
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *      
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *      
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnIsOpen = function( nTr )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var aoOpenRows = oSettings.aoOpenRows;
-			
-			for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
-			{
-				if ( oSettings.aoOpenRows[i].nParent == nTr )
-				{
-					return true;
-				}
-			}
-			return false;
-		};
-		
-		
-		/**
-		 * This function will place a new row directly after a row which is currently 
-		 * on display on the page, with the HTML contents that is passed into the 
-		 * function. This can be used, for example, to ask for confirmation that a 
-		 * particular record should be deleted.
-		 *  @param {node} nTr The table row to 'open'
-		 *  @param {string|node|jQuery} mHtml The HTML to put into the row
-		 *  @param {string} sClass Class to give the new TD cell
-		 *  @returns {node} The row opened. Note that if the table row passed in as the
-		 *    first parameter, is not found in the table, this method will silently
-		 *    return.
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *      
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *      
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnOpen = function( nTr, mHtml, sClass )
-		{
-			/* Find settings from table node */
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-		
-			/* Check that the row given is in the table */
-			var nTableRows = _fnGetTrNodes( oSettings );
-			if ( $.inArray(nTr, nTableRows) === -1 )
-			{
-				return;
-			}
-			
-			/* the old open one if there is one */
-			this.fnClose( nTr );
-			
-			var nNewRow = document.createElement("tr");
-			var nNewCell = document.createElement("td");
-			nNewRow.appendChild( nNewCell );
-			nNewCell.className = sClass;
-			nNewCell.colSpan = _fnVisbleColumns( oSettings );
-		
-			if (typeof mHtml === "string")
-			{
-				nNewCell.innerHTML = mHtml;
-			}
-			else
-			{
-				$(nNewCell).html( mHtml );
-			}
-		
-			/* If the nTr isn't on the page at the moment - then we don't insert at the moment */
-			var nTrs = $('tr', oSettings.nTBody);
-			if ( $.inArray(nTr, nTrs) != -1  )
-			{
-				$(nNewRow).insertAfter(nTr);
-			}
-			
-			oSettings.aoOpenRows.push( {
-				"nTr": nNewRow,
-				"nParent": nTr
-			} );
-			
-			return nNewRow;
-		};
-		
-		
-		/**
-		 * Change the pagination - provides the internal logic for pagination in a simple API 
-		 * function. With this function you can have a DataTables table go to the next, 
-		 * previous, first or last pages.
-		 *  @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
-		 *    or page number to jump to (integer), note that page 0 is the first page.
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnPageChange( 'next' );
-		 *    } );
-		 */
-		this.fnPageChange = function ( mAction, bRedraw )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			_fnPageChange( oSettings, mAction );
-			_fnCalculateEnd( oSettings );
-			
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnDraw( oSettings );
-			}
-		};
-		
-		
-		/**
-		 * Show a particular column
-		 *  @param {int} iCol The column whose display should be changed
-		 *  @param {bool} bShow Show (true) or hide (false) the column
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Hide the second column after initialisation
-		 *      oTable.fnSetColumnVis( 1, false );
-		 *    } );
-		 */
-		this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var i, iLen;
-			var aoColumns = oSettings.aoColumns;
-			var aoData = oSettings.aoData;
-			var nTd, bAppend, iBefore;
-			
-			/* No point in doing anything if we are requesting what is already true */
-			if ( aoColumns[iCol].bVisible == bShow )
-			{
-				return;
-			}
-			
-			/* Show the column */
-			if ( bShow )
-			{
-				var iInsert = 0;
-				for ( i=0 ; i<iCol ; i++ )
-				{
-					if ( aoColumns[i].bVisible )
-					{
-						iInsert++;
-					}
-				}
-				
-				/* Need to decide if we should use appendChild or insertBefore */
-				bAppend = (iInsert >= _fnVisbleColumns( oSettings ));
-		
-				/* Which coloumn should we be inserting before? */
-				if ( !bAppend )
-				{
-					for ( i=iCol ; i<aoColumns.length ; i++ )
-					{
-						if ( aoColumns[i].bVisible )
-						{
-							iBefore = i;
-							break;
-						}
-					}
-				}
-		
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					if ( aoData[i].nTr !== null )
-					{
-						if ( bAppend )
-						{
-							aoData[i].nTr.appendChild( 
-								aoData[i]._anHidden[iCol]
-							);
-						}
-						else
-						{
-							aoData[i].nTr.insertBefore(
-								aoData[i]._anHidden[iCol], 
-								_fnGetTdNodes( oSettings, i )[iBefore] );
-						}
-					}
-				}
-			}
-			else
-			{
-				/* Remove a column from display */
-				for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
-				{
-					if ( aoData[i].nTr !== null )
-					{
-						nTd = _fnGetTdNodes( oSettings, i )[iCol];
-						aoData[i]._anHidden[iCol] = nTd;
-						nTd.parentNode.removeChild( nTd );
-					}
-				}
-			}
-		
-			/* Clear to set the visible flag */
-			aoColumns[iCol].bVisible = bShow;
-		
-			/* Redraw the header and footer based on the new column visibility */
-			_fnDrawHead( oSettings, oSettings.aoHeader );
-			if ( oSettings.nTFoot )
-			{
-				_fnDrawHead( oSettings, oSettings.aoFooter );
-			}
-			
-			/* If there are any 'open' rows, then we need to alter the colspan for this col change */
-			for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ )
-			{
-				oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings );
-			}
-			
-			/* Do a redraw incase anything depending on the table columns needs it 
-			 * (built-in: scrolling) 
-			 */
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnAdjustColumnSizing( oSettings );
-				_fnDraw( oSettings );
-			}
-			
-			_fnSaveState( oSettings );
-		};
-		
-		
-		/**
-		 * Get the settings for a particular table for external manipulation
-		 *  @returns {object} DataTables settings object. See 
-		 *    {@link DataTable.models.oSettings}
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      var oSettings = oTable.fnSettings();
-		 *      
-		 *      // Show an example parameter from the settings
-		 *      alert( oSettings._iDisplayStart );
-		 *    } );
-		 */
-		this.fnSettings = function()
-		{
-			return _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-		};
-		
-		
-		/**
-		 * Sort the table by a particular column
-		 *  @param {int} iCol the data index to sort on. Note that this will not match the 
-		 *    'display index' if you have hidden data entries
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Sort immediately with columns 0 and 1
-		 *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
-		 *    } );
-		 */
-		this.fnSort = function( aaSort )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			oSettings.aaSorting = aaSort;
-			_fnSort( oSettings );
-		};
-		
-		
-		/**
-		 * Attach a sort listener to an element for a given column
-		 *  @param {node} nNode the element to attach the sort listener to
-		 *  @param {int} iColumn the column that a click on this node will sort on
-		 *  @param {function} [fnCallback] callback function when sort is run
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      
-		 *      // Sort on column 1, when 'sorter' is clicked on
-		 *      oTable.fnSortListener( document.getElementById('sorter'), 1 );
-		 *    } );
-		 */
-		this.fnSortListener = function( nNode, iColumn, fnCallback )
-		{
-			_fnSortAttachListener( _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ), nNode, iColumn,
-			 	fnCallback );
-		};
-		
-		
-		/**
-		 * Update a table cell or row - this method will accept either a single value to
-		 * update the cell with, an array of values with one element for each column or
-		 * an object in the same format as the original data source. The function is
-		 * self-referencing in order to make the multi column updates easier.
-		 *  @param {object|array|string} mData Data to update the cell/row with
-		 *  @param {node|int} mRow TR element you want to update or the aoData index
-		 *  @param {int} [iColumn] The column to update (not used of mData is an array or object)
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @param {bool} [bAction=true] Perform predraw actions or not
-		 *  @returns {int} 0 on success, 1 on error
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
-		 *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row
-		 *    } );
-		 */
-		this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
-		{
-			var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-			var i, iLen, sDisplay;
-			var iRow = (typeof mRow === 'object') ? 
-				_fnNodeToDataIndex(oSettings, mRow) : mRow;
-			
-			if ( oSettings.__fnUpdateDeep === undefined && $.isArray(mData) && typeof mData === 'object' )
-			{
-				/* Array update - update the whole row */
-				oSettings.aoData[iRow]._aData = mData.slice();
-				
-				/* Flag to the function that we are recursing */
-				oSettings.__fnUpdateDeep = true;
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
-				}
-				oSettings.__fnUpdateDeep = undefined;
-			}
-			else if ( oSettings.__fnUpdateDeep === undefined && mData !== null && typeof mData === 'object' )
-			{
-				/* Object update - update the whole row - assume the developer gets the object right */
-				oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
-		
-				oSettings.__fnUpdateDeep = true;
-				for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
-				{
-					this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
-				}
-				oSettings.__fnUpdateDeep = undefined;
-			}
-			else
-			{
-				/* Individual cell update */
-				_fnSetCellData( oSettings, iRow, iColumn, mData );
-				sDisplay = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
-				
-				var oCol = oSettings.aoColumns[iColumn];
-				if ( oCol.fnRender !== null )
-				{
-					sDisplay = _fnRender( oSettings, iRow, iColumn );
-					if ( oCol.bUseRendered )
-					{
-						_fnSetCellData( oSettings, iRow, iColumn, sDisplay );
-					}
-				}
-				
-				if ( oSettings.aoData[iRow].nTr !== null )
-				{
-					/* Do the actual HTML update */
-					_fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay;
-				}
-			}
-			
-			/* Modify the search index for this row (strictly this is likely not needed, since fnReDraw
-			 * will rebuild the search array - however, the redraw might be disabled by the user)
-			 */
-			var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay );
-			oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow( oSettings, 
-				_fnGetRowData( oSettings, iRow, 'filter' ) );
-			
-			/* Perform pre-draw actions */
-			if ( bAction === undefined || bAction )
-			{
-				_fnAdjustColumnSizing( oSettings );
-			}
-			
-			/* Redraw the table */
-			if ( bRedraw === undefined || bRedraw )
-			{
-				_fnReDraw( oSettings );
-			}
-			return 0;
-		};
-		
-		
-		/**
-		 * Provide a common method for plug-ins to check the version of DataTables being used, in order
-		 * to ensure compatibility.
-		 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
-		 *    formats "X" and "X.Y" are also acceptable.
-		 *  @returns {boolean} true if this version of DataTables is greater or equal to the required
-		 *    version, or false if this version of DataTales is not suitable
-		 *  @method
-		 *  @dtopt API
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      alert( oTable.fnVersionCheck( '1.9.0' ) );
-		 *    } );
-		 */
-		this.fnVersionCheck = DataTable.ext.fnVersionCheck;
-		
-		
-		/*
-		 * This is really a good bit rubbish this method of exposing the internal methods
-		 * publically... - To be fixed in 2.0 using methods on the prototype
-		 */
-		
-		
-		/**
-		 * Create a wrapper function for exporting an internal functions to an external API.
-		 *  @param {string} sFunc API function name
-		 *  @returns {function} wrapped function
-		 *  @memberof DataTable#oApi
-		 */
-		function _fnExternApiFunc (sFunc)
-		{
-			return function() {
-				var aArgs = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat( 
-					Array.prototype.slice.call(arguments) );
-				return DataTable.ext.oApi[sFunc].apply( this, aArgs );
-			};
-		}
-		
-		
-		/**
-		 * Reference to internal functions for use by plug-in developers. Note that these
-		 * methods are references to internal functions and are considered to be private.
-		 * If you use these methods, be aware that they are liable to change between versions
-		 * (check the upgrade notes).
-		 *  @namespace
-		 */
-		this.oApi = {
-			"_fnExternApiFunc": _fnExternApiFunc,
-			"_fnInitialise": _fnInitialise,
-			"_fnInitComplete": _fnInitComplete,
-			"_fnLanguageCompat": _fnLanguageCompat,
-			"_fnAddColumn": _fnAddColumn,
-			"_fnColumnOptions": _fnColumnOptions,
-			"_fnAddData": _fnAddData,
-			"_fnCreateTr": _fnCreateTr,
-			"_fnGatherData": _fnGatherData,
-			"_fnBuildHead": _fnBuildHead,
-			"_fnDrawHead": _fnDrawHead,
-			"_fnDraw": _fnDraw,
-			"_fnReDraw": _fnReDraw,
-			"_fnAjaxUpdate": _fnAjaxUpdate,
-			"_fnAjaxParameters": _fnAjaxParameters,
-			"_fnAjaxUpdateDraw": _fnAjaxUpdateDraw,
-			"_fnServerParams": _fnServerParams,
-			"_fnAddOptionsHtml": _fnAddOptionsHtml,
-			"_fnFeatureHtmlTable": _fnFeatureHtmlTable,
-			"_fnScrollDraw": _fnScrollDraw,
-			"_fnAdjustColumnSizing": _fnAdjustColumnSizing,
-			"_fnFeatureHtmlFilter": _fnFeatureHtmlFilter,
-			"_fnFilterComplete": _fnFilterComplete,
-			"_fnFilterCustom": _fnFilterCustom,
-			"_fnFilterColumn": _fnFilterColumn,
-			"_fnFilter": _fnFilter,
-			"_fnBuildSearchArray": _fnBuildSearchArray,
-			"_fnBuildSearchRow": _fnBuildSearchRow,
-			"_fnFilterCreateSearch": _fnFilterCreateSearch,
-			"_fnDataToSearch": _fnDataToSearch,
-			"_fnSort": _fnSort,
-			"_fnSortAttachListener": _fnSortAttachListener,
-			"_fnSortingClasses": _fnSortingClasses,
-			"_fnFeatureHtmlPaginate": _fnFeatureHtmlPaginate,
-			"_fnPageChange": _fnPageChange,
-			"_fnFeatureHtmlInfo": _fnFeatureHtmlInfo,
-			"_fnUpdateInfo": _fnUpdateInfo,
-			"_fnFeatureHtmlLength": _fnFeatureHtmlLength,
-			"_fnFeatureHtmlProcessing": _fnFeatureHtmlProcessing,
-			"_fnProcessingDisplay": _fnProcessingDisplay,
-			"_fnVisibleToColumnIndex": _fnVisibleToColumnIndex,
-			"_fnColumnIndexToVisible": _fnColumnIndexToVisible,
-			"_fnNodeToDataIndex": _fnNodeToDataIndex,
-			"_fnVisbleColumns": _fnVisbleColumns,
-			"_fnCalculateEnd": _fnCalculateEnd,
-			"_fnConvertToWidth": _fnConvertToWidth,
-			"_fnCalculateColumnWidths": _fnCalculateColumnWidths,
-			"_fnScrollingWidthAdjust": _fnScrollingWidthAdjust,
-			"_fnGetWidestNode": _fnGetWidestNode,
-			"_fnGetMaxLenString": _fnGetMaxLenString,
-			"_fnStringToCss": _fnStringToCss,
-			"_fnDetectType": _fnDetectType,
-			"_fnSettingsFromNode": _fnSettingsFromNode,
-			"_fnGetDataMaster": _fnGetDataMaster,
-			"_fnGetTrNodes": _fnGetTrNodes,
-			"_fnGetTdNodes": _fnGetTdNodes,
-			"_fnEscapeRegex": _fnEscapeRegex,
-			"_fnDeleteIndex": _fnDeleteIndex,
-			"_fnReOrderIndex": _fnReOrderIndex,
-			"_fnColumnOrdering": _fnColumnOrdering,
-			"_fnLog": _fnLog,
-			"_fnClearTable": _fnClearTable,
-			"_fnSaveState": _fnSaveState,
-			"_fnLoadState": _fnLoadState,
-			"_fnCreateCookie": _fnCreateCookie,
-			"_fnReadCookie": _fnReadCookie,
-			"_fnDetectHeader": _fnDetectHeader,
-			"_fnGetUniqueThs": _fnGetUniqueThs,
-			"_fnScrollBarWidth": _fnScrollBarWidth,
-			"_fnApplyToChildren": _fnApplyToChildren,
-			"_fnMap": _fnMap,
-			"_fnGetRowData": _fnGetRowData,
-			"_fnGetCellData": _fnGetCellData,
-			"_fnSetCellData": _fnSetCellData,
-			"_fnGetObjectDataFn": _fnGetObjectDataFn,
-			"_fnSetObjectDataFn": _fnSetObjectDataFn,
-			"_fnApplyColumnDefs": _fnApplyColumnDefs,
-			"_fnBindAction": _fnBindAction,
-			"_fnExtend": _fnExtend,
-			"_fnCallbackReg": _fnCallbackReg,
-			"_fnCallbackFire": _fnCallbackFire,
-			"_fnJsonString": _fnJsonString,
-			"_fnRender": _fnRender,
-			"_fnNodeToColumnIndex": _fnNodeToColumnIndex,
-			"_fnInfoMacros": _fnInfoMacros
-		};
-		
-		$.extend( DataTable.ext.oApi, this.oApi );
-		
-		for ( var sFunc in DataTable.ext.oApi )
-		{
-			if ( sFunc )
-			{
-				this[sFunc] = _fnExternApiFunc(sFunc);
-			}
-		}
-		
-		
-		var _that = this;
-		return this.each(function() {
-			
-			var i=0, iLen, j, jLen, k, kLen;
-			var sId = this.getAttribute( 'id' );
-			var bInitHandedOff = false;
-			var bUsePassedData = false;
-			
-			
-			/* Sanity check */
-			if ( this.nodeName.toLowerCase() != 'table' )
-			{
-				_fnLog( null, 0, "Attempted to initialise DataTables on a node which is not a "+
-					"table: "+this.nodeName );
-				return;
-			}
-			
-			/* Check to see if we are re-initialising a table */
-			for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
-			{
-				/* Base check on table node */
-				if ( DataTable.settings[i].nTable == this )
-				{
-					if ( oInit === undefined || oInit.bRetrieve )
-					{
-						return DataTable.settings[i].oInstance;
-					}
-					else if ( oInit.bDestroy )
-					{
-						DataTable.settings[i].oInstance.fnDestroy();
-						break;
-					}
-					else
-					{
-						_fnLog( DataTable.settings[i], 0, "Cannot reinitialise DataTable.\n\n"+
-							"To retrieve the DataTables object for this table, pass no arguments or see "+
-							"the docs for bRetrieve and bDestroy" );
-						return;
-					}
-				}
-				
-				/* If the element we are initialising has the same ID as a table which was previously
-				 * initialised, but the table nodes don't match (from before) then we destroy the old
-				 * instance by simply deleting it. This is under the assumption that the table has been
-				 * destroyed by other methods. Anyone using non-id selectors will need to do this manually
-				 */
-				if ( DataTable.settings[i].sTableId == this.id )
-				{
-					DataTable.settings.splice( i, 1 );
-					break;
-				}
-			}
-			
-			/* Ensure the table has an ID - required for accessibility */
-			if ( sId === null || sId === "" )
-			{
-				sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++);
-				this.id = sId;
-			}
-			
-			/* Create the settings object for this table and set some of the default parameters */
-			var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
-				"nTable":        this,
-				"oApi":          _that.oApi,
-				"oInit":         oInit,
-				"sDestroyWidth": $(this).width(),
-				"sInstance":     sId,
-				"sTableId":      sId
-			} );
-			DataTable.settings.push( oSettings );
-			
-			// Need to add the instance after the instance after the settings object has been added
-			// to the settings array, so we can self reference the table instance if more than one
-			oSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable();
-			
-			/* Setting up the initialisation object */
-			if ( !oInit )
-			{
-				oInit = {};
-			}
-			
-			// Backwards compatibility, before we apply all the defaults
-			if ( oInit.oLanguage )
-			{
-				_fnLanguageCompat( oInit.oLanguage );
-			}
-			
-			oInit = _fnExtend( $.extend(true, {}, DataTable.defaults), oInit );
-			
-			// Map the initialisation options onto the settings object
-			_fnMap( oSettings.oFeatures, oInit, "bPaginate" );
-			_fnMap( oSettings.oFeatures, oInit, "bLengthChange" );
-			_fnMap( oSettings.oFeatures, oInit, "bFilter" );
-			_fnMap( oSettings.oFeatures, oInit, "bSort" );
-			_fnMap( oSettings.oFeatures, oInit, "bInfo" );
-			_fnMap( oSettings.oFeatures, oInit, "bProcessing" );
-			_fnMap( oSettings.oFeatures, oInit, "bAutoWidth" );
-			_fnMap( oSettings.oFeatures, oInit, "bSortClasses" );
-			_fnMap( oSettings.oFeatures, oInit, "bServerSide" );
-			_fnMap( oSettings.oFeatures, oInit, "bDeferRender" );
-			_fnMap( oSettings.oScroll, oInit, "sScrollX", "sX" );
-			_fnMap( oSettings.oScroll, oInit, "sScrollXInner", "sXInner" );
-			_fnMap( oSettings.oScroll, oInit, "sScrollY", "sY" );
-			_fnMap( oSettings.oScroll, oInit, "bScrollCollapse", "bCollapse" );
-			_fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" );
-			_fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" );
-			_fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" );
-			_fnMap( oSettings, oInit, "asStripeClasses" );
-			_fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy
-			_fnMap( oSettings, oInit, "fnServerData" );
-			_fnMap( oSettings, oInit, "fnFormatNumber" );
-			_fnMap( oSettings, oInit, "sServerMethod" );
-			_fnMap( oSettings, oInit, "aaSorting" );
-			_fnMap( oSettings, oInit, "aaSortingFixed" );
-			_fnMap( oSettings, oInit, "aLengthMenu" );
-			_fnMap( oSettings, oInit, "sPaginationType" );
-			_fnMap( oSettings, oInit, "sAjaxSource" );
-			_fnMap( oSettings, oInit, "sAjaxDataProp" );
-			_fnMap( oSettings, oInit, "iCookieDuration" );
-			_fnMap( oSettings, oInit, "sCookiePrefix" );
-			_fnMap( oSettings, oInit, "sDom" );
-			_fnMap( oSettings, oInit, "bSortCellsTop" );
-			_fnMap( oSettings, oInit, "iTabIndex" );
-			_fnMap( oSettings, oInit, "oSearch", "oPreviousSearch" );
-			_fnMap( oSettings, oInit, "aoSearchCols", "aoPreSearchCols" );
-			_fnMap( oSettings, oInit, "iDisplayLength", "_iDisplayLength" );
-			_fnMap( oSettings, oInit, "bJQueryUI", "bJUI" );
-			_fnMap( oSettings, oInit, "fnCookieCallback" );
-			_fnMap( oSettings, oInit, "fnStateLoad" );
-			_fnMap( oSettings, oInit, "fnStateSave" );
-			_fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" );
-			
-			/* Callback functions which are array driven */
-			_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );
-			_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );
-			_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );
-			_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );
-			_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );
-			
-			if ( oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort &&
-				   oSettings.oFeatures.bSortClasses )
-			{
-				/* Enable sort classes for server-side processing. Safe to do it here, since server-side
-				 * processing must be enabled by the developer
-				 */
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'server_side_sort_classes' );
-			}
-			else if ( oSettings.oFeatures.bDeferRender )
-			{
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'defer_sort_classes' );
-			}
-			
-			if ( oInit.bJQueryUI )
-			{
-				/* Use the JUI classes object for display. You could clone the oStdClasses object if 
-				 * you want to have multiple tables with multiple independent classes 
-				 */
-				$.extend( oSettings.oClasses, DataTable.ext.oJUIClasses );
-				
-				if ( oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip" )
-				{
-					/* Set the DOM to use a layout suitable for jQuery UI's theming */
-					oSettings.sDom = '<"H"lfr>t<"F"ip>';
-				}
-			}
-			else
-			{
-				$.extend( oSettings.oClasses, DataTable.ext.oStdClasses );
-			}
-			$(this).addClass( oSettings.oClasses.sTable );
-			
-			/* Calculate the scroll bar width and cache it for use later on */
-			if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
-			{
-				oSettings.oScroll.iBarWidth = _fnScrollBarWidth();
-			}
-			
-			if ( oSettings.iInitDisplayStart === undefined )
-			{
-				/* Display start point, taking into account the save saving */
-				oSettings.iInitDisplayStart = oInit.iDisplayStart;
-				oSettings._iDisplayStart = oInit.iDisplayStart;
-			}
-			
-			/* Must be done after everything which can be overridden by a cookie! */
-			if ( oInit.bStateSave )
-			{
-				oSettings.oFeatures.bStateSave = true;
-				_fnLoadState( oSettings, oInit );
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
-			}
-			
-			if ( oInit.iDeferLoading !== null )
-			{
-				oSettings.bDeferLoading = true;
-				var tmp = $.isArray( oInit.iDeferLoading );
-				oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
-				oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
-			}
-			
-			if ( oInit.aaData !== null )
-			{
-				bUsePassedData = true;
-			}
-			
-			/* Language definitions */
-			if ( oInit.oLanguage.sUrl !== "" )
-			{
-				/* Get the language definitions from a file - because this Ajax call makes the language
-				 * get async to the remainder of this function we use bInitHandedOff to indicate that 
-				 * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
-				 */
-				oSettings.oLanguage.sUrl = oInit.oLanguage.sUrl;
-				$.getJSON( oSettings.oLanguage.sUrl, null, function( json ) {
-					_fnLanguageCompat( json );
-					$.extend( true, oSettings.oLanguage, oInit.oLanguage, json );
-					_fnInitialise( oSettings );
-				} );
-				bInitHandedOff = true;
-			}
-			else
-			{
-				$.extend( true, oSettings.oLanguage, oInit.oLanguage );
-			}
-			
-			
-			/*
-			 * Stripes
-			 */
-			if ( oInit.asStripeClasses === null )
-			{
-				oSettings.asStripeClasses =[
-					oSettings.oClasses.sStripeOdd,
-					oSettings.oClasses.sStripeEven
-				];
-			}
-			
-			/* Remove row stripe classes if they are already on the table row */
-			var bStripeRemove = false;
-			var anRows = $(this).children('tbody').children('tr');
-			for ( i=0, iLen=oSettings.asStripeClasses.length ; i<iLen ; i++ )
-			{
-				if ( anRows.filter(":lt(2)").hasClass( oSettings.asStripeClasses[i]) )
-				{
-					bStripeRemove = true;
-					break;
-				}
-			}
-					
-			if ( bStripeRemove )
-			{
-				/* Store the classes which we are about to remove so they can be readded on destroy */
-				oSettings.asDestroyStripes = [ '', '' ];
-				if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeOdd) )
-				{
-					oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeOdd+" ";
-				}
-				if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeEven) )
-				{
-					oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeEven;
-				}
-				if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeOdd) )
-				{
-					oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeOdd+" ";
-				}
-				if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeEven) )
-				{
-					oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeEven;
-				}
-				
-				anRows.removeClass( oSettings.asStripeClasses.join(' ') );
-			}
-			
-			
-			/*
-			 * Columns
-			 * See if we should load columns automatically or use defined ones
-			 */
-			var anThs = [];
-			var aoColumnsInit;
-			var nThead = this.getElementsByTagName('thead');
-			if ( nThead.length !== 0 )
-			{
-				_fnDetectHeader( oSettings.aoHeader, nThead[0] );
-				anThs = _fnGetUniqueThs( oSettings );
-			}
-			
-			/* If not given a column array, generate one with nulls */
-			if ( oInit.aoColumns === null )
-			{
-				aoColumnsInit = [];
-				for ( i=0, iLen=anThs.length ; i<iLen ; i++ )
-				{
-					aoColumnsInit.push( null );
-				}
-			}
-			else
-			{
-				aoColumnsInit = oInit.aoColumns;
-			}
-			
-			/* Add the columns */
-			for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
-			{
-				/* Short cut - use the loop to check if we have column visibility state to restore */
-				if ( oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen )
-				{
-					if ( aoColumnsInit[i] === null )
-					{
-						aoColumnsInit[i] = {};
-					}
-					aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible;
-				}
-				
-				_fnAddColumn( oSettings, anThs ? anThs[i] : null );
-			}
-			
-			/* Apply the column definitions */
-			_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
-				_fnColumnOptions( oSettings, iCol, oDef );
-			} );
-			
-			
-			/*
-			 * Sorting
-			 * Check the aaSorting array
-			 */
-			for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )
-			{
-				if ( oSettings.aaSorting[i][0] >= oSettings.aoColumns.length )
-				{
-					oSettings.aaSorting[i][0] = 0;
-				}
-				var oColumn = oSettings.aoColumns[ oSettings.aaSorting[i][0] ];
-				
-				/* Add a default sorting index */
-				if ( oSettings.aaSorting[i][2] === undefined )
-				{
-					oSettings.aaSorting[i][2] = 0;
-				}
-				
-				/* If aaSorting is not defined, then we use the first indicator in asSorting */
-				if ( oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined )
-				{
-					oSettings.aaSorting[i][1] = oColumn.asSorting[0];
-				}
-				
-				/* Set the current sorting index based on aoColumns.asSorting */
-				for ( j=0, jLen=oColumn.asSorting.length ; j<jLen ; j++ )
-				{
-					if ( oSettings.aaSorting[i][1] == oColumn.asSorting[j] )
-					{
-						oSettings.aaSorting[i][2] = j;
-						break;
-					}
-				}
-			}
-				
-			/* Do a first pass on the sorting classes (allows any size changes to be taken into
-			 * account, and also will apply sorting disabled classes if disabled
-			 */
-			_fnSortingClasses( oSettings );
-			
-			
-			/*
-			 * Final init
-			 * Cache the header, body and footer as required, creating them if needed
-			 */
-			
-			// Work around for Webkit bug 83867 - store the caption-side before removing from doc
-			var captions = $(this).children('caption').each( function () {
-				this._captionSide = $(this).css('caption-side');
-			} );
-			
-			var thead = $(this).children('thead');
-			if ( thead.length === 0 )
-			{
-				thead = [ document.createElement( 'thead' ) ];
-				this.appendChild( thead[0] );
-			}
-			oSettings.nTHead = thead[0];
-			
-			var tbody = $(this).children('tbody');
-			if ( tbody.length === 0 )
-			{
-				tbody = [ document.createElement( 'tbody' ) ];
-				this.appendChild( tbody[0] );
-			}
-			oSettings.nTBody = tbody[0];
-			oSettings.nTBody.setAttribute( "role", "alert" );
-			oSettings.nTBody.setAttribute( "aria-live", "polite" );
-			oSettings.nTBody.setAttribute( "aria-relevant", "all" );
-			
-			var tfoot = $(this).children('tfoot');
-			if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") )
-			{
-				// If we are a scrolling table, and no footer has been given, then we need to create
-				// a tfoot element for the caption element to be appended to
-				tfoot = [ document.createElement( 'tfoot' ) ];
-				this.appendChild( tfoot[0] );
-			}
-			
-			if ( tfoot.length > 0 )
-			{
-				oSettings.nTFoot = tfoot[0];
-				_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
-			}
-			
-			/* Check if there is data passing into the constructor */
-			if ( bUsePassedData )
-			{
-				for ( i=0 ; i<oInit.aaData.length ; i++ )
-				{
-					_fnAddData( oSettings, oInit.aaData[ i ] );
-				}
-			}
-			else
-			{
-				/* Grab the data from the page */
-				_fnGatherData( oSettings );
-			}
-			
-			/* Copy the data index array */
-			oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-			/* Initialisation complete - table can be drawn */
-			oSettings.bInitialised = true;
-			
-			/* Check if we need to initialise the table (it might not have been handed off to the
-			 * language processor)
-			 */
-			if ( bInitHandedOff === false )
-			{
-				_fnInitialise( oSettings );
-			}
-		} );
-	};
-
-	
-	
-	/**
-	 * Provide a common method for plug-ins to check the version of DataTables being used, in order
-	 * to ensure compatibility.
-	 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
-	 *    formats "X" and "X.Y" are also acceptable.
-	 *  @returns {boolean} true if this version of DataTables is greater or equal to the required
-	 *    version, or false if this version of DataTales is not suitable
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    alert( $.fn.dataTable.fnVersionCheck( '1.9.0' ) );
-	 */
-	DataTable.fnVersionCheck = function( sVersion )
-	{
-		/* This is cheap, but effective */
-		var fnZPad = function (Zpad, count)
-		{
-			while(Zpad.length < count) {
-				Zpad += '0';
-			}
-			return Zpad;
-		};
-		var aThis = DataTable.ext.sVersion.split('.');
-		var aThat = sVersion.split('.');
-		var sThis = '', sThat = '';
-		
-		for ( var i=0, iLen=aThat.length ; i<iLen ; i++ )
-		{
-			sThis += fnZPad( aThis[i], 3 );
-			sThat += fnZPad( aThat[i], 3 );
-		}
-		
-		return parseInt(sThis, 10) >= parseInt(sThat, 10);
-	};
-	
-	
-	/**
-	 * Check if a TABLE node is a DataTable table already or not.
-	 *  @param {node} nTable The TABLE node to check if it is a DataTable or not (note that other
-	 *    node types can be passed in, but will always return false).
-	 *  @returns {boolean} true the table given is a DataTable, or false otherwise
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    var ex = document.getElementById('example');
-	 *    if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) {
-	 *      $(ex).dataTable();
-	 *    }
-	 */
-	DataTable.fnIsDataTable = function ( nTable )
-	{
-		var o = DataTable.settings;
-	
-		for ( var i=0 ; i<o.length ; i++ )
-		{
-			if ( o[i].nTable === nTable || o[i].nScrollHead === nTable || o[i].nScrollFoot === nTable )
-			{
-				return true;
-			}
-		}
-	
-		return false;
-	};
-	
-	
-	/**
-	 * Get all DataTable tables that have been initialised - optionally you can select to
-	 * get only currently visible tables.
-	 *  @param {boolean} [bVisible=false] Flag to indicate if you want all (default) or 
-	 *    visible tables only.
-	 *  @returns {array} Array of TABLE nodes (not DataTable instances) which are DataTables
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    var table = $.fn.dataTable.fnTables(true);
-	 *    if ( table.length > 0 ) {
-	 *      $(table).dataTable().fnAdjustColumnSizing();
-	 *    }
-	 */
-	DataTable.fnTables = function ( bVisible )
-	{
-		var out = [];
-	
-		jQuery.each( DataTable.settings, function (i, o) {
-			if ( !bVisible || (bVisible === true && $(o.nTable).is(':visible')) )
-			{
-				out.push( o.nTable );
-			}
-		} );
-	
-		return out;
-	};
-	
-
-	/**
-	 * Version string for plug-ins to check compatibility. Allowed format is
-	 * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and
-	 * e are optional
-	 *  @member
-	 *  @type string
-	 *  @default Version number
-	 */
-	DataTable.version = "1.9.2";
-
-	/**
-	 * Private data store, containing all of the settings objects that are created for the
-	 * tables on a given page.
-	 * 
-	 * Note that the <i>DataTable.settings</i> object is aliased to <i>jQuery.fn.dataTableExt</i> 
-	 * through which it may be accessed and manipulated, or <i>jQuery.fn.dataTable.settings</i>.
-	 *  @member
-	 *  @type array
-	 *  @default []
-	 *  @private
-	 */
-	DataTable.settings = [];
-
-	/**
-	 * Object models container, for the various models that DataTables has available
-	 * to it. These models define the objects that are used to hold the active state 
-	 * and configuration of the table.
-	 *  @namespace
-	 */
-	DataTable.models = {};
-	
-	
-	/**
-	 * DataTables extension options and plug-ins. This namespace acts as a collection "area"
-	 * for plug-ins that can be used to extend the default DataTables behaviour - indeed many
-	 * of the build in methods use this method to provide their own capabilities (sorting methods
-	 * for example).
-	 * 
-	 * Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed
-	 * and modified by plug-ins.
-	 *  @namespace
-	 */
-	DataTable.models.ext = {
-		/**
-		 * Plug-in filtering functions - this method of filtering is complimentary to the default
-		 * type based filtering, and a lot more comprehensive as it allows you complete control
-		 * over the filtering logic. Each element in this array is a function (parameters
-		 * described below) that is called for every row in the table, and your logic decides if
-		 * it should be included in the filtered data set or not.
-		 *   <ul>
-		 *     <li>
-		 *       Function input parameters:
-		 *       <ul>
-		 *         <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-		 *         <li>{array|object} Data for the row to be processed (same as the original format
-		 *           that was passed in as the data source, or an array from a DOM data source</li>
-		 *         <li>{int} Row index in aoData ({@link DataTable.models.oSettings.aoData}), which can
-		 *           be useful to retrieve the TR element if you need DOM interaction.</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{boolean} Include the row in the filtered result set (true) or not (false)</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 *
-		 *  @example
-		 *    // The following example shows custom filtering being applied to the fourth column (i.e.
-		 *    // the aData[3] index) based on two input values from the end-user, matching the data in 
-		 *    // a certain range.
-		 *    $.fn.dataTableExt.afnFiltering.push(
-		 *      function( oSettings, aData, iDataIndex ) {
-		 *        var iMin = document.getElementById('min').value * 1;
-		 *        var iMax = document.getElementById('max').value * 1;
-		 *        var iVersion = aData[3] == "-" ? 0 : aData[3]*1;
-		 *        if ( iMin == "" && iMax == "" ) {
-		 *          return true;
-		 *        }
-		 *        else if ( iMin == "" && iVersion < iMax ) {
-		 *          return true;
-		 *        }
-		 *        else if ( iMin < iVersion && "" == iMax ) {
-		 *          return true;
-		 *        }
-		 *        else if ( iMin < iVersion && iVersion < iMax ) {
-		 *          return true;
-		 *        }
-		 *        return false;
-		 *      }
-		 *    );
-		 */
-		"afnFiltering": [],
-	
-	
-		/**
-		 * Plug-in sorting functions - this method of sorting is complimentary to the default type
-		 * based sorting that DataTables does automatically, allowing much greater control over the
-		 * the data that is being used to sort a column. This is useful if you want to do sorting
-		 * based on live data (for example the contents of an 'input' element) rather than just the
-		 * static string that DataTables knows of. The way these plug-ins work is that you create
-		 * an array of the values you wish to be sorted for the column in question and then return
-		 * that array. Which pre-sorting function is run here depends on the sSortDataType parameter
-		 * that is used for the column (if any). This is the corollary of <i>ofnSearch</i> for sort 
-		 * data.
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-	     *         <li>{int} Target column index</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{array} Data for the column to be sorted upon</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  
-		 * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for
-		 * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when
-		 * used as a function will give you a 'type' (sorting, filtering etc) that you can use to 
-		 * prepare the data as required for the different types. As such, this method is deprecated.
-		 *  @type array
-		 *  @default []
-		 *  @deprecated
-		 *
-		 *  @example
-		 *    // Updating the cached sorting information with user entered values in HTML input elements
-		 *    jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn )
-		 *    {
-		 *      var aData = [];
-		 *      $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
-		 *        aData.push( this.value );
-		 *      } );
-		 *      return aData;
-		 *    }
-		 */
-		"afnSortData": [],
-	
-	
-		/**
-		 * Feature plug-ins - This is an array of objects which describe the feature plug-ins that are
-		 * available to DataTables. These feature plug-ins are accessible through the sDom initialisation
-		 * option. As such, each feature plug-in must describe a function that is used to initialise
-		 * itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name
-		 * of the feature (sFeature). Thus the objects attached to this method must provide:
-		 *   <ul>
-		 *     <li>{function} fnInit Initialisation of the plug-in
-		 *       <ul>
-	     *         <li>
-	     *           Function input parameters:
-	     *           <ul>
-		 *             <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-	     *           </ul>
-	     *         </li>
-		 *         <li>
-		 *           Function return:
-		 *           <ul>
-		 *             <li>{node|null} The element which contains your feature. Note that the return
-		 *                may also be void if your plug-in does not require to inject any DOM elements 
-		 *                into DataTables control (sDom) - for example this might be useful when 
-		 *                developing a plug-in which allows table control via keyboard entry.</li>
-		 *           </ul>
-		 *         </il>
-		 *       </ul>
-		 *     </li>
-		 *     <li>{character} cFeature Character that will be matched in sDom - case sensitive</li>
-		 *     <li>{string} sFeature Feature name</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 * 
-		 *  @example
-		 *    // How TableTools initialises itself.
-		 *    $.fn.dataTableExt.aoFeatures.push( {
-		 *      "fnInit": function( oSettings ) {
-		 *        return new TableTools( { "oDTSettings": oSettings } );
-		 *      },
-		 *      "cFeature": "T",
-		 *      "sFeature": "TableTools"
-		 *    } );
-		 */
-		"aoFeatures": [],
-	
-	
-		/**
-		 * Type detection plug-in functions - DataTables utilises types to define how sorting and
-		 * filtering behave, and types can be either  be defined by the developer (sType for the
-		 * column) or they can be automatically detected by the methods in this array. The functions
-		 * defined in the array are quite simple, taking a single parameter (the data to analyse) 
-		 * and returning the type if it is a known type, or null otherwise.
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{*} Data from the column cell to be analysed</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{string|null} Data type detected, or null if unknown (and thus pass it
-		 *           on to the other type detection functions.</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 *  
-		 *  @example
-		 *    // Currency type detection plug-in:
-		 *    jQuery.fn.dataTableExt.aTypes.push(
-		 *      function ( sData ) {
-		 *        var sValidChars = "0123456789.-";
-		 *        var Char;
-		 *        
-		 *        // Check the numeric part
-		 *        for ( i=1 ; i<sData.length ; i++ ) {
-		 *          Char = sData.charAt(i); 
-		 *          if (sValidChars.indexOf(Char) == -1) {
-		 *            return null;
-		 *          }
-		 *        }
-		 *        
-		 *        // Check prefixed by currency
-		 *        if ( sData.charAt(0) == '$' || sData.charAt(0) == '&pound;' ) {
-		 *          return 'currency';
-		 *        }
-		 *        return null;
-		 *      }
-		 *    );
-		 */
-		"aTypes": [],
-	
-	
-		/**
-		 * Provide a common method for plug-ins to check the version of DataTables being used, 
-		 * in order to ensure compatibility.
-		 *  @type function
-		 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note 
-		 *    that the formats "X" and "X.Y" are also acceptable.
-		 *  @returns {boolean} true if this version of DataTables is greater or equal to the 
-		 *    required version, or false if this version of DataTales is not suitable
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      alert( oTable.fnVersionCheck( '1.9.0' ) );
-		 *    } );
-		 */
-		"fnVersionCheck": DataTable.fnVersionCheck,
-	
-	
-		/**
-		 * Index for what 'this' index API functions should use
-		 *  @type int
-		 *  @default 0
-		 */
-		"iApiIndex": 0,
-	
-	
-		/**
-		 * Pre-processing of filtering data plug-ins - When you assign the sType for a column
-		 * (or have it automatically detected for you by DataTables or a type detection plug-in), 
-		 * you will typically be using this for custom sorting, but it can also be used to provide 
-		 * custom filtering by allowing you to pre-processing the data and returning the data in
-		 * the format that should be filtered upon. This is done by adding functions this object 
-		 * with a parameter name which matches the sType for that target column. This is the
-		 * corollary of <i>afnSortData</i> for filtering data.
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{*} Data from the column cell to be prepared for filtering</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{string|null} Formatted string that will be used for the filtering.</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 * 
-		 * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for
-		 * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when
-		 * used as a function will give you a 'type' (sorting, filtering etc) that you can use to 
-		 * prepare the data as required for the different types. As such, this method is deprecated.
-		 *  @type object
-		 *  @default {}
-		 *  @deprecated
-		 *
-		 *  @example
-		 *    $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) {
-		 *      return sData.replace(/\n/g," ").replace( /<.*?>/g, "" );
-		 *    }
-		 */
-		"ofnSearch": {},
-	
-	
-		/**
-		 * Container for all private functions in DataTables so they can be exposed externally
-		 *  @type object
-		 *  @default {}
-		 */
-		"oApi": {},
-	
-	
-		/**
-		 * Storage for the various classes that DataTables uses
-		 *  @type object
-		 *  @default {}
-		 */
-		"oStdClasses": {},
-		
-	
-		/**
-		 * Storage for the various classes that DataTables uses - jQuery UI suitable
-		 *  @type object
-		 *  @default {}
-		 */
-		"oJUIClasses": {},
-	
-	
-		/**
-		 * Pagination plug-in methods - The style and controls of the pagination can significantly 
-		 * impact on how the end user interacts with the data in your table, and DataTables allows 
-		 * the addition of pagination controls by extending this object, which can then be enabled
-		 * through the <i>sPaginationType</i> initialisation parameter. Each pagination type that
-		 * is added is an object (the property name of which is what <i>sPaginationType</i> refers
-		 * to) that has two properties, both methods that are used by DataTables to update the
-		 * control's state.
-		 *   <ul>
-		 *     <li>
-		 *       fnInit -  Initialisation of the paging controls. Called only during initialisation 
-		 *         of the table. It is expected that this function will add the required DOM elements 
-		 *         to the page for the paging controls to work. The element pointer 
-		 *         'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging 
-		 *         controls (note that this is a 2D array to allow for multiple instances of each 
-		 *         DataTables DOM element). It is suggested that you add the controls to this element 
-		 *         as children
-		 *       <ul>
-	     *         <li>
-	     *           Function input parameters:
-	     *           <ul>
-		 *             <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-		 *             <li>{node} Container into which the pagination controls must be inserted</li>
-		 *             <li>{function} Draw callback function - whenever the controls cause a page
-		 *               change, this method must be called to redraw the table.</li>
-	     *           </ul>
-	     *         </li>
-		 *         <li>
-		 *           Function return:
-		 *           <ul>
-		 *             <li>No return required</li>
-		 *           </ul>
-		 *         </il>
-		 *       </ul>
-		 *     </il>
-		 *     <li>
-		 *       fnInit -  This function is called whenever the paging status of the table changes and is
-		 *         typically used to update classes and/or text of the paging controls to reflex the new 
-		 *         status.
-		 *       <ul>
-	     *         <li>
-	     *           Function input parameters:
-	     *           <ul>
-		 *             <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
-		 *             <li>{function} Draw callback function - in case you need to redraw the table again
-		 *               or attach new event listeners</li>
-	     *           </ul>
-	     *         </li>
-		 *         <li>
-		 *           Function return:
-		 *           <ul>
-		 *             <li>No return required</li>
-		 *           </ul>
-		 *         </il>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type object
-		 *  @default {}
-		 *
-		 *  @example
-		 *    $.fn.dataTableExt.oPagination.four_button = {
-		 *      "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) {
-		 *        nFirst = document.createElement( 'span' );
-		 *        nPrevious = document.createElement( 'span' );
-		 *        nNext = document.createElement( 'span' );
-		 *        nLast = document.createElement( 'span' );
-		 *        
-		 *        nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) );
-		 *        nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) );
-		 *        nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) );
-		 *        nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) );
-		 *        
-		 *        nFirst.className = "paginate_button first";
-		 *        nPrevious.className = "paginate_button previous";
-		 *        nNext.className="paginate_button next";
-		 *        nLast.className = "paginate_button last";
-		 *        
-		 *        nPaging.appendChild( nFirst );
-		 *        nPaging.appendChild( nPrevious );
-		 *        nPaging.appendChild( nNext );
-		 *        nPaging.appendChild( nLast );
-		 *        
-		 *        $(nFirst).click( function () {
-		 *          oSettings.oApi._fnPageChange( oSettings, "first" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nPrevious).click( function() {
-		 *          oSettings.oApi._fnPageChange( oSettings, "previous" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nNext).click( function() {
-		 *          oSettings.oApi._fnPageChange( oSettings, "next" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nLast).click( function() {
-		 *          oSettings.oApi._fnPageChange( oSettings, "last" );
-		 *          fnCallbackDraw( oSettings );
-		 *        } );
-		 *        
-		 *        $(nFirst).bind( 'selectstart', function () { return false; } );
-		 *        $(nPrevious).bind( 'selectstart', function () { return false; } );
-		 *        $(nNext).bind( 'selectstart', function () { return false; } );
-		 *        $(nLast).bind( 'selectstart', function () { return false; } );
-		 *      },
-		 *      
-		 *      "fnUpdate": function ( oSettings, fnCallbackDraw ) {
-		 *        if ( !oSettings.aanFeatures.p ) {
-		 *          return;
-		 *        }
-		 *        
-		 *        // Loop over each instance of the pager
-		 *        var an = oSettings.aanFeatures.p;
-		 *        for ( var i=0, iLen=an.length ; i<iLen ; i++ ) {
-		 *          var buttons = an[i].getElementsByTagName('span');
-		 *          if ( oSettings._iDisplayStart === 0 ) {
-		 *            buttons[0].className = "paginate_disabled_previous";
-		 *            buttons[1].className = "paginate_disabled_previous";
-		 *          }
-		 *          else {
-		 *            buttons[0].className = "paginate_enabled_previous";
-		 *            buttons[1].className = "paginate_enabled_previous";
-		 *          }
-		 *          
-		 *          if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) {
-		 *            buttons[2].className = "paginate_disabled_next";
-		 *            buttons[3].className = "paginate_disabled_next";
-		 *          }
-		 *          else {
-		 *            buttons[2].className = "paginate_enabled_next";
-		 *            buttons[3].className = "paginate_enabled_next";
-		 *          }
-		 *        }
-		 *      }
-		 *    };
-		 */
-		"oPagination": {},
-	
-	
-		/**
-		 * Sorting plug-in methods - Sorting in DataTables is based on the detected type of the
-		 * data column (you can add your own type detection functions, or override automatic 
-		 * detection using sType). With this specific type given to the column, DataTables will 
-		 * apply the required sort from the functions in the object. Each sort type must provide
-		 * two mandatory methods, one each for ascending and descending sorting, and can optionally
-		 * provide a pre-formatting method that will help speed up sorting by allowing DataTables
-		 * to pre-format the sort data only once (rather than every time the actual sort functions
-		 * are run). The two sorting functions are typical Javascript sort methods:
-		 *   <ul>
-	     *     <li>
-	     *       Function input parameters:
-	     *       <ul>
-		 *         <li>{*} Data to compare to the second parameter</li>
-		 *         <li>{*} Data to compare to the first parameter</li>
-	     *       </ul>
-	     *     </li>
-		 *     <li>
-		 *       Function return:
-		 *       <ul>
-		 *         <li>{int} Sorting match: <0 if first parameter should be sorted lower than
-		 *           the second parameter, ===0 if the two parameters are equal and >0 if
-		 *           the first parameter should be sorted height than the second parameter.</li>
-		 *       </ul>
-		 *     </il>
-		 *   </ul>
-		 *  @type object
-		 *  @default {}
-		 *
-		 *  @example
-		 *    // Case-sensitive string sorting, with no pre-formatting method
-		 *    $.extend( $.fn.dataTableExt.oSort, {
-		 *      "string-case-asc": function(x,y) {
-		 *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		 *      },
-		 *      "string-case-desc": function(x,y) {
-		 *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		 *      }
-		 *    } );
-		 *
-		 *  @example
-		 *    // Case-insensitive string sorting, with pre-formatting
-		 *    $.extend( $.fn.dataTableExt.oSort, {
-		 *      "string-pre": function(x) {
-		 *        return x.toLowerCase();
-		 *      },
-		 *      "string-asc": function(x,y) {
-		 *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		 *      },
-		 *      "string-desc": function(x,y) {
-		 *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		 *      }
-		 *    } );
-		 */
-		"oSort": {},
-	
-	
-		/**
-		 * Version string for plug-ins to check compatibility. Allowed format is
-		 * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and
-		 * e are optional
-		 *  @type string
-		 *  @default Version number
-		 */
-		"sVersion": DataTable.version,
-	
-	
-		/**
-		 * How should DataTables report an error. Can take the value 'alert' or 'throw'
-		 *  @type string
-		 *  @default alert
-		 */
-		"sErrMode": "alert",
-	
-	
-		/**
-		 * Store information for DataTables to access globally about other instances
-		 *  @namespace
-		 *  @private
-		 */
-		"_oExternConfig": {
-			/* int:iNextUnique - next unique number for an instance */
-			"iNextUnique": 0
-		}
-	};
-	
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * search information for the global filter and individual column filters.
-	 *  @namespace
-	 */
-	DataTable.models.oSearch = {
-		/**
-		 * Flag to indicate if the filtering should be case insensitive or not
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bCaseInsensitive": true,
-	
-		/**
-		 * Applied search term
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sSearch": "",
-	
-		/**
-		 * Flag to indicate if the search term should be interpreted as a
-		 * regular expression (true) or not (false) and therefore and special
-		 * regex characters escaped.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bRegex": false,
-	
-		/**
-		 * Flag to indicate if DataTables is to use its smart filtering or not.
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bSmart": true
-	};
-	
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * each individual row. This is the object format used for the settings 
-	 * aoData array.
-	 *  @namespace
-	 */
-	DataTable.models.oRow = {
-		/**
-		 * TR element for the row
-		 *  @type node
-		 *  @default null
-		 */
-		"nTr": null,
-	
-		/**
-		 * Data object from the original data source for the row. This is either
-		 * an array if using the traditional form of DataTables, or an object if
-		 * using mDataProp options. The exact type will depend on the passed in
-		 * data from the data source, or will be an array if using DOM a data 
-		 * source.
-		 *  @type array|object
-		 *  @default []
-		 */
-		"_aData": [],
-	
-		/**
-		 * Sorting data cache - this array is ostensibly the same length as the
-		 * number of columns (although each index is generated only as it is 
-		 * needed), and holds the data that is used for sorting each column in the
-		 * row. We do this cache generation at the start of the sort in order that
-		 * the formatting of the sort data need be done only once for each cell
-		 * per sort. This array should not be read from or written to by anything
-		 * other than the master sorting methods.
-		 *  @type array
-		 *  @default []
-		 *  @private
-		 */
-		"_aSortData": [],
-	
-		/**
-		 * Array of TD elements that are cached for hidden rows, so they can be
-		 * reinserted into the table if a column is made visible again (or to act
-		 * as a store if a column is made hidden). Only hidden columns have a 
-		 * reference in the array. For non-hidden columns the value is either
-		 * undefined or null.
-		 *  @type array nodes
-		 *  @default []
-		 *  @private
-		 */
-		"_anHidden": [],
-	
-		/**
-		 * Cache of the class name that DataTables has applied to the row, so we
-		 * can quickly look at this variable rather than needing to do a DOM check
-		 * on className for the nTr property.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @private
-		 */
-		"_sRowStripe": ""
-	};
-	
-	
-	
-	/**
-	 * Template object for the column information object in DataTables. This object
-	 * is held in the settings aoColumns array and contains all the information that
-	 * DataTables needs about each individual column.
-	 * 
-	 * Note that this object is related to {@link DataTable.defaults.columns} 
-	 * but this one is the internal data store for DataTables's cache of columns.
-	 * It should NOT be manipulated outside of DataTables. Any configuration should
-	 * be done through the initialisation options.
-	 *  @namespace
-	 */
-	DataTable.models.oColumn = {
-		/**
-		 * A list of the columns that sorting should occur on when this column
-		 * is sorted. That this property is an array allows multi-column sorting
-		 * to be defined for a column (for example first name / last name columns
-		 * would benefit from this). The values are integers pointing to the
-		 * columns to be sorted on (typically it will be a single integer pointing
-		 * at itself, but that doesn't need to be the case).
-		 *  @type array
-		 */
-		"aDataSort": null,
-	
-		/**
-		 * Define the sorting directions that are applied to the column, in sequence
-		 * as the column is repeatedly sorted upon - i.e. the first value is used
-		 * as the sorting direction when the column if first sorted (clicked on).
-		 * Sort it again (click again) and it will move on to the next index.
-		 * Repeat until loop.
-		 *  @type array
-		 */
-		"asSorting": null,
-		
-		/**
-		 * Flag to indicate if the column is searchable, and thus should be included
-		 * in the filtering or not.
-		 *  @type boolean
-		 */
-		"bSearchable": null,
-		
-		/**
-		 * Flag to indicate if the column is sortable or not.
-		 *  @type boolean
-		 */
-		"bSortable": null,
-		
-		/**
-		 * When using fnRender, you have two options for what to do with the data,
-		 * and this property serves as the switch. Firstly, you can have the sorting
-		 * and filtering use the rendered value (true - default), or you can have
-		 * the sorting and filtering us the original value (false).
-		 * 
-		 * *NOTE* It is it is advisable now to use mDataProp as a function and make 
-		 * use of the 'type' that it gives, allowing (potentially) different data to
-		 * be used for sorting, filtering, display and type detection.
-		 *  @type boolean
-		 *  @deprecated
-		 */
-		"bUseRendered": null,
-		
-		/**
-		 * Flag to indicate if the column is currently visible in the table or not
-		 *  @type boolean
-		 */
-		"bVisible": null,
-		
-		/**
-		 * Flag to indicate to the type detection method if the automatic type
-		 * detection should be used, or if a column type (sType) has been specified
-		 *  @type boolean
-		 *  @default true
-		 *  @private
-		 */
-		"_bAutoType": true,
-		
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to fnRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available (since it is not when fnRender is called).
-		 *  @type function
-		 *  @param {element} nTd The TD node that has been created
-		 *  @param {*} sData The Data for the cell
-		 *  @param {array|object} oData The data for the whole row
-		 *  @param {int} iRow The row index for the aoData data store
-		 *  @default null
-		 */
-		"fnCreatedCell": null,
-		
-		/**
-		 * Function to get data from a cell in a column. You should <b>never</b>
-		 * access data directly through _aData internally in DataTables - always use
-		 * the method attached to this property. It allows mDataProp to function as
-		 * required. This function is automatically assigned by the column 
-		 * initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array 
-		 *    (i.e. aoData[]._aData)
-		 *  @param {string} sSpecific The specific data type you want to get - 
-		 *    'display', 'type' 'filter' 'sort'
-		 *  @returns {*} The data for the cell from the given row's data
-		 *  @default null
-		 */
-		"fnGetData": null,
-		
-		/**
-		 * Custom display function that will be called for the display of each cell 
-		 * in this column.
-		 *  @type function
-		 *  @param {object} o Object with the following parameters:
-		 *  @param {int}    o.iDataRow The row in aoData
-		 *  @param {int}    o.iDataColumn The column in question
-		 *  @param {array}  o.aData The data for the row in question
-		 *  @param {object} o.oSettings The settings object for this DataTables instance
-		 *  @returns {string} The string you which to use in the display
-		 *  @default null
-		 */
-		"fnRender": null,
-		
-		/**
-		 * Function to set data for a cell in the column. You should <b>never</b> 
-		 * set the data directly to _aData internally in DataTables - always use
-		 * this method. It allows mDataProp to function as required. This function
-		 * is automatically assigned by the column initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array 
-		 *    (i.e. aoData[]._aData)
-		 *  @param {*} sValue Value to set
-		 *  @default null
-		 */
-		"fnSetData": null,
-		
-		/**
-		 * Property to read the value for the cells in the column from the data 
-		 * source array / object. If null, then the default content is used, if a
-		 * function is given then the return from the function is used.
-		 *  @type function|int|string|null
-		 *  @default null
-		 */
-		"mDataProp": null,
-		
-		/**
-		 * Unique header TH/TD element for this column - this is what the sorting
-		 * listener is attached to (if sorting is enabled.)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTh": null,
-		
-		/**
-		 * Unique footer TH/TD element for this column (if there is one). Not used 
-		 * in DataTables as such, but can be used for plug-ins to reference the 
-		 * footer for each column.
-		 *  @type node
-		 *  @default null
-		 */
-		"nTf": null,
-		
-		/**
-		 * The class to apply to all TD elements in the table's TBODY for the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sClass": null,
-		
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer 
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 *  @type string
-		 */
-		"sContentPadding": null,
-		
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because mDataProp
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 */
-		"sDefaultContent": null,
-		
-		/**
-		 * Name for the column, allowing reference to the column by name as well as
-		 * by index (needs a lookup to work by name).
-		 *  @type string
-		 */
-		"sName": null,
-		
-		/**
-		 * Custom sorting data type - defines which of the available plug-ins in
-		 * afnSortData the custom sorting will use - if any is defined.
-		 *  @type string
-		 *  @default std
-		 */
-		"sSortDataType": 'std',
-		
-		/**
-		 * Class to be applied to the header element when sorting on this column
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClass": null,
-		
-		/**
-		 * Class to be applied to the header element when sorting on this column -
-		 * when jQuery UI theming is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClassJUI": null,
-		
-		/**
-		 * Title of the column - what is seen in the TH element (nTh).
-		 *  @type string
-		 */
-		"sTitle": null,
-		
-		/**
-		 * Column sorting and filtering type
-		 *  @type string
-		 *  @default null
-		 */
-		"sType": null,
-		
-		/**
-		 * Width of the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidth": null,
-		
-		/**
-		 * Width of the column when it was first "encountered"
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidthOrig": null
-	};
-	
-	
-	
-	/**
-	 * Initialisation options that can be given to DataTables at initialisation 
-	 * time.
-	 *  @namespace
-	 */
-	DataTable.defaults = {
-		/**
-		 * An array of data to use for the table, passed in at initialisation which 
-		 * will be used in preference to any data which is already in the DOM. This is
-		 * particularly useful for constructing tables purely in Javascript, for
-		 * example with a custom Ajax call.
-		 *  @type array
-		 *  @default null
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    // Using a 2D array data source
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "aaData": [
-		 *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
-		 *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
-		 *        ],
-		 *        "aoColumns": [
-		 *          { "sTitle": "Engine" },
-		 *          { "sTitle": "Browser" },
-		 *          { "sTitle": "Platform" },
-		 *          { "sTitle": "Version" },
-		 *          { "sTitle": "Grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using an array of objects as a data source (mDataProp)
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "aaData": [
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 4.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  4,
-		 *            "grade":    "X"
-		 *          },
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 5.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  5,
-		 *            "grade":    "C"
-		 *          }
-		 *        ],
-		 *        "aoColumns": [
-		 *          { "sTitle": "Engine",   "mDataProp": "engine" },
-		 *          { "sTitle": "Browser",  "mDataProp": "browser" },
-		 *          { "sTitle": "Platform", "mDataProp": "platform" },
-		 *          { "sTitle": "Version",  "mDataProp": "version" },
-		 *          { "sTitle": "Grade",    "mDataProp": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aaData": null,
-	
-	
-		/**
-		 * If sorting is enabled, then DataTables will perform a first pass sort on 
-		 * initialisation. You can define which column(s) the sort is performed upon, 
-		 * and the sorting direction, with this variable. The aaSorting array should 
-		 * contain an array for each column to be sorted initially containing the 
-		 * column's index and a direction string ('asc' or 'desc').
-		 *  @type array
-		 *  @default [[0,'asc']]
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    // Sort by 3rd column first, and then 4th column
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aaSorting": [[2,'asc'], [3,'desc']]
-		 *      } );
-		 *    } );
-		 *    
-		 *    // No initial sorting
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aaSorting": []
-		 *      } );
-		 *    } );
-		 */
-		"aaSorting": [[0,'asc']],
-	
-	
-		/**
-		 * This parameter is basically identical to the aaSorting parameter, but 
-		 * cannot be overridden by user interaction with the table. What this means 
-		 * is that you could have a column (visible or hidden) which the sorting will 
-		 * always be forced on first - any sorting after that (from the user) will 
-		 * then be performed as required. This can be useful for grouping rows 
-		 * together.
-		 *  @type array
-		 *  @default null
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aaSortingFixed": [[0,'asc']]
-		 *      } );
-		 *    } )
-		 */
-		"aaSortingFixed": null,
-	
-	
-		/**
-		 * This parameter allows you to readily specify the entries in the length drop
-		 * down menu that DataTables shows when pagination is enabled. It can be 
-		 * either a 1D array of options which will be used for both the displayed 
-		 * option and the value, or a 2D array which will use the array in the first 
-		 * position as the value, and the array in the second position as the 
-		 * displayed options (useful for language strings such as 'All').
-		 *  @type array
-		 *  @default [ 10, 25, 50, 100 ]
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
-		 *      } );
-		 *    } );
-		 *  
-		 *  @example
-		 *    // Setting the default display length as well as length menu
-		 *    // This is likely to be wanted if you remove the '10' option which
-		 *    // is the iDisplayLength default.
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "iDisplayLength": 25,
-		 *        "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]]
-		 *      } );
-		 *    } );
-		 */
-		"aLengthMenu": [ 10, 25, 50, 100 ],
-	
-	
-		/**
-		 * The aoColumns option in the initialisation parameter allows you to define
-		 * details about the way individual columns behave. For a full list of
-		 * column options that can be set, please see 
-		 * {@link DataTable.defaults.columns}. Note that if you use aoColumns to
-		 * define your columns, you must have an entry in the array for every single
-		 * column that you have in your table (these can be null if you don't which
-		 * to specify any options).
-		 *  @member
-		 */
-		"aoColumns": null,
-	
-		/**
-		 * Very similar to aoColumns, aoColumnDefs allows you to target a specific 
-		 * column, multiple columns, or all columns, using the aTargets property of 
-		 * each object in the array. This allows great flexibility when creating 
-		 * tables, as the aoColumnDefs arrays can be of any length, targeting the 
-		 * columns you specifically want. aoColumnDefs may use any of the column 
-		 * options available: {@link DataTable.defaults.columns}, but it _must_
-		 * have aTargets defined in each object in the array. Values in the aTargets
-		 * array may be:
-		 *   <ul>
-		 *     <li>a string - class name will be matched on the TH for the column</li>
-		 *     <li>0 or a positive integer - column index counting from the left</li>
-		 *     <li>a negative integer - column index counting from the right</li>
-		 *     <li>the string "_all" - all columns (i.e. assign a default)</li>
-		 *   </ul>
-		 *  @member
-		 */
-		"aoColumnDefs": null,
-	
-	
-		/**
-		 * Basically the same as oSearch, this parameter defines the individual column
-		 * filtering state at initialisation time. The array must be of the same size 
-		 * as the number of columns, and each element be an object with the parameters
-		 * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also
-		 * accepted and the default will be used.
-		 *  @type array
-		 *  @default []
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "aoSearchCols": [
-		 *          null,
-		 *          { "sSearch": "My filter" },
-		 *          null,
-		 *          { "sSearch": "^[0-9]", "bEscapeRegex": false }
-		 *        ]
-		 *      } );
-		 *    } )
-		 */
-		"aoSearchCols": [],
-	
-	
-		/**
-		 * An array of CSS classes that should be applied to displayed rows. This 
-		 * array may be of any length, and DataTables will apply each class 
-		 * sequentially, looping when required.
-		 *  @type array
-		 *  @default null <i>Will take the values determinted by the oClasses.sStripe*
-		 *    options</i>
-		 *  @dtopt Option
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ]
-		 *      } );
-		 *    } )
-		 */
-		"asStripeClasses": null,
-	
-	
-		/**
-		 * Enable or disable automatic column width calculation. This can be disabled
-		 * as an optimisation (it takes some time to calculate the widths) if the
-		 * tables widths are passed in using aoColumns.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bAutoWidth": false
-		 *      } );
-		 *    } );
-		 */
-		"bAutoWidth": true,
-	
-	
-		/**
-		 * Deferred rendering can provide DataTables with a huge speed boost when you
-		 * are using an Ajax or JS data source for the table. This option, when set to
-		 * true, will cause DataTables to defer the creation of the table elements for
-		 * each row until they are needed for a draw - saving a significant amount of
-		 * time.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/arrays.txt",
-		 *        "bDeferRender": true
-		 *      } );
-		 *    } );
-		 */
-		"bDeferRender": false,
-	
-	
-		/**
-		 * Replace a DataTable which matches the given selector and replace it with 
-		 * one which has the properties of the new initialisation object passed. If no
-		 * table matches the selector, then the new DataTable will be constructed as
-		 * per normal.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *      
-		 *      // Some time later....
-		 *      $('#example').dataTable( {
-		 *        "bFilter": false,
-		 *        "bDestroy": true
-		 *      } );
-		 *    } );
-		 */
-		"bDestroy": false,
-	
-	
-		/**
-		 * Enable or disable filtering of data. Filtering in DataTables is "smart" in
-		 * that it allows the end user to input multiple words (space separated) and
-		 * will match a row containing those words, even if not in the order that was
-		 * specified (this allow matching across multiple columns). Note that if you
-		 * wish to use filtering in DataTables this must remain 'true' - to remove the
-		 * default filtering input box and retain filtering abilities, please use
-		 * {@link DataTable.defaults.sDom}.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bFilter": false
-		 *      } );
-		 *    } );
-		 */
-		"bFilter": true,
-	
-	
-		/**
-		 * Enable or disable the table information display. This shows information 
-		 * about the data that is currently visible on the page, including information
-		 * about filtered data if that action is being performed.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bInfo": false
-		 *      } );
-		 *    } );
-		 */
-		"bInfo": true,
-	
-	
-		/**
-		 * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some
-		 * slightly different and additional mark-up from what DataTables has
-		 * traditionally used).
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "bJQueryUI": true
-		 *      } );
-		 *    } );
-		 */
-		"bJQueryUI": false,
-	
-	
-		/**
-		 * Allows the end user to select the size of a formatted page from a select
-		 * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate).
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bLengthChange": false
-		 *      } );
-		 *    } );
-		 */
-		"bLengthChange": true,
-	
-	
-		/**
-		 * Enable or disable pagination.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bPaginate": false
-		 *      } );
-		 *    } );
-		 */
-		"bPaginate": true,
-	
-	
-		/**
-		 * Enable or disable the display of a 'processing' indicator when the table is
-		 * being processed (e.g. a sort). This is particularly useful for tables with
-		 * large amounts of data where it can take a noticeable amount of time to sort
-		 * the entries.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bProcessing": true
-		 *      } );
-		 *    } );
-		 */
-		"bProcessing": false,
-	
-	
-		/**
-		 * Retrieve the DataTables object for the given selector. Note that if the
-		 * table has already been initialised, this parameter will cause DataTables
-		 * to simply return the object that has already been set up - it will not take
-		 * account of any changes you might have made to the initialisation object
-		 * passed to DataTables (setting this parameter to true is an acknowledgement
-		 * that you understand this). bDestroy can be used to reinitialise a table if
-		 * you need.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      initTable();
-		 *      tableActions();
-		 *    } );
-		 *    
-		 *    function initTable ()
-		 *    {
-		 *      return $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false,
-		 *        "bRetrieve": true
-		 *      } );
-		 *    }
-		 *    
-		 *    function tableActions ()
-		 *    {
-		 *      var oTable = initTable();
-		 *      // perform API operations with oTable 
-		 *    }
-		 */
-		"bRetrieve": false,
-	
-	
-		/**
-		 * Indicate if DataTables should be allowed to set the padding / margin
-		 * etc for the scrolling header elements or not. Typically you will want
-		 * this.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bScrollAutoCss": false,
-		 *        "sScrollY": "200px"
-		 *      } );
-		 *    } );
-		 */
-		"bScrollAutoCss": true,
-	
-	
-		/**
-		 * When vertical (y) scrolling is enabled, DataTables will force the height of
-		 * the table's viewport to the given height at all times (useful for layout).
-		 * However, this can look odd when filtering data down to a small data set,
-		 * and the footer is left "floating" further down. This parameter (when
-		 * enabled) will cause DataTables to collapse the table's viewport down when
-		 * the result set will fit within the given Y height.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollY": "200",
-		 *        "bScrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"bScrollCollapse": false,
-	
-	
-		/**
-		 * Enable infinite scrolling for DataTables (to be used in combination with
-		 * sScrollY). Infinite scrolling means that DataTables will continually load
-		 * data as a user scrolls through a table, which is very useful for large
-		 * dataset. This cannot be used with pagination, which is automatically
-		 * disabled. Note - the Scroller extra for DataTables is recommended in
-		 * in preference to this option.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bScrollInfinite": true,
-		 *        "bScrollCollapse": true,
-		 *        "sScrollY": "200px"
-		 *      } );
-		 *    } );
-		 */
-		"bScrollInfinite": false,
-	
-	
-		/**
-		 * Configure DataTables to use server-side processing. Note that the
-		 * sAjaxSource parameter must also be given in order to give DataTables a
-		 * source to obtain the required data for each draw.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "xhr.php"
-		 *      } );
-		 *    } );
-		 */
-		"bServerSide": false,
-	
-	
-		/**
-		 * Enable or disable sorting of columns. Sorting of individual columns can be
-		 * disabled by the "bSortable" option for each column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bSort": false
-		 *      } );
-		 *    } );
-		 */
-		"bSort": true,
-	
-	
-		/**
-		 * Allows control over whether DataTables should use the top (true) unique
-		 * cell that is found for a single column, or the bottom (false - default).
-		 * This is useful when using complex headers.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bSortCellsTop": true
-		 *      } );
-		 *    } );
-		 */
-		"bSortCellsTop": false,
-	
-	
-		/**
-		 * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and
-		 * 'sorting_3' to the columns which are currently being sorted on. This is
-		 * presented as a feature switch as it can increase processing time (while
-		 * classes are removed and added) so for large data sets you might want to
-		 * turn this off.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bSortClasses": false
-		 *      } );
-		 *    } );
-		 */
-		"bSortClasses": true,
-	
-	
-		/**
-		 * Enable or disable state saving. When enabled a cookie will be used to save
-		 * table display information such as pagination information, display length,
-		 * filtering and sorting. As such when the end user reloads the page the
-		 * display display will match what thy had previously set up.
-		 *  @type boolean
-		 *  @default false
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true
-		 *      } );
-		 *    } );
-		 */
-		"bStateSave": false,
-	
-	
-		/**
-		 * Customise the cookie and / or the parameters being stored when using
-		 * DataTables with state saving enabled. This function is called whenever
-		 * the cookie is modified, and it expects a fully formed cookie string to be
-		 * returned. Note that the data object passed in is a Javascript object which
-		 * must be converted to a string (JSON.stringify for example).
-		 *  @type function
-		 *  @param {string} sName Name of the cookie defined by DataTables
-		 *  @param {object} oData Data to be stored in the cookie
-		 *  @param {string} sExpires Cookie expires string
-		 *  @param {string} sPath Path of the cookie to set
-		 *  @returns {string} Cookie formatted string (which should be encoded by
-		 *    using encodeURIComponent())
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "fnCookieCallback": function (sName, oData, sExpires, sPath) {
-		 *          // Customise oData or sName or whatever else here
-		 *          return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath;
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnCookieCallback": null,
-	
-	
-		/**
-		 * This function is called when a TR element is created (and all TD child
-		 * elements have been inserted), or registered if using a DOM source, allowing
-		 * manipulation of the TR element (adding classes etc).
-		 *  @type function
-		 *  @param {node} nRow "TR" element for the current row
-		 *  @param {array} aData Raw data array for this row
-		 *  @param {int} iDataIndex The index of this row in aoData
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "fnCreatedRow": function( nRow, aData, iDataIndex ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( aData[4] == "A" )
-		 *          {
-		 *            $('td:eq(4)', nRow).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnCreatedRow": null,
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify any aspect you want about the created DOM.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnDrawCallback": function( oSettings ) {
-		 *          alert( 'DataTables has redrawn the table' );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnDrawCallback": null,
-	
-	
-		/**
-		 * Identical to fnHeaderCallback() but for the table footer this function
-		 * allows you to modify the table footer on every 'draw' even.
-		 *  @type function
-		 *  @param {node} nFoot "TR" element for the footer
-		 *  @param {array} aData Full table data (as derived from the original HTML)
-		 *  @param {int} iStart Index for the current display starting point in the 
-		 *    display array
-		 *  @param {int} iEnd Index for the current display ending point in the 
-		 *    display array
-		 *  @param {array int} aiDisplay Index array to translate the visual position
-		 *    to the full data array
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) {
-		 *          nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart;
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnFooterCallback": null,
-	
-	
-		/**
-		 * When rendering large numbers in the information element for the table
-		 * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
-		 * to have a comma separator for the 'thousands' units (e.g. 1 million is
-		 * rendered as "1,000,000") to help readability for the end user. This
-		 * function will override the default method DataTables uses.
-		 *  @type function
-		 *  @member
-		 *  @param {int} iIn number to be formatted
-		 *  @returns {string} formatted string for DataTables to show the number
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "fnFormatNumber": function ( iIn ) {
-		 *          if ( iIn &lt; 1000 ) {
-		 *            return iIn;
-		 *          } else {
-		 *            var 
-		 *              s=(iIn+""), 
-		 *              a=s.split(""), out="", 
-		 *              iLen=s.length;
-		 *            
-		 *            for ( var i=0 ; i&lt;iLen ; i++ ) {
-		 *              if ( i%3 === 0 &amp;&amp; i !== 0 ) {
-		 *                out = "'"+out;
-		 *              }
-		 *              out = a[iLen-i-1]+out;
-		 *            }
-		 *          }
-		 *          return out;
-		 *        };
-		 *      } );
-		 *    } );
-		 */
-		"fnFormatNumber": function ( iIn ) {
-			if ( iIn < 1000 )
-			{
-				// A small optimisation for what is likely to be the majority of use cases
-				return iIn;
-			}
-	
-			var s=(iIn+""), a=s.split(""), out="", iLen=s.length;
-			
-			for ( var i=0 ; i<iLen ; i++ )
-			{
-				if ( i%3 === 0 && i !== 0 )
-				{
-					out = this.oLanguage.sInfoThousands+out;
-				}
-				out = a[iLen-i-1]+out;
-			}
-			return out;
-		},
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify the header row. This can be used to calculate and
-		 * display useful information about the table.
-		 *  @type function
-		 *  @param {node} nHead "TR" element for the header
-		 *  @param {array} aData Full table data (as derived from the original HTML)
-		 *  @param {int} iStart Index for the current display starting point in the
-		 *    display array
-		 *  @param {int} iEnd Index for the current display ending point in the
-		 *    display array
-		 *  @param {array int} aiDisplay Index array to translate the visual position
-		 *    to the full data array
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) {
-		 *          nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnHeaderCallback": null,
-	
-	
-		/**
-		 * The information element can be used to convey information about the current
-		 * state of the table. Although the internationalisation options presented by
-		 * DataTables are quite capable of dealing with most customisations, there may
-		 * be times where you wish to customise the string further. This callback
-		 * allows you to do exactly that.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {int} iStart Starting position in data for the draw
-		 *  @param {int} iEnd End position in data for the draw
-		 *  @param {int} iMax Total number of rows in the table (regardless of
-		 *    filtering)
-		 *  @param {int} iTotal Total number of rows in the data set, after filtering
-		 *  @param {string} sPre The string that DataTables has formatted using it's
-		 *    own rules
-		 *  @returns {string} The string to be displayed in the information element.
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $('#example').dataTable( {
-		 *      "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) {
-		 *        return iStart +" to "+ iEnd;
-		 *      }
-		 *    } );
-		 */
-		"fnInfoCallback": null,
-	
-	
-		/**
-		 * Called when the table has been initialised. Normally DataTables will
-		 * initialise sequentially and there will be no need for this function,
-		 * however, this does not hold true when using external language information
-		 * since that is obtained using an async XHR call.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} json The JSON object request from the server - only
-		 *    present if client-side Ajax sourced data is used
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnInitComplete": function(oSettings, json) {
-		 *          alert( 'DataTables has finished its initialisation.' );
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnInitComplete": null,
-	
-	
-		/**
-		 * Called at the very start of each table draw and can be used to cancel the
-		 * draw by returning false, any other return (including undefined) results in
-		 * the full draw occurring).
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @returns {boolean} False will cancel the draw, anything else (including no
-		 *    return) will allow it to complete.
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fnPreDrawCallback": function( oSettings ) {
-		 *          if ( $('#test').val() == 1 ) {
-		 *            return false;
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnPreDrawCallback": null,
-	
-	
-		/**
-		 * This function allows you to 'post process' each row after it have been
-		 * generated for each table draw, but before it is rendered on screen. This
-		 * function might be used for setting the row class name etc.
-		 *  @type function
-		 *  @param {node} nRow "TR" element for the current row
-		 *  @param {array} aData Raw data array for this row
-		 *  @param {int} iDisplayIndex The display index for the current table draw
-		 *  @param {int} iDisplayIndexFull The index of the data in the full list of
-		 *    rows (after filtering)
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( aData[4] == "A" )
-		 *          {
-		 *            $('td:eq(4)', nRow).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnRowCallback": null,
-	
-	
-		/**
-		 * This parameter allows you to override the default function which obtains
-		 * the data from the server ($.getJSON) so something more suitable for your
-		 * application. For example you could use POST data, or pull information from
-		 * a Gears or AIR database.
-		 *  @type function
-		 *  @member
-		 *  @param {string} sSource HTTP source to obtain the data from (sAjaxSource)
-		 *  @param {array} aoData A key/value pair object containing the data to send
-		 *    to the server
-		 *  @param {function} fnCallback to be called on completion of the data get
-		 *    process that will draw the data on the page.
-		 *  @param {object} oSettings DataTables settings object
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    // POST data to server
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bProcessing": true,
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "xhr.php",
-		 *        "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
-		 *          oSettings.jqXHR = $.ajax( {
-		 *            "dataType": 'json', 
-		 *            "type": "POST", 
-		 *            "url": sSource, 
-		 *            "data": aoData, 
-		 *            "success": fnCallback
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) {
-			oSettings.jqXHR = $.ajax( {
-				"url":  sUrl,
-				"data": aoData,
-				"success": function (json) {
-					$(oSettings.oInstance).trigger('xhr', oSettings);
-					fnCallback( json );
-				},
-				"dataType": "json",
-				"cache": false,
-				"type": oSettings.sServerMethod,
-				"error": function (xhr, error, thrown) {
-					if ( error == "parsererror" ) {
-						oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+
-							"server could not be parsed. This is caused by a JSON formatting error." );
-					}
-				}
-			} );
-		},
-	
-	
-		/**
-		 * It is often useful to send extra data to the server when making an Ajax
-		 * request - for example custom filtering information, and this callback
-		 * function makes it trivial to send extra information to the server. The
-		 * passed in parameter is the data set that has been constructed by
-		 * DataTables, and you can add to this or modify it as you require.
-		 *  @type function
-		 *  @param {array} aoData Data array (array of objects which are name/value
-		 *    pairs) that has been constructed by DataTables and will be sent to the
-		 *    server. In the case of Ajax sourced data with server-side processing
-		 *    this will be an empty array, for server-side processing there will be a
-		 *    significant number of parameters!
-		 *  @returns {undefined} Ensure that you modify the aoData array passed in,
-		 *    as this is passed by reference.
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bProcessing": true,
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/server_processing.php",
-		 *        "fnServerParams": function ( aoData ) {
-		 *          aoData.push( { "name": "more_data", "value": "my_value" } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnServerParams": null,
-	
-	
-		/**
-		 * Load the table state. With this function you can define from where, and how, the
-		 * state of a table is loaded. By default DataTables will load from its state saving
-		 * cookie, but you might wish to use local storage (HTML5) or a server-side database.
-		 *  @type function
-		 *  @member
-		 *  @param {object} oSettings DataTables settings object
-		 *  @return {object} The DataTables state object to be loaded
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoad": function (oSettings) {
-		 *          var o;
-		 *          
-		 *          // Send an Ajax request to the server to get the data. Note that
-		 *          // this is a synchronous request.
-		 *          $.ajax( {
-		 *            "url": "/state_load",
-		 *            "async": false,
-		 *            "dataType": "json",
-		 *            "success": function (json) {
-		 *              o = json;
-		 *            }
-		 *          } );
-		 *          
-		 *          return o;
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoad": function ( oSettings ) {
-			var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance );
-			var oData;
-	
-			try {
-				oData = (typeof $.parseJSON === 'function') ? 
-					$.parseJSON(sData) : eval( '('+sData+')' );
-			} catch (e) {
-				oData = null;
-			}
-	
-			return oData;
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the saved state prior to loading that state.
-		 * This callback is called when the table is loading state from the stored data, but
-		 * prior to the settings object being modified by the saved state. Note that for 
-		 * plug-in authors, you should use the 'stateLoadParams' event to load parameters for 
-		 * a plug-in.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object that is to be loaded
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never loaded
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoadParams": function (oSettings, oData) {
-		 *          oData.oSearch.sSearch = "";
-		 *      } );
-		 *    } );
-		 * 
-		 *  @example
-		 *    // Disallow state loading by returning false
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoadParams": function (oSettings, oData) {
-		 *          return false;
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoadParams": null,
-	
-	
-		/**
-		 * Callback that is called when the state has been loaded from the state saving method
-		 * and the DataTables settings object has been modified as a result of the loaded state.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object that was loaded
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    // Show an alert with the filtering value that was saved
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateLoaded": function (oSettings, oData) {
-		 *          alert( 'Saved filter was: '+oData.oSearch.sSearch );
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoaded": null,
-	
-	
-		/**
-		 * Save the table state. This function allows you to define where and how the state
-		 * information for the table is stored - by default it will use a cookie, but you
-		 * might want to use local storage (HTML5) or a server-side database.
-		 *  @type function
-		 *  @member
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object to be saved
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateSave": function (oSettings, oData) {
-		 *          // Send an Ajax request to the server with the state object
-		 *          $.ajax( {
-		 *            "url": "/state_save",
-		 *            "data": oData,
-		 *            "dataType": "json",
-		 *            "method": "POST"
-		 *            "success": function () {}
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSave": function ( oSettings, oData ) {
-			this.oApi._fnCreateCookie( 
-				oSettings.sCookiePrefix+oSettings.sInstance, 
-				this.oApi._fnJsonString(oData), 
-				oSettings.iCookieDuration, 
-				oSettings.sCookiePrefix, 
-				oSettings.fnCookieCallback
-			);
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the state to be saved. Called when the table 
-		 * has changed state a new state save is required. This method allows modification of
-		 * the state saving object prior to actually doing the save, including addition or 
-		 * other state properties or modification. Note that for plug-in authors, you should 
-		 * use the 'stateSaveParams' event to save parameters for a plug-in.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {object} oData The state object to be saved
-		 *  @dtopt Callbacks
-		 * 
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never saved
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bStateSave": true,
-		 *        "fnStateSaveParams": function (oSettings, oData) {
-		 *          oData.oSearch.sSearch = "";
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSaveParams": null,
-	
-	
-		/**
-		 * Duration of the cookie which is used for storing session information. This
-		 * value is given in seconds.
-		 *  @type int
-		 *  @default 7200 <i>(2 hours)</i>
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "iCookieDuration": 60*60*24 // 1 day
-		 *      } );
-		 *    } )
-		 */
-		"iCookieDuration": 7200,
-	
-	
-		/**
-		 * When enabled DataTables will not make a request to the server for the first
-		 * page draw - rather it will use the data already on the page (no sorting etc
-		 * will be applied to it), thus saving on an XHR at load time. iDeferLoading
-		 * is used to indicate that deferred loading is required, but it is also used
-		 * to tell DataTables how many records there are in the full table (allowing
-		 * the information element and pagination to be displayed correctly). In the case
-		 * where a filtering is applied to the table on initial load, this can be
-		 * indicated by giving the parameter as an array, where the first element is
-		 * the number of records available after filtering and the second element is the
-		 * number of records without filtering (allowing the table information element
-		 * to be shown correctly).
-		 *  @type int | array
-		 *  @default null
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    // 57 records available in the table, no filtering applied
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/server_processing.php",
-		 *        "iDeferLoading": 57
-		 *      } );
-		 *    } );
-		 * 
-		 *  @example
-		 *    // 57 records after filtering, 100 without filtering (an initial filter applied)
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/server_processing.php",
-		 *        "iDeferLoading": [ 57, 100 ],
-		 *        "oSearch": {
-		 *          "sSearch": "my_filter"
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"iDeferLoading": null,
-	
-	
-		/**
-		 * Number of rows to display on a single page when using pagination. If
-		 * feature enabled (bLengthChange) then the end user will be able to override
-		 * this to a custom setting using a pop-up menu.
-		 *  @type int
-		 *  @default 10
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "iDisplayLength": 50
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayLength": 10,
-	
-	
-		/**
-		 * Define the starting point for data display when using DataTables with
-		 * pagination. Note that this parameter is the number of records, rather than
-		 * the page number, so if you have 10 records per page and want to start on
-		 * the third page, it should be "20".
-		 *  @type int
-		 *  @default 0
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "iDisplayStart": 20
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayStart": 0,
-	
-	
-		/**
-		 * The scroll gap is the amount of scrolling that is left to go before
-		 * DataTables will load the next 'page' of data automatically. You typically
-		 * want a gap which is big enough that the scrolling will be smooth for the
-		 * user, while not so large that it will load more data than need.
-		 *  @type int
-		 *  @default 100
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bScrollInfinite": true,
-		 *        "bScrollCollapse": true,
-		 *        "sScrollY": "200px",
-		 *        "iScrollLoadGap": 50
-		 *      } );
-		 *    } );
-		 */
-		"iScrollLoadGap": 100,
-	
-	
-		/**
-		 * By default DataTables allows keyboard navigation of the table (sorting, paging,
-		 * and filtering) by adding a tabindex attribute to the required elements. This
-		 * allows you to tab through the controls and press the enter key to activate them.
-		 * The tabindex is default 0, meaning that the tab follows the flow of the document.
-		 * You can overrule this using this parameter if you wish. Use a value of -1 to
-		 * disable built-in keyboard navigation.
-		 *  @type int
-		 *  @default 0
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "iTabIndex": 1
-		 *      } );
-		 *    } );
-		 */
-		"iTabIndex": 0,
-	
-	
-		/**
-		 * All strings that DataTables uses in the user interface that it creates
-		 * are defined in this object, allowing you to modified them individually or
-		 * completely replace them all as required.
-		 *  @namespace
-		 */
-		"oLanguage": {
-			/**
-			 * Strings that are used for WAI-ARIA labels and controls only (these are not
-			 * actually visible on the page, but will be read by screenreaders, and thus
-			 * must be internationalised as well).
-			 *  @namespace
-			 */
-			"oAria": {
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted ascending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oAria": {
-				 *            "sSortAscending": " - click/return to sort ascending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortAscending": ": activate to sort column ascending",
-	
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted descending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oAria": {
-				 *            "sSortDescending": " - click/return to sort descending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortDescending": ": activate to sort column descending"
-			},
-	
-			/**
-			 * Pagination string used by DataTables for the two built-in pagination
-			 * control types ("two_button" and "full_numbers")
-			 *  @namespace
-			 */
-			"oPaginate": {
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the first page.
-				 *  @type string
-				 *  @default First
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sFirst": "First page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sFirst": "First",
-			
-			
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the last page.
-				 *  @type string
-				 *  @default Last
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sLast": "Last page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sLast": "Last",
-			
-			
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the next page.
-				 *  @type string
-				 *  @default Next
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sNext": "Next page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sNext": "Next",
-			
-			
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the previous page.
-				 *  @type string
-				 *  @default Previous
-				 *  @dtopt Language
-				 * 
-				 *  @example
-				 *    $(document).ready(function() {
-				 *      $('#example').dataTable( {
-				 *        "oLanguage": {
-				 *          "oPaginate": {
-				 *            "sPrevious": "Previous page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sPrevious": "Previous"
-			},
-		
-			/**
-			 * This string is shown in preference to sZeroRecords when the table is
-			 * empty of data (regardless of filtering). Note that this is an optional
-			 * parameter - if it is not given, the value of sZeroRecords will be used
-			 * instead (either the default or given value).
-			 *  @type string
-			 *  @default No data available in table
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sEmptyTable": "No data available in table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sEmptyTable": "No data available in table",
-		
-		
-			/**
-			 * This string gives information to the end user about the information that 
-			 * is current on display on the page. The _START_, _END_ and _TOTAL_ 
-			 * variables are all dynamically replaced as the table display updates, and 
-			 * can be freely moved or removed as the language requirements change.
-			 *  @type string
-			 *  @default Showing _START_ to _END_ of _TOTAL_ entries
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
-		
-		
-			/**
-			 * Display information string for when the table is empty. Typically the 
-			 * format of this string should match sInfo.
-			 *  @type string
-			 *  @default Showing 0 to 0 of 0 entries
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoEmpty": "No entries to show"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoEmpty": "Showing 0 to 0 of 0 entries",
-		
-		
-			/**
-			 * When a user filters the information in a table, this string is appended 
-			 * to the information (sInfo) to give an idea of how strong the filtering 
-			 * is. The variable _MAX_ is dynamically updated.
-			 *  @type string
-			 *  @default (filtered from _MAX_ total entries)
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoFiltered": " - filtering from _MAX_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoFiltered": "(filtered from _MAX_ total entries)",
-		
-		
-			/**
-			 * If can be useful to append extra information to the info string at times,
-			 * and this variable does exactly that. This information will be appended to
-			 * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are
-			 * being used) at all times.
-			 *  @type string
-			 *  @default <i>Empty string</i>
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoPostFix": "All records shown are derived from real information."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoPostFix": "",
-		
-		
-			/**
-			 * DataTables has a build in number formatter (fnFormatNumber) which is used
-			 * to format large numbers that are used in the table information. By
-			 * default a comma is used, but this can be trivially changed to any
-			 * character you wish with this parameter.
-			 *  @type string
-			 *  @default ,
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sInfoThousands": "'"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoThousands": ",",
-		
-		
-			/**
-			 * Detail the action that will be taken when the drop down menu for the
-			 * pagination length option is changed. The '_MENU_' variable is replaced
-			 * with a default select list of 10, 25, 50 and 100, and can be replaced
-			 * with a custom select box if required.
-			 *  @type string
-			 *  @default Show _MENU_ entries
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    // Language change only
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sLengthMenu": "Display _MENU_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 *    
-			 *  @example
-			 *    // Language and options change
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sLengthMenu": 'Display <select>'+
-			 *            '<option value="10">10</option>'+
-			 *            '<option value="20">20</option>'+
-			 *            '<option value="30">30</option>'+
-			 *            '<option value="40">40</option>'+
-			 *            '<option value="50">50</option>'+
-			 *            '<option value="-1">All</option>'+
-			 *            '</select> records'
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLengthMenu": "Show _MENU_ entries",
-		
-		
-			/**
-			 * When using Ajax sourced data and during the first draw when DataTables is
-			 * gathering the data, this message is shown in an empty row in the table to
-			 * indicate to the end user the the data is being loaded. Note that this
-			 * parameter is not used when loading data by server-side processing, just
-			 * Ajax sourced data with client-side processing.
-			 *  @type string
-			 *  @default Loading...
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sLoadingRecords": "Please wait - loading..."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLoadingRecords": "Loading...",
-		
-		
-			/**
-			 * Text which is displayed when the table is processing a user action
-			 * (usually a sort command or similar).
-			 *  @type string
-			 *  @default Processing...
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sProcessing": "DataTables is currently busy"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sProcessing": "Processing...",
-		
-		
-			/**
-			 * Details the actions that will be taken when the user types into the
-			 * filtering input text box. The variable "_INPUT_", if used in the string,
-			 * is replaced with the HTML text box for the filtering input allowing
-			 * control over where it appears in the string. If "_INPUT_" is not given
-			 * then the input box is appended to the string automatically.
-			 *  @type string
-			 *  @default Search:
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    // Input text box will be appended at the end automatically
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sSearch": "Filter records:"
-			 *        }
-			 *      } );
-			 *    } );
-			 *    
-			 *  @example
-			 *    // Specify where the filter should appear
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sSearch": "Apply filter _INPUT_ to table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sSearch": "Search:",
-		
-		
-			/**
-			 * All of the language information can be stored in a file on the
-			 * server-side, which DataTables will look up if this parameter is passed.
-			 * It must store the URL of the language file, which is in a JSON format,
-			 * and the object has the same properties as the oLanguage object in the
-			 * initialiser object (i.e. the above parameters). Please refer to one of
-			 * the example language files to see how this works in action.
-			 *  @type string
-			 *  @default <i>Empty string - i.e. disabled</i>
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sUrl": "",
-		
-		
-			/**
-			 * Text shown inside the table records when the is no information to be
-			 * displayed after filtering. sEmptyTable is shown when there is simply no
-			 * information in the table at all (regardless of filtering).
-			 *  @type string
-			 *  @default No matching records found
-			 *  @dtopt Language
-			 * 
-			 *  @example
-			 *    $(document).ready(function() {
-			 *      $('#example').dataTable( {
-			 *        "oLanguage": {
-			 *          "sZeroRecords": "No records to display"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sZeroRecords": "No matching records found"
-		},
-	
-	
-		/**
-		 * This parameter allows you to have define the global filtering state at
-		 * initialisation time. As an object the "sSearch" parameter must be
-		 * defined, but all other parameters are optional. When "bRegex" is true,
-		 * the search string will be treated as a regular expression, when false
-		 * (default) it will be treated as a straight string. When "bSmart"
-		 * DataTables will use it's smart filtering methods (to word match at
-		 * any point in the data), when false this will not be done.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "oSearch": {"sSearch": "Initial search"}
-		 *      } );
-		 *    } )
-		 */
-		"oSearch": $.extend( {}, DataTable.models.oSearch ),
-	
-	
-		/**
-		 * By default DataTables will look for the property 'aaData' when obtaining
-		 * data from an Ajax source or for server-side processing - this parameter
-		 * allows that property to be changed. You can use Javascript dotted object
-		 * notation to get a data source for multiple levels of nesting.
-		 *  @type string
-		 *  @default aaData
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    // Get data from { "data": [...] }
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/data.txt",
-		 *        "sAjaxDataProp": "data"
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Get data from { "data": { "inner": [...] } }
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/data.txt",
-		 *        "sAjaxDataProp": "data.inner"
-		 *      } );
-		 *    } );
-		 */
-		"sAjaxDataProp": "aaData",
-	
-	
-		/**
-		 * You can instruct DataTables to load data from an external source using this
-		 * parameter (use aData if you want to pass data in you already have). Simply
-		 * provide a url a JSON object can be obtained from. This object must include
-		 * the parameter 'aaData' which is the data source for the table.
-		 *  @type string
-		 *  @default null
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php"
-		 *      } );
-		 *    } )
-		 */
-		"sAjaxSource": null,
-	
-	
-		/**
-		 * This parameter can be used to override the default prefix that DataTables
-		 * assigns to a cookie when state saving is enabled.
-		 *  @type string
-		 *  @default SpryMedia_DataTables_
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sCookiePrefix": "my_datatable_",
-		 *      } );
-		 *    } );
-		 */
-		"sCookiePrefix": "SpryMedia_DataTables_",
-	
-	
-		/**
-		 * This initialisation variable allows you to specify exactly where in the
-		 * DOM you want DataTables to inject the various controls it adds to the page
-		 * (for example you might want the pagination controls at the top of the
-		 * table). DIV elements (with or without a custom class) can also be added to
-		 * aid styling. The follow syntax is used:
-		 *   <ul>
-		 *     <li>The following options are allowed:	
-		 *       <ul>
-		 *         <li>'l' - Length changing</li
-		 *         <li>'f' - Filtering input</li>
-		 *         <li>'t' - The table!</li>
-		 *         <li>'i' - Information</li>
-		 *         <li>'p' - Pagination</li>
-		 *         <li>'r' - pRocessing</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following constants are allowed:
-		 *       <ul>
-		 *         <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
-		 *         <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following syntax is expected:
-		 *       <ul>
-		 *         <li>'&lt;' and '&gt;' - div elements</li>
-		 *         <li>'&lt;"class" and '&gt;' - div with a class</li>
-		 *         <li>'&lt;"#id" and '&gt;' - div with an ID</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>Examples:
-		 *       <ul>
-		 *         <li>'&lt;"wrapper"flipt&gt;'</li>
-		 *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
-		 *       </ul>
-		 *     </li>
-		 *   </ul>
-		 *  @type string
-		 *  @default lfrtip <i>(when bJQueryUI is false)</i> <b>or</b> 
-		 *    <"H"lfr>t<"F"ip> <i>(when bJQueryUI is true)</i>
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sDom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
-		 *      } );
-		 *    } );
-		 */
-		"sDom": "lfrtip",
-	
-	
-		/**
-		 * DataTables features two different built-in pagination interaction methods
-		 * ('two_button' or 'full_numbers') which present different page controls to
-		 * the end user. Further methods can be added using the API (see below).
-		 *  @type string
-		 *  @default two_button
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "sPaginationType": "full_numbers"
-		 *      } );
-		 *    } )
-		 */
-		"sPaginationType": "two_button",
-	
-	
-		/**
-		 * Enable horizontal scrolling. When a table is too wide to fit into a certain
-		 * layout, or you have a large number of columns in the table, you can enable
-		 * x-scrolling to show the table in a viewport, which can be scrolled. This
-		 * property can be any CSS unit, or a number (in which case it will be treated
-		 * as a pixel measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollX": "100%",
-		 *        "bScrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"sScrollX": "",
-	
-	
-		/**
-		 * This property can be used to force a DataTable to use more width than it
-		 * might otherwise do when x-scrolling is enabled. For example if you have a
-		 * table which requires to be well spaced, this parameter is useful for
-		 * "over-sizing" the table, and thus forcing scrolling. This property can by
-		 * any CSS unit, or a number (in which case it will be treated as a pixel
-		 * measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *  @dtopt Options
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollX": "100%",
-		 *        "sScrollXInner": "110%"
-		 *      } );
-		 *    } );
-		 */
-		"sScrollXInner": "",
-	
-	
-		/**
-		 * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
-		 * to the given height, and enable scrolling for any data which overflows the
-		 * current viewport. This can be used as an alternative to paging to display
-		 * a lot of data in a small area (although paging and scrolling can both be
-		 * enabled at the same time). This property can be any CSS unit, or a number
-		 * (in which case it will be treated as a pixel measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *  @dtopt Features
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *    } );
-		 */
-		"sScrollY": "",
-	
-	
-		/**
-		 * Set the HTTP method that is used to make the Ajax call for server-side
-		 * processing or Ajax sourced data.
-		 *  @type string
-		 *  @default GET
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "bServerSide": true,
-		 *        "sAjaxSource": "scripts/post.php",
-		 *        "sServerMethod": "POST"
-		 *      } );
-		 *    } );
-		 */
-		"sServerMethod": "GET"
-	};
-	
-	
-	
-	/**
-	 * Column options that can be given to DataTables at initialisation time.
-	 *  @namespace
-	 */
-	DataTable.defaults.columns = {
-		/**
-		 * Allows a column's sorting to take multiple columns into account when 
-		 * doing a sort. For example first name / last name columns make sense to 
-		 * do a multi-column sort over the two columns.
-		 *  @type array
-		 *  @default null <i>Takes the value of the column index automatically</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *          { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
-		 *          { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
-		 *          { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [
-		 *          { "aDataSort": [ 0, 1 ] },
-		 *          { "aDataSort": [ 1, 0 ] },
-		 *          { "aDataSort": [ 2, 3, 4 ] },
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aDataSort": null,
-	
-	
-		/**
-		 * You can control the default sorting direction, and even alter the behaviour
-		 * of the sort handler (i.e. only allow ascending sorting etc) using this
-		 * parameter.
-		 *  @type array
-		 *  @default [ 'asc', 'desc' ]
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *          { "asSorting": [ "asc" ], "aTargets": [ 1 ] },
-		 *          { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] },
-		 *          { "asSorting": [ "desc" ], "aTargets": [ 3 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [
-		 *          null,
-		 *          { "asSorting": [ "asc" ] },
-		 *          { "asSorting": [ "desc", "asc", "asc" ] },
-		 *          { "asSorting": [ "desc" ] },
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"asSorting": [ 'asc', 'desc' ],
-	
-	
-		/**
-		 * Enable or disable filtering on the data in this column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "bSearchable": false, "aTargets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "bSearchable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSearchable": true,
-	
-	
-		/**
-		 * Enable or disable sorting on this column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "bSortable": false, "aTargets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "bSortable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSortable": true,
-	
-	
-		/**
-		 * When using fnRender() for a column, you may wish to use the original data
-		 * (before rendering) for sorting and filtering (the default is to used the
-		 * rendered data that the user can see). This may be useful for dates etc.
-		 * 
-		 * *NOTE* It is it is advisable now to use mDataProp as a function and make 
-		 * use of the 'type' that it gives, allowing (potentially) different data to
-		 * be used for sorting, filtering, display and type detection.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          {
-		 *            "fnRender": function ( oObj ) {
-		 *              return oObj.aData[0] +' '+ oObj.aData[3];
-		 *            },
-		 *            "bUseRendered": false,
-		 *            "aTargets": [ 0 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          {
-		 *            "fnRender": function ( oObj ) {
-		 *              return oObj.aData[0] +' '+ oObj.aData[3];
-		 *            },
-		 *            "bUseRendered": false
-		 *          },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"bUseRendered": true,
-	
-	
-		/**
-		 * Enable or disable the display of this column.
-		 *  @type boolean
-		 *  @default true
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "bVisible": false, "aTargets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "bVisible": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bVisible": true,
-		
-		
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to fnRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available (since it is not when fnRender is called).
-		 *  @type function
-		 *  @param {element} nTd The TD node that has been created
-		 *  @param {*} sData The Data for the cell
-		 *  @param {array|object} oData The data for the whole row
-		 *  @param {int} iRow The row index for the aoData data store
-		 *  @param {int} iCol The column index for aoColumns
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ {
-		 *          "aTargets": [3],
-		 *          "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
-		 *            if ( sData == "1.7" ) {
-		 *              $(nTd).css('color', 'blue')
-		 *            }
-		 *          }
-		 *        } ]
-		 *      });
-		 *    } );
-		 */
-		"fnCreatedCell": null,
-	
-	
-		/**
-		 * Custom display function that will be called for the display of each cell in
-		 * this column.
-		 *  @type function
-		 *  @param {object} o Object with the following parameters:
-		 *  @param {int}    o.iDataRow The row in aoData
-		 *  @param {int}    o.iDataColumn The column in question
-		 *  @param {array}  o.aData The data for the row in question
-		 *  @param {object} o.oSettings The settings object for this DataTables instance
-		 *  @param {object} o.mDataProp The data property used for this column
-		 *  @param {*}      val The current cell value
-		 *  @returns {string} The string you which to use in the display
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          {
-		 *            "fnRender": function ( o, val ) {
-		 *              return o.aData[0] +' '+ o.aData[3];
-		 *            },
-		 *            "aTargets": [ 0 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "fnRender": function ( o, val ) {
-		 *            return o.aData[0] +' '+ o.aData[3];
-		 *          } },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"fnRender": null,
-	
-	
-		/**
-		 * The column index (starting from 0!) that you wish a sort to be performed
-		 * upon when this column is selected for sorting. This can be used for sorting
-		 * on hidden columns for example.
-		 *  @type int
-		 *  @default -1 <i>Use automatically calculated column index</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "iDataSort": 1, "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "iDataSort": 1 },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"iDataSort": -1,
-	
-	
-		/**
-		 * This property can be used to read data from any JSON data source property,
-		 * including deeply nested objects / properties. mDataProp can be given in a
-		 * number of different ways which effect its behaviour:
-		 *   <ul>
-		 *     <li>integer - treated as an array index for the data source. This is the
-		 *       default that DataTables uses (incrementally increased for each column).</li>
-		 *     <li>string - read an object property from the data source. Note that you can
-		 *       use Javascript dotted notation to read deep properties/arrays from the
-		 *       data source.</li>
-		 *     <li>null - the sDefaultContent option will be used for the cell (null
-		 *       by default, so you will need to specify the default content you want -
-		 *       typically an empty string). This can be useful on generated columns such 
-		 *       as edit / delete action columns.</li>
-		 *     <li>function - the function given will be executed whenever DataTables 
-		 *       needs to set or get the data for a cell in the column. The function 
-		 *       takes three parameters:
-		 *       <ul>
-		 *         <li>{array|object} The data source for the row</li>
-		 *         <li>{string} The type call data requested - this will be 'set' when
-		 *           setting data or 'filter', 'display', 'type', 'sort' or undefined when 
-		 *           gathering data. Note that when <i>undefined</i> is given for the type
-		 *           DataTables expects to get the raw data for the object back</li>
-		 *         <li>{*} Data to set when the second parameter is 'set'.</li>
-		 *       </ul>
-		 *       The return value from the function is not required when 'set' is the type
-		 *       of call, but otherwise the return is what will be used for the data
-		 *       requested.</li>
-		 *    </ul>
-		 *  @type string|int|function|null
-		 *  @default null <i>Use automatically calculated column index</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Read table data from objects
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sAjaxSource": "sources/deep.txt",
-		 *        "aoColumns": [
-		 *          { "mDataProp": "engine" },
-		 *          { "mDataProp": "browser" },
-		 *          { "mDataProp": "platform.inner" },
-		 *          { "mDataProp": "platform.details.0" },
-		 *          { "mDataProp": "platform.details.1" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 * 
-		 *  @example
-		 *    // Using mDataProp as a function to provide different information for
-		 *    // sorting, filtering and display. In this case, currency (price)
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *        {
-		 *          "aTargets": [ 0 ],
-		 *          "mDataProp": function ( source, type, val ) {
-		 *            if (type === 'set') {
-		 *              source.price = val;
-		 *              // Store the computed dislay and filter values for efficiency
-		 *              source.price_display = val=="" ? "" : "$"+numberFormat(val);
-		 *              source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
-		 *              return;
-		 *            }
-		 *            else if (type === 'display') {
-		 *              return source.price_display;
-		 *            }
-		 *            else if (type === 'filter') {
-		 *              return source.price_filter;
-		 *            }
-		 *            // 'sort', 'type' and undefined all just use the integer
-		 *            return source.price;
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"mDataProp": null,
-	
-	
-		/**
-		 * Change the cell type created for the column - either TD cells or TH cells. This
-		 * can be useful as TH cells have semantic meaning in the table body, allowing them
-		 * to act as a header for a row (you may wish to add scope='row' to the TH elements).
-		 *  @type string
-		 *  @default td
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Make the first column use TH cells
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *        {
-		 *          "aTargets": [ 0 ],
-		 *          "sCellType": "th"
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sCellType": "td",
-	
-	
-		/**
-		 * Class to give to each cell in this column.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sClass": "my_class", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sClass": "my_class" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sClass": "",
-		
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer 
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 * Generally you shouldn't need this, and it is not documented on the 
-		 * general DataTables.net documentation
-		 *  @type string
-		 *  @default <i>Empty string<i>
-		 *  @dtopt Columns
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "sContentPadding": "mmm"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sContentPadding": "",
-	
-	
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because mDataProp
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          {
-		 *            "mDataProp": null,
-		 *            "sDefaultContent": "Edit",
-		 *            "aTargets": [ -1 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "mDataProp": null,
-		 *            "sDefaultContent": "Edit"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sDefaultContent": null,
-	
-	
-		/**
-		 * This parameter is only used in DataTables' server-side processing. It can
-		 * be exceptionally useful to know what columns are being displayed on the
-		 * client side, and to map these to database fields. When defined, the names
-		 * also allow DataTables to reorder information from the server if it comes
-		 * back in an unexpected order (i.e. if you switch your columns around on the
-		 * client-side, your server-side code does not also need updating).
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sName": "engine", "aTargets": [ 0 ] },
-		 *          { "sName": "browser", "aTargets": [ 1 ] },
-		 *          { "sName": "platform", "aTargets": [ 2 ] },
-		 *          { "sName": "version", "aTargets": [ 3 ] },
-		 *          { "sName": "grade", "aTargets": [ 4 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sName": "engine" },
-		 *          { "sName": "browser" },
-		 *          { "sName": "platform" },
-		 *          { "sName": "version" },
-		 *          { "sName": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sName": "",
-	
-	
-		/**
-		 * Defines a data source type for the sorting which can be used to read
-		 * realtime information from the table (updating the internally cached
-		 * version) prior to sorting. This allows sorting to occur on user editable
-		 * elements such as form inputs.
-		 *  @type string
-		 *  @default std
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [
-		 *          { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] },
-		 *          { "sType": "numeric", "aTargets": [ 3 ] },
-		 *          { "sSortDataType": "dom-select", "aTargets": [ 4 ] },
-		 *          { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [
-		 *          null,
-		 *          null,
-		 *          { "sSortDataType": "dom-text" },
-		 *          { "sSortDataType": "dom-text", "sType": "numeric" },
-		 *          { "sSortDataType": "dom-select" },
-		 *          { "sSortDataType": "dom-checkbox" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sSortDataType": "std",
-	
-	
-		/**
-		 * The title of this column.
-		 *  @type string
-		 *  @default null <i>Derived from the 'TH' value for this column in the 
-		 *    original HTML table.</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sTitle": "My column title", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sTitle": "My column title" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sTitle": null,
-	
-	
-		/**
-		 * The type allows you to specify how the data for this column will be sorted.
-		 * Four types (string, numeric, date and html (which will strip HTML tags
-		 * before sorting)) are currently available. Note that only date formats
-		 * understood by Javascript's Date() object will be accepted as type date. For
-		 * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric',
-		 * 'date' or 'html' (by default). Further types can be adding through
-		 * plug-ins.
-		 *  @type string
-		 *  @default null <i>Auto-detected from raw data</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sType": "html", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sType": "html" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sType": null,
-	
-	
-		/**
-		 * Defining the width of the column, this parameter may take any CSS value
-		 * (3em, 20px etc). DataTables applys 'smart' widths to columns which have not
-		 * been given a specific width through this interface ensuring that the table
-		 * remains readable.
-		 *  @type string
-		 *  @default null <i>Automatic</i>
-		 *  @dtopt Columns
-		 * 
-		 *  @example
-		 *    // Using aoColumnDefs
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumnDefs": [ 
-		 *          { "sWidth": "20%", "aTargets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *    
-		 *  @example
-		 *    // Using aoColumns
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable( {
-		 *        "aoColumns": [ 
-		 *          { "sWidth": "20%" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sWidth": null
-	};
-	
-	
-	
-	/**
-	 * DataTables settings object - this holds all the information needed for a
-	 * given table, including configuration, data and current application of the
-	 * table options. DataTables does not have a single instance for each DataTable
-	 * with the settings attached to that instance, but rather instances of the
-	 * DataTable "class" are created on-the-fly as needed (typically by a 
-	 * $().dataTable() call) and the settings object is then applied to that
-	 * instance.
-	 * 
-	 * Note that this object is related to {@link DataTable.defaults} but this 
-	 * one is the internal data store for DataTables's cache of columns. It should
-	 * NOT be manipulated outside of DataTables. Any configuration should be done
-	 * through the initialisation options.
-	 *  @namespace
-	 *  @todo Really should attach the settings object to individual instances so we
-	 *    don't need to create new instances on each $().dataTable() call (if the
-	 *    table already exists). It would also save passing oSettings around and
-	 *    into every single function. However, this is a very significant 
-	 *    architecture change for DataTables and will almost certainly break
-	 *    backwards compatibility with older installations. This is something that
-	 *    will be done in 2.0.
-	 */
-	DataTable.models.oSettings = {
-		/**
-		 * Primary features of DataTables and their enablement state.
-		 *  @namespace
-		 */
-		"oFeatures": {
-			
-			/**
-			 * Flag to say if DataTables should automatically try to calculate the
-			 * optimum table and columns widths (true) or not (false).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bAutoWidth": null,
-	
-			/**
-			 * Delay the creation of TR and TD elements until they are actually
-			 * needed by a driven page draw. This can give a significant speed
-			 * increase for Ajax source and Javascript source data, but makes no
-			 * difference at all fro DOM and server-side processing tables.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bDeferRender": null,
-			
-			/**
-			 * Enable filtering on the table or not. Note that if this is disabled
-			 * then there is no filtering at all on the table, including fnFilter.
-			 * To just remove the filtering input use sDom and remove the 'f' option.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bFilter": null,
-			
-			/**
-			 * Table information element (the 'Showing x of y records' div) enable
-			 * flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bInfo": null,
-			
-			/**
-			 * Present a user control allowing the end user to change the page size
-			 * when pagination is enabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bLengthChange": null,
-	
-			/**
-			 * Pagination enabled or not. Note that if this is disabled then length
-			 * changing must also be disabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bPaginate": null,
-			
-			/**
-			 * Processing indicator enable flag whenever DataTables is enacting a
-			 * user request - typically an Ajax request for server-side processing.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bProcessing": null,
-			
-			/**
-			 * Server-side processing enabled flag - when enabled DataTables will
-			 * get all data from the server for every draw - there is no filtering,
-			 * sorting or paging done on the client-side.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bServerSide": null,
-			
-			/**
-			 * Sorting enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSort": null,
-			
-			/**
-			 * Apply a class to the columns which are being sorted to provide a
-			 * visual highlight or not. This can slow things down when enabled since
-			 * there is a lot of DOM interaction.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSortClasses": null,
-			
-			/**
-			 * State saving enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bStateSave": null
-		},
-		
-	
-		/**
-		 * Scrolling settings for a table.
-		 *  @namespace
-		 */
-		"oScroll": {
-			/**
-			 * Indicate if DataTables should be allowed to set the padding / margin
-			 * etc for the scrolling header elements or not. Typically you will want
-			 * this.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bAutoCss": null,
-			
-			/**
-			 * When the table is shorter in height than sScrollY, collapse the
-			 * table container down to the height of the table (when true).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bCollapse": null,
-			
-			/**
-			 * Infinite scrolling enablement flag. Now deprecated in favour of
-			 * using the Scroller plug-in.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bInfinite": null,
-			
-			/**
-			 * Width of the scrollbar for the web-browser's platform. Calculated
-			 * during table initialisation.
-			 *  @type int
-			 *  @default 0
-			 */
-			"iBarWidth": 0,
-			
-			/**
-			 * Space (in pixels) between the bottom of the scrolling container and 
-			 * the bottom of the scrolling viewport before the next page is loaded
-			 * when using infinite scrolling.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type int
-			 */
-			"iLoadGap": null,
-			
-			/**
-			 * Viewport width for horizontal scrolling. Horizontal scrolling is 
-			 * disabled if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sX": null,
-			
-			/**
-			 * Width to expand the table to when using x-scrolling. Typically you
-			 * should not need to use this.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 *  @deprecated
-			 */
-			"sXInner": null,
-			
-			/**
-			 * Viewport height for vertical scrolling. Vertical scrolling is disabled
-			 * if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sY": null
-		},
-		
-		/**
-		 * Language information for the table.
-		 *  @namespace
-		 *  @extends DataTable.defaults.oLanguage
-		 */
-		"oLanguage": {
-			/**
-			 * Information callback function. See 
-			 * {@link DataTable.defaults.fnInfoCallback}
-			 *  @type function
-			 *  @default 
-			 */
-			"fnInfoCallback": null
-		},
-		
-		/**
-		 * Array referencing the nodes which are used for the features. The 
-		 * parameters of this object match what is allowed by sDom - i.e.
-		 *   <ul>
-		 *     <li>'l' - Length changing</li>
-		 *     <li>'f' - Filtering input</li>
-		 *     <li>'t' - The table!</li>
-		 *     <li>'i' - Information</li>
-		 *     <li>'p' - Pagination</li>
-		 *     <li>'r' - pRocessing</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aanFeatures": [],
-		
-		/**
-		 * Store data information - see {@link DataTable.models.oRow} for detailed
-		 * information.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoData": [],
-		
-		/**
-		 * Array of indexes which are in the current display (after filtering etc)
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplay": [],
-		
-		/**
-		 * Array of indexes for display - no filtering
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplayMaster": [],
-		
-		/**
-		 * Store information about each column that is in use
-		 *  @type array
-		 *  @default []
-		 */
-		"aoColumns": [],
-		
-		/**
-		 * Store information about the table's header
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeader": [],
-		
-		/**
-		 * Store information about the table's footer
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooter": [],
-		
-		/**
-		 * Search data array for regular expression searching
-		 *  @type array
-		 *  @default []
-		 */
-		"asDataSearch": [],
-		
-		/**
-		 * Store the applied global search information in case we want to force a 
-		 * research or compare the old search to a new one.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 */
-		"oPreviousSearch": {},
-		
-		/**
-		 * Store the applied search for each column - see 
-		 * {@link DataTable.models.oSearch} for the format that is used for the
-		 * filtering information for each column.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreSearchCols": [],
-		
-		/**
-		 * Sorting that is applied to the table. Note that the inner arrays are
-		 * used in the following manner:
-		 * <ul>
-		 *   <li>Index 0 - column number</li>
-		 *   <li>Index 1 - current sorting direction</li>
-		 *   <li>Index 2 - index of asSorting for this column</li>
-		 * </ul>
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @todo These inner arrays should really be objects
-		 */
-		"aaSorting": null,
-		
-		/**
-		 * Sorting that is always applied to the table (i.e. prefixed in front of
-		 * aaSorting).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array|null
-		 *  @default null
-		 */
-		"aaSortingFixed": null,
-		
-		/**
-		 * Classes to use for the striping of a table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"asStripeClasses": null,
-		
-		/**
-		 * If restoring a table - we should restore its striping classes as well
-		 *  @type array
-		 *  @default []
-		 */
-		"asDestroyStripes": [],
-		
-		/**
-		 * If restoring a table - we should restore its width 
-		 *  @type int
-		 *  @default 0
-		 */
-		"sDestroyWidth": 0,
-		
-		/**
-		 * Callback functions array for every time a row is inserted (i.e. on a draw).
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCallback": [],
-		
-		/**
-		 * Callback functions for the header on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeaderCallback": [],
-		
-		/**
-		 * Callback function for the footer on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooterCallback": [],
-		
-		/**
-		 * Array of callback functions for draw callback functions
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDrawCallback": [],
-		
-		/**
-		 * Array of callback functions for row created function
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCreatedCallback": [],
-		
-		/**
-		 * Callback functions for just before the table is redrawn. A return of 
-		 * false will be used to cancel the draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreDrawCallback": [],
-		
-		/**
-		 * Callback functions for when the table has been initialised.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoInitComplete": [],
-	
-		
-		/**
-		 * Callbacks for modifying the settings to be stored for state saving, prior to
-		 * saving state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSaveParams": [],
-		
-		/**
-		 * Callbacks for modifying the settings that have been stored for state saving
-		 * prior to using the stored values to restore the state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoadParams": [],
-		
-		/**
-		 * Callbacks for operating on the settings object once the saved state has been
-		 * loaded
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoaded": [],
-		
-		/**
-		 * Cache the table ID for quick access
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sTableId": "",
-		
-		/**
-		 * The TABLE node for the main table
-		 *  @type node
-		 *  @default null
-		 */
-		"nTable": null,
-		
-		/**
-		 * Permanent ref to the thead element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTHead": null,
-		
-		/**
-		 * Permanent ref to the tfoot element - if it exists
-		 *  @type node
-		 *  @default null
-		 */
-		"nTFoot": null,
-		
-		/**
-		 * Permanent ref to the tbody element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTBody": null,
-		
-		/**
-		 * Cache the wrapper node (contains all DataTables controlled elements)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTableWrapper": null,
-		
-		/**
-		 * Indicate if when using server-side processing the loading of data 
-		 * should be deferred until the second draw.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDeferLoading": false,
-		
-		/**
-		 * Indicate if all required information has been read in
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bInitialised": false,
-		
-		/**
-		 * Information about open rows. Each object in the array has the parameters
-		 * 'nTr' and 'nParent'
-		 *  @type array
-		 *  @default []
-		 */
-		"aoOpenRows": [],
-		
-		/**
-		 * Dictate the positioning of DataTables' control elements - see
-		 * {@link DataTable.model.oInit.sDom}.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sDom": null,
-		
-		/**
-		 * Which type of pagination should be used.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string 
-		 *  @default two_button
-		 */
-		"sPaginationType": "two_button",
-		
-		/**
-		 * The cookie duration (for bStateSave) in seconds.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type int
-		 *  @default 0
-		 */
-		"iCookieDuration": 0,
-		
-		/**
-		 * The cookie name prefix.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sCookiePrefix": "",
-		
-		/**
-		 * Callback function for cookie creation.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 *  @default null
-		 */
-		"fnCookieCallback": null,
-		
-		/**
-		 * Array of callback functions for state saving. Each array element is an 
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings
-		 *       and the JSON string to save that has been thus far created. Returns
-		 *       a JSON string to be inserted into a json object 
-		 *       (i.e. '"param": [ 0, 1, 2]')</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSave": [],
-		
-		/**
-		 * Array of callback functions for state loading. Each array element is an 
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings 
-		 *       and the object stored. May return false to cancel state loading</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoad": [],
-		
-		/**
-		 * State that was loaded from the cookie. Useful for back reference
-		 *  @type object
-		 *  @default null
-		 */
-		"oLoadedState": null,
-		
-		/**
-		 * Source url for AJAX data for the table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sAjaxSource": null,
-		
-		/**
-		 * Property from a given object from which to read the table data from. This
-		 * can be an empty string (when not server-side processing), in which case 
-		 * it is  assumed an an array is given directly.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sAjaxDataProp": null,
-		
-		/**
-		 * Note if draw should be blocked while getting data
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bAjaxDataGet": true,
-		
-		/**
-		 * The last jQuery XHR object that was used for server-side data gathering. 
-		 * This can be used for working with the XHR information in one of the 
-		 * callbacks
-		 *  @type object
-		 *  @default null
-		 */
-		"jqXHR": null,
-		
-		/**
-		 * Function to get the server-side data.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnServerData": null,
-		
-		/**
-		 * Functions which are called prior to sending an Ajax request so extra 
-		 * parameters can easily be sent to the server
-		 *  @type array
-		 *  @default []
-		 */
-		"aoServerParams": [],
-		
-		/**
-		 * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if 
-		 * required).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sServerMethod": null,
-		
-		/**
-		 * Format numbers for display.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnFormatNumber": null,
-		
-		/**
-		 * List of options that can be used for the user selectable length menu.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"aLengthMenu": null,
-		
-		/**
-		 * Counter for the draws that the table does. Also used as a tracker for
-		 * server-side processing
-		 *  @type int
-		 *  @default 0
-		 */
-		"iDraw": 0,
-		
-		/**
-		 * Indicate if a redraw is being done - useful for Ajax
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDrawing": false,
-		
-		/**
-		 * Draw index (iDraw) of the last error when parsing the returned data
-		 *  @type int
-		 *  @default -1
-		 */
-		"iDrawError": -1,
-		
-		/**
-		 * Paging display length
-		 *  @type int
-		 *  @default 10
-		 */
-		"_iDisplayLength": 10,
-	
-		/**
-		 * Paging start point - aiDisplay index
-		 *  @type int
-		 *  @default 0
-		 */
-		"_iDisplayStart": 0,
-	
-		/**
-		 * Paging end point - aiDisplay index. Use fnDisplayEnd rather than
-		 * this property to get the end point
-		 *  @type int
-		 *  @default 10
-		 *  @private
-		 */
-		"_iDisplayEnd": 10,
-		
-		/**
-		 * Server-side processing - number of records in the result set
-		 * (i.e. before filtering), Use fnRecordsTotal rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type int
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsTotal": 0,
-	
-		/**
-		 * Server-side processing - number of records in the current display set
-		 * (i.e. after filtering). Use fnRecordsDisplay rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type boolean
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsDisplay": 0,
-		
-		/**
-		 * Flag to indicate if jQuery UI marking and classes should be used.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 */
-		"bJUI": null,
-		
-		/**
-		 * The classes to use for the table
-		 *  @type object
-		 *  @default {}
-		 */
-		"oClasses": {},
-		
-		/**
-		 * Flag attached to the settings object so you can check in the draw 
-		 * callback if filtering has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bFiltered": false,
-		
-		/**
-		 * Flag attached to the settings object so you can check in the draw 
-		 * callback if sorting has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bSorted": false,
-		
-		/**
-		 * Indicate that if multiple rows are in the header and there is more than 
-		 * one unique cell per column, if the top one (true) or bottom one (false) 
-		 * should be used for sorting / title by DataTables.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 */
-		"bSortCellsTop": null,
-		
-		/**
-		 * Initialisation object that is used for the table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInit": null,
-		
-		/**
-		 * Destroy callback functions - for plug-ins to attach themselves to the
-		 * destroy so they can clean up markup and events.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDestroyCallback": [],
-	
-		
-		/**
-		 * Get the number of records in the current record set, before filtering
-		 *  @type function
-		 */
-		"fnRecordsTotal": function ()
-		{
-			if ( this.oFeatures.bServerSide ) {
-				return parseInt(this._iRecordsTotal, 10);
-			} else {
-				return this.aiDisplayMaster.length;
-			}
-		},
-		
-		/**
-		 * Get the number of records in the current record set, after filtering
-		 *  @type function
-		 */
-		"fnRecordsDisplay": function ()
-		{
-			if ( this.oFeatures.bServerSide ) {
-				return parseInt(this._iRecordsDisplay, 10);
-			} else {
-				return this.aiDisplay.length;
-			}
-		},
-		
-		/**
-		 * Set the display end point - aiDisplay index
-		 *  @type function
-		 *  @todo Should do away with _iDisplayEnd and calculate it on-the-fly here
-		 */
-		"fnDisplayEnd": function ()
-		{
-			if ( this.oFeatures.bServerSide ) {
-				if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) {
-					return this._iDisplayStart+this.aiDisplay.length;
-				} else {
-					return Math.min( this._iDisplayStart+this._iDisplayLength, 
-						this._iRecordsDisplay );
-				}
-			} else {
-				return this._iDisplayEnd;
-			}
-		},
-		
-		/**
-		 * The DataTables object for this table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInstance": null,
-		
-		/**
-		 * Unique identifier for each instance of the DataTables object. If there
-		 * is an ID on the table node, then it takes that value, otherwise an
-		 * incrementing internal counter is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sInstance": null,
-	
-		/**
-		 * tabindex attribute value that is added to DataTables control elements, allowing
-		 * keyboard navigation of the table and its controls.
-		 */
-		"iTabIndex": 0,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollHead": null,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollFoot": null
-	};
-
-	/**
-	 * Extension object for DataTables that is used to provide all extension options.
-	 * 
-	 * Note that the <i>DataTable.ext</i> object is available through
-	 * <i>jQuery.fn.dataTable.ext</i> where it may be accessed and manipulated. It is
-	 * also aliased to <i>jQuery.fn.dataTableExt</i> for historic reasons.
-	 *  @namespace
-	 *  @extends DataTable.models.ext
-	 */
-	DataTable.ext = $.extend( true, {}, DataTable.models.ext );
-	
-	$.extend( DataTable.ext.oStdClasses, {
-		"sTable": "dataTable",
-	
-		/* Two buttons buttons */
-		"sPagePrevEnabled": "paginate_enabled_previous",
-		"sPagePrevDisabled": "paginate_disabled_previous",
-		"sPageNextEnabled": "paginate_enabled_next",
-		"sPageNextDisabled": "paginate_disabled_next",
-		"sPageJUINext": "",
-		"sPageJUIPrev": "",
-		
-		/* Full numbers paging buttons */
-		"sPageButton": "paginate_button",
-		"sPageButtonActive": "paginate_active",
-		"sPageButtonStaticDisabled": "paginate_button paginate_button_disabled",
-		"sPageFirst": "first",
-		"sPagePrevious": "previous",
-		"sPageNext": "next",
-		"sPageLast": "last",
-		
-		/* Striping classes */
-		"sStripeOdd": "odd",
-		"sStripeEven": "even",
-		
-		/* Empty row */
-		"sRowEmpty": "dataTables_empty",
-		
-		/* Features */
-		"sWrapper": "dataTables_wrapper",
-		"sFilter": "dataTables_filter",
-		"sInfo": "dataTables_info",
-		"sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
-		"sLength": "dataTables_length",
-		"sProcessing": "dataTables_processing",
-		
-		/* Sorting */
-		"sSortAsc": "sorting_asc",
-		"sSortDesc": "sorting_desc",
-		"sSortable": "sorting", /* Sortable in both directions */
-		"sSortableAsc": "sorting_asc_disabled",
-		"sSortableDesc": "sorting_desc_disabled",
-		"sSortableNone": "sorting_disabled",
-		"sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
-		"sSortJUIAsc": "",
-		"sSortJUIDesc": "",
-		"sSortJUI": "",
-		"sSortJUIAscAllowed": "",
-		"sSortJUIDescAllowed": "",
-		"sSortJUIWrapper": "",
-		"sSortIcon": "",
-		
-		/* Scrolling */
-		"sScrollWrapper": "dataTables_scroll",
-		"sScrollHead": "dataTables_scrollHead",
-		"sScrollHeadInner": "dataTables_scrollHeadInner",
-		"sScrollBody": "dataTables_scrollBody",
-		"sScrollFoot": "dataTables_scrollFoot",
-		"sScrollFootInner": "dataTables_scrollFootInner",
-		
-		/* Misc */
-		"sFooterTH": "",
-		"sJUIHeader": "",
-		"sJUIFooter": ""
-	} );
-	
-	
-	$.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, {
-		/* Two buttons buttons */
-		"sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left",
-		"sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",
-		"sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right",
-		"sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",
-		"sPageJUINext": "ui-icon ui-icon-circle-arrow-e",
-		"sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w",
-		
-		/* Full numbers paging buttons */
-		"sPageButton": "fg-button ui-button ui-state-default",
-		"sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled",
-		"sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled",
-		"sPageFirst": "first ui-corner-tl ui-corner-bl",
-		"sPageLast": "last ui-corner-tr ui-corner-br",
-		
-		/* Features */
-		"sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
-			"ui-buttonset-multi paging_", /* Note that the type is postfixed */
-		
-		/* Sorting */
-		"sSortAsc": "ui-state-default",
-		"sSortDesc": "ui-state-default",
-		"sSortable": "ui-state-default",
-		"sSortableAsc": "ui-state-default",
-		"sSortableDesc": "ui-state-default",
-		"sSortableNone": "ui-state-default",
-		"sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n",
-		"sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s",
-		"sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s",
-		"sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n",
-		"sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s",
-		"sSortJUIWrapper": "DataTables_sort_wrapper",
-		"sSortIcon": "DataTables_sort_icon",
-		
-		/* Scrolling */
-		"sScrollHead": "dataTables_scrollHead ui-state-default",
-		"sScrollFoot": "dataTables_scrollFoot ui-state-default",
-		
-		/* Misc */
-		"sFooterTH": "ui-state-default",
-		"sJUIHeader": "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix",
-		"sJUIFooter": "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"
-	} );
-	
-	
-	/*
-	 * Variable: oPagination
-	 * Purpose:  
-	 * Scope:    jQuery.fn.dataTableExt
-	 */
-	$.extend( DataTable.ext.oPagination, {
-		/*
-		 * Variable: two_button
-		 * Purpose:  Standard two button (forward/back) pagination
-		 * Scope:    jQuery.fn.dataTableExt.oPagination
-		 */
-		"two_button": {
-			/*
-			 * Function: oPagination.two_button.fnInit
-			 * Purpose:  Initialise dom elements required for pagination with forward/back buttons only
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           node:nPaging - the DIV which contains this pagination control
-			 *           function:fnCallbackDraw - draw function which must be called on update
-			 */
-			"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
-			{
-				var oLang = oSettings.oLanguage.oPaginate;
-				var oClasses = oSettings.oClasses;
-				var fnClickHandler = function ( e ) {
-					if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
-					{
-						fnCallbackDraw( oSettings );
-					}
-				};
-	
-				var sAppend = (!oSettings.bJUI) ?
-					'<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+
-					'<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>'
-					:
-					'<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+
-					'<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>';
-				$(nPaging).append( sAppend );
-				
-				var els = $('a', nPaging);
-				var nPrevious = els[0],
-					nNext = els[1];
-				
-				oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
-				oSettings.oApi._fnBindAction( nNext,     {action: "next"},     fnClickHandler );
-				
-				/* ID the first elements only */
-				if ( !oSettings.aanFeatures.p )
-				{
-					nPaging.id = oSettings.sTableId+'_paginate';
-					nPrevious.id = oSettings.sTableId+'_previous';
-					nNext.id = oSettings.sTableId+'_next';
-	
-					nPrevious.setAttribute('aria-controls', oSettings.sTableId);
-					nNext.setAttribute('aria-controls', oSettings.sTableId);
-				}
-			},
-			
-			/*
-			 * Function: oPagination.two_button.fnUpdate
-			 * Purpose:  Update the two button pagination at the end of the draw
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           function:fnCallbackDraw - draw function to call on page change
-			 */
-			"fnUpdate": function ( oSettings, fnCallbackDraw )
-			{
-				if ( !oSettings.aanFeatures.p )
-				{
-					return;
-				}
-				
-				var oClasses = oSettings.oClasses;
-				var an = oSettings.aanFeatures.p;
-	
-				/* Loop over each instance of the pager */
-				for ( var i=0, iLen=an.length ; i<iLen ; i++ )
-				{
-					if ( an[i].childNodes.length !== 0 )
-					{
-						an[i].childNodes[0].className = ( oSettings._iDisplayStart === 0 ) ? 
-							oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled;
-						
-						an[i].childNodes[1].className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? 
-							oClasses.sPageNextDisabled : oClasses.sPageNextEnabled;
-					}
-				}
-			}
-		},
-		
-		
-		/*
-		 * Variable: iFullNumbersShowPages
-		 * Purpose:  Change the number of pages which can be seen
-		 * Scope:    jQuery.fn.dataTableExt.oPagination
-		 */
-		"iFullNumbersShowPages": 5,
-		
-		/*
-		 * Variable: full_numbers
-		 * Purpose:  Full numbers pagination
-		 * Scope:    jQuery.fn.dataTableExt.oPagination
-		 */
-		"full_numbers": {
-			/*
-			 * Function: oPagination.full_numbers.fnInit
-			 * Purpose:  Initialise dom elements required for pagination with a list of the pages
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           node:nPaging - the DIV which contains this pagination control
-			 *           function:fnCallbackDraw - draw function which must be called on update
-			 */
-			"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
-			{
-				var oLang = oSettings.oLanguage.oPaginate;
-				var oClasses = oSettings.oClasses;
-				var fnClickHandler = function ( e ) {
-					if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
-					{
-						fnCallbackDraw( oSettings );
-					}
-				};
-	
-				$(nPaging).append(
-					'<a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a>'+
-					'<a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+
-					'<span></span>'+
-					'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'+
-					'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a>'
-				);
-				var els = $('a', nPaging);
-				var nFirst = els[0],
-					nPrev = els[1],
-					nNext = els[2],
-					nLast = els[3];
-				
-				oSettings.oApi._fnBindAction( nFirst, {action: "first"},    fnClickHandler );
-				oSettings.oApi._fnBindAction( nPrev,  {action: "previous"}, fnClickHandler );
-				oSettings.oApi._fnBindAction( nNext,  {action: "next"},     fnClickHandler );
-				oSettings.oApi._fnBindAction( nLast,  {action: "last"},     fnClickHandler );
-				
-				/* ID the first elements only */
-				if ( !oSettings.aanFeatures.p )
-				{
-					nPaging.id = oSettings.sTableId+'_paginate';
-					nFirst.id =oSettings.sTableId+'_first';
-					nPrev.id =oSettings.sTableId+'_previous';
-					nNext.id =oSettings.sTableId+'_next';
-					nLast.id =oSettings.sTableId+'_last';
-				}
-			},
-			
-			/*
-			 * Function: oPagination.full_numbers.fnUpdate
-			 * Purpose:  Update the list of page buttons shows
-			 * Returns:  -
-			 * Inputs:   object:oSettings - dataTables settings object
-			 *           function:fnCallbackDraw - draw function to call on page change
-			 */
-			"fnUpdate": function ( oSettings, fnCallbackDraw )
-			{
-				if ( !oSettings.aanFeatures.p )
-				{
-					return;
-				}
-				
-				var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages;
-				var iPageCountHalf = Math.floor(iPageCount / 2);
-				var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
-				var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
-				var sList = "";
-				var iStartButton, iEndButton, i, iLen;
-				var oClasses = oSettings.oClasses;
-				var anButtons, anStatic, nPaginateList;
-				var an = oSettings.aanFeatures.p;
-				var fnBind = function (j) {
-					oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
-						/* Use the information in the element to jump to the required page */
-						oSettings.oApi._fnPageChange( oSettings, e.data.page );
-						fnCallbackDraw( oSettings );
-						e.preventDefault();
-					} );
-				};
-				
-				/* Pages calculation */
-				if ( oSettings._iDisplayLength === -1 )
-				{
-					iStartButton = 1;
-					iEndButton = 1;
-					iCurrentPage = 1;
-				}
-				else if (iPages < iPageCount)
-				{
-					iStartButton = 1;
-					iEndButton = iPages;
-				}
-				else if (iCurrentPage <= iPageCountHalf)
-				{
-					iStartButton = 1;
-					iEndButton = iPageCount;
-				}
-				else if (iCurrentPage >= (iPages - iPageCountHalf))
-				{
-					iStartButton = iPages - iPageCount + 1;
-					iEndButton = iPages;
-				}
-				else
-				{
-					iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
-					iEndButton = iStartButton + iPageCount - 1;
-				}
-	
-				
-				/* Build the dynamic list */
-				for ( i=iStartButton ; i<=iEndButton ; i++ )
-				{
-					sList += (iCurrentPage !== i) ?
-						'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' :
-						'<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>';
-				}
-				
-				/* Loop over each instance of the pager */
-				for ( i=0, iLen=an.length ; i<iLen ; i++ )
-				{
-					if ( an[i].childNodes.length === 0 )
-					{
-						continue;
-					}
-					
-					/* Build up the dynamic list forst - html and listeners */
-					$('span:eq(0)', an[i])
-						.html( sList )
-						.children('a').each( fnBind );
-					
-					/* Update the premanent botton's classes */
-					anButtons = an[i].getElementsByTagName('a');
-					anStatic = [
-						anButtons[0], anButtons[1], 
-						anButtons[anButtons.length-2], anButtons[anButtons.length-1]
-					];
-	
-					$(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled );
-					$([anStatic[0], anStatic[1]]).addClass( 
-						(iCurrentPage==1) ?
-							oClasses.sPageButtonStaticDisabled :
-							oClasses.sPageButton
-					);
-					$([anStatic[2], anStatic[3]]).addClass(
-						(iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ?
-							oClasses.sPageButtonStaticDisabled :
-							oClasses.sPageButton
-					);
-				}
-			}
-		}
-	} );
-	
-	$.extend( DataTable.ext.oSort, {
-		/*
-		 * text sorting
-		 */
-		"string-pre": function ( a )
-		{
-			if ( typeof a != 'string' ) {
-				a = (a !== null && a.toString) ? a.toString() : '';
-			}
-			return a.toLowerCase();
-		},
-	
-		"string-asc": function ( x, y )
-		{
-			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		},
-		
-		"string-desc": function ( x, y )
-		{
-			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		},
-		
-		
-		/*
-		 * html sorting (ignore html tags)
-		 */
-		"html-pre": function ( a )
-		{
-			return a.replace( /<.*?>/g, "" ).toLowerCase();
-		},
-		
-		"html-asc": function ( x, y )
-		{
-			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		},
-		
-		"html-desc": function ( x, y )
-		{
-			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		},
-		
-		
-		/*
-		 * date sorting
-		 */
-		"date-pre": function ( a )
-		{
-			var x = Date.parse( a );
-			
-			if ( isNaN(x) || x==="" )
-			{
-				x = Date.parse( "01/01/1970 00:00:00" );
-			}
-			return x;
-		},
-	
-		"date-asc": function ( x, y )
-		{
-			return x - y;
-		},
-		
-		"date-desc": function ( x, y )
-		{
-			return y - x;
-		},
-		
-		
-		/*
-		 * numerical sorting
-		 */
-		"numeric-pre": function ( a )
-		{
-			return (a=="-" || a==="") ? 0 : a*1;
-		},
-	
-		"numeric-asc": function ( x, y )
-		{
-			return x - y;
-		},
-		
-		"numeric-desc": function ( x, y )
-		{
-			return y - x;
-		}
-	} );
-	
-	
-	$.extend( DataTable.ext.aTypes, [
-		/*
-		 * Function: -
-		 * Purpose:  Check to see if a string is numeric
-		 * Returns:  string:'numeric' or null
-		 * Inputs:   mixed:sText - string to check
-		 */
-		function ( sData )
-		{
-			/* Allow zero length strings as a number */
-			if ( typeof sData === 'number' )
-			{
-				return 'numeric';
-			}
-			else if ( typeof sData !== 'string' )
-			{
-				return null;
-			}
-			
-			var sValidFirstChars = "0123456789-";
-			var sValidChars = "0123456789.";
-			var Char;
-			var bDecimal = false;
-			
-			/* Check for a valid first char (no period and allow negatives) */
-			Char = sData.charAt(0); 
-			if (sValidFirstChars.indexOf(Char) == -1) 
-			{
-				return null;
-			}
-			
-			/* Check all the other characters are valid */
-			for ( var i=1 ; i<sData.length ; i++ ) 
-			{
-				Char = sData.charAt(i); 
-				if (sValidChars.indexOf(Char) == -1) 
-				{
-					return null;
-				}
-				
-				/* Only allowed one decimal place... */
-				if ( Char == "." )
-				{
-					if ( bDecimal )
-					{
-						return null;
-					}
-					bDecimal = true;
-				}
-			}
-			
-			return 'numeric';
-		},
-		
-		/*
-		 * Function: -
-		 * Purpose:  Check to see if a string is actually a formatted date
-		 * Returns:  string:'date' or null
-		 * Inputs:   string:sText - string to check
-		 */
-		function ( sData )
-		{
-			var iParse = Date.parse(sData);
-			if ( (iParse !== null && !isNaN(iParse)) || (typeof sData === 'string' && sData.length === 0) )
-			{
-				return 'date';
-			}
-			return null;
-		},
-		
-		/*
-		 * Function: -
-		 * Purpose:  Check to see if a string should be treated as an HTML string
-		 * Returns:  string:'html' or null
-		 * Inputs:   string:sText - string to check
-		 */
-		function ( sData )
-		{
-			if ( typeof sData === 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1 )
-			{
-				return 'html';
-			}
-			return null;
-		}
-	] );
-	
-
-	// jQuery aliases
-	$.fn.DataTable = DataTable;
-	$.fn.dataTable = DataTable;
-	$.fn.dataTableSettings = DataTable.settings;
-	$.fn.dataTableExt = DataTable.ext;
-
-
-	// Information about events fired by DataTables - for documentation.
-	/**
-	 * Draw event, fired whenever the table is redrawn on the page, at the same point as
-	 * fnDrawCallback. This may be useful for binding events or performing calculations when
-	 * the table is altered at all.
-	 *  @name DataTable#draw
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Filter event, fired when the filtering applied to the table (using the build in global
-	 * global filter, or column filters) is altered.
-	 *  @name DataTable#filter
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Page change event, fired when the paging of the table is altered.
-	 *  @name DataTable#page
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Sort event, fired when the sorting applied to the table is altered.
-	 *  @name DataTable#sort
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * DataTables initialisation complete event, fired when the table is fully drawn,
-	 * including Ajax data loaded, if Ajax data is required.
-	 *  @name DataTable#init
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The JSON object request from the server - only
-	 *    present if client-side Ajax sourced data is used</li></ol>
-	 */
-
-	/**
-	 * State save event, fired when the table has changed state a new state save is required.
-	 * This method allows modification of the state saving object prior to actually doing the
-	 * save, including addition or other state properties (for plug-ins) or modification
-	 * of a DataTables core property.
-	 *  @name DataTable#stateSaveParams
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The state information to be saved
-	 */
-
-	/**
-	 * State load event, fired when the table is loading state from the stored data, but
-	 * prior to the settings object being modified by the saved state - allowing modification
-	 * of the saved state is required or loading of state for a plug-in.
-	 *  @name DataTable#stateLoadParams
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * State loaded event, fired when state has been loaded from stored data and the settings
-	 * object has been modified by the loaded data.
-	 *  @name DataTable#stateLoaded
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * Processing event, fired when DataTables is doing some kind of processing (be it,
-	 * sort, filter or anything else). Can be used to indicate to the end user that
-	 * there is something happening, or that something has finished.
-	 *  @name DataTable#processing
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {boolean} bShow Flag for if DataTables is doing processing or not
-	 */
-
-	/**
-	 * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to 
-	 * made to the server for new data (note that this trigger is called in fnServerData,
-	 * if you override fnServerData and which to use this event, you need to trigger it in
-	 * you success function).
-	 *  @name DataTable#xhr
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing
-	 * the bDestroy:true parameter in the initialisation object. This can be used to remove
-	 * bound events, added DOM nodes, etc.
-	 *  @name DataTable#destroy
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-}(jQuery, window, document, undefined));
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/jquery.fixheadertable.js b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/jquery.fixheadertable.js
deleted file mode 100644
index 9cfe00a5f2f845d1ae6015abf2db9e76404174a3..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/js/jquery.fixheadertable.js
+++ /dev/null
@@ -1,990 +0,0 @@
-/*
-* jquery.fixheadertable
-*
-* Copyright (c) 2010 Benjamin Léouzon
-* http://www.tablefixedheader.com/
-*
-* Licensed under MIT
-* http://www.opensource.org/licenses/mit-license.php
-* 
-* http://docs.jquery.com/Plugins/Authoring
-* jQuery authoring guidelines
-*
-* Launch  : December 2010
-* Version : 2.0
-*/
-
-(function($) { 
-
-	$.fn.fixheadertable = function(options) {
-
-		var defaults = {  
-				
-			caption		 : '',
-			
-			showhide	 : true,
-			
-			theme		 : 'ui',
-			
-			height		 : null,
-			
-			width		 : null, 
-			
-			minWidth	 : null,
-			
-			minWidthAuto : false,
-			
-			colratio	 : [],
-			
-			whiteSpace	 : 'nowrap',
-			
-			addTitles	 : false,
-			
-			zebra		 : false,
-			
-			zebraClass	 : 'ui-state-active',
-			
-			sortable	 : false, 
-			
-			sortedColId	 : null,
-			
-			sortType	 : [],
-			
-			dateFormat	 : 'd-m-y',
-			
-			pager		 : false,
-			
-			rowsPerPage	 : 10,
-			
-			resizeCol	 : false,
-			
-			minColWidth	 : 100,
-			
-			wrapper		 : true
-		};  
-		
-		var options = $.extend(defaults, options); 
-		
-		function util_getComputedStyle(element, property) {
-			
-			if (element.currentStyle) {
-				
-				var y = x.currentStyle[property];
-				
-			} else if (window.getComputedStyle) {
-				
-				var y = document.defaultView.getComputedStyle(element, null).getPropertyValue(property);
-			}
-			
-			return y;
-		}
-		
-		function util_getScrollbarWidth () {
-						
-			var inner = $('<p/>').addClass('t_fixed_header_scroll_inner');
-			
-			var outer = $('<div/>').addClass('t_fixed_header_scroll_outer');
-			
-			outer.append(inner);
-			
-			$(document.body).append(outer);
-			
-			var w1 = inner[0].offsetWidth;  
-			
-			outer.css('overflow', 'scroll');
-			
-			var w2 = inner[0].offsetWidth;  
-			
-			if (w1 == w2) w2 = outer[0].clientWidth;  
-			
-			outer.remove();
-			
-			return (w1 - w2);			
-		}
-		
-		function util_parseDate (format, date) {
-			
-			var tsp = {m : 1, d : 1, y : 1970, h : 0, i : 0, s : 0}, k, hl, dM;
-			
-			if(date && date !== null && date !== undefined){
-				
-				date = $.trim(date);
-				
-				date = date.split(/[\\\/:_;.\t\T\s-]/);
-				
-				format = format.split(/[\\\/:_;.\t\T\s-]/);
-				
-				var dfmt = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
-				
-				var afmt = ["am", "pm", "AM", "PM"];
-				
-				var h12to24 = function(ampm, h){
-					
-					if (ampm === 0){ if (h == 12) { h = 0;} }
-					
-					else { if (h != 12) { h += 12; } }
-					
-					return h;
-				};
-				
-				for (k=0, hl=format.length; k < hl; k++){
-					
-					if(format[k] == 'M') {
-						
-						dM = $.inArray(date[k],dfmt);
-						
-						if(dM !== -1 && dM < 12){date[k] = dM+1;}
-					}
-					
-					if(format[k] == 'F') {
-						
-						dM = $.inArray(date[k],dfmt);
-						
-						if(dM !== -1 && dM > 11){date[k] = dM+1-12;}
-					}
-					
-					if(format[k] == 'a') {
-						
-						dM = $.inArray(date[k],afmt);
-						
-						if(dM !== -1 && dM < 2 && date[k] == afmt[dM]){
-							
-							date[k] = dM;
-							
-							tsp.h = h12to24(date[k], tsp.h);
-						}
-					}
-					
-					if(format[k] == 'A') {
-						
-						dM = $.inArray(date[k],afmt);
-						
-						if(dM !== -1 && dM > 1 && date[k] == afmt[dM]){
-							
-							date[k] = dM-2;
-							
-							tsp.h = h12to24(date[k], tsp.h);
-						}
-					}
-					
-					if(date[k] !== undefined) {
-						
-						tsp[format[k].toLowerCase()] = parseInt(date[k],10);
-					}
-				}
-				
-				tsp.m = parseInt(tsp.m,10)-1;
-				
-				var ty = tsp.y;
-				
-				if (ty >= 70 && ty <= 99) {tsp.y = 1900 + tsp.y;}
-				
-				else if (ty >=0 && ty <=69) {tsp.y= 2000 + tsp.y;}
-			}
-			
-			return new Date(tsp.y, tsp.m, tsp.d, tsp.h, tsp.i, tsp.s,0);
-		}
-		
-		return this.each(function() {
-			
-			var _table				= $(this);
-			
-			var main_wrapper		= null;
-			
-			var nbcol 				= $('thead th', this).length;
-			
-			var _initialWidth		= $(this).width();
-			
-			var _wrapper 			= null;
-			
-			var _headerscontainer	= null;
-			
-			var _fillScrollbar 		= null;
-			
-			var _body 				= null;
-			
-			var _headers			= null;
-			
-			var _scrollWidth		= util_getScrollbarWidth();
-			
-			var _colgroup			= buildColgroup(nbcol);
-			
-			var _colgroup_body		= null;
-			
-			var _nbRowsPerPage		= 10;
-			
-			var _new_nbRowsPerPage  = null;
-			
-			var _nbpages			= null;
-			
-			var _nbpagesDiv			= null;
-			
-			var _currentpage 		= null;
-			
-			var _pager				= null;
-			
-			var _objectTable		= null;
-			
-			var _stripNum 			= /[\$,%]/g;
-			
-			var _resizeInfo 		= null;
-			
-			var _resizeGhost		= null;
-			
-			function buildTop (table) {
-				
-				_fillScrollbar = $('<div class="headtable ui-state-default" style="margin-right : 0px"></div>');
-				
-				_headerscontainer = _fillScrollbar;
-				
-				_headerscontainer.insertBefore(table);
-			}
-			
-			function buildColgroup (nbcol) {
-					
-				var colgroup = $('<colgroup />');				
-				
-				if (options.colratio.length == 0) {
-				
-					var temp = null;
-					
-					for (var i = 0; i < nbcol; i++) {
-						
-						temp = $('<col style="width : ' + (100/nbcol) + '%" />');
-						
-						colgroup.append(temp);
-
-						temp = null;
-					}
-				
-				} else if (options.colratio.length == nbcol) {
-					
-					var cw = 0;
-					
-					for (var i = 0; i < nbcol; i++) {
-						
-						temp = $('<col style="width : ' + options.colratio[i] + 'px" />');
-						
-						colgroup.append(temp);
-
-						temp = null;
-						
-						cw += parseInt(options.colratio[i]);
-					}
-					
-					$(_table).css('width', cw + 'px');
-				}
-				
-				return colgroup;
-			}
-			
-			function sortColumn (table, number, sens, th) {
-				
-				if ((options.sortType.length != 0) && (options.sortType.length == nbcol)) {
-					
-					var type = options.sortType[number];
-					
-					if (type == 'float') {						
-						
-						getSortKey = function(cell) {
-							
-							var key = parseFloat( String(cell).replace(_stripNum, ''));
-							
-							return isNaN(key) ? 0.00 : key;
-						}
-						
-					} else if (type == 'integer') {
-						
-						getSortKey = function(cell) {
-							
-							return cell ? parseFloat(String(cell).replace(_stripNum, '')) : 0;							
-						}
-						
-					} else if (type == 'date') {
-						
-						getSortKey = function(cell) {
-							
-							return util_parseDate(options.dateFormat, cell).getTime();
-						}
-						
-					} else {
-						
-						getSortKey = function(cell) {
-							
-							if(!cell) { cell =""; }
-							
-							return $.trim(String(cell).toLowerCase());
-						}
-					}
-					
-				} else {
-					
-					getSortKey = function(cell) {
-						
-						if(!cell) { cell =""; }
-						
-						return $.trim(String(cell).toLowerCase());
-					}
-				}
-				
-				_objectTable.sort(function(a, b){
-										
-					var x = getSortKey(a[number]);
-					
-				    var y = getSortKey(b[number]);
-				    
-				    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-				})
-					
-				if(sens == 'DESC'){
-					
-					_objectTable.reverse();
-				}
-				
-				(options.pager) ? moveToPage(table) : objectToTable(_objectTable, table);
-			}
-			
-			function objectToTable(objectArray, table) {
-				
-				var body = $('tbody', table);
-								
-				body.children().remove();
-				
-				if(options.zebra){
-					
-					for (var i = 0; i < objectArray.length; i++){
-						
-						(i%2) ? (tr = $('<tr class="' + options.zebraClass + '"></tr>')) : (tr = $('<tr></tr>'));									
-						
-						for (var j in objectArray[i]){
-							
-							tr.append($('<td class="ui-widget-content"></td>').html(objectArray[i][j]));
-						}	
-						
-						body.append(tr);
-					}
-					
-				} else {
-				
-					for (var i = 0; i < objectArray.length; i++){
-							
-						tr = $('<tr></tr>');				
-						
-						for (var j in objectArray[i]){
-							
-							tr.append($('<td class="ui-widget-content"></td>').html(objectArray[i][j]));
-						}	
-						
-						body.append(tr);
-					}
-				}
-			}
-			
-			function tableToObject(table) {
-
-				var objectArray = [];
-				
-				$('tr', table).each(function(i){
-					
-					var data = {};
-					
-					$('td', this).each(function(j){
-						
-						data[j] = $(this).html();
-					})
-					
-					objectArray.push(data);
-				});	
-
-				return objectArray;
-			}
-			
-			function buildHeaders(table) {
-				
-				_headers = $('<table class="head"/>').append(_colgroup).append($('thead', table));
-				
-				_headerscontainer.append(_headers);	
-				
-				_headers.wrap('<div></div>');
-				
-				var tab_headers = $('th', _headers);
-				
-				tab_headers.addClass('ui-widget-content ui-state-default');
-								
-				if(options.sortable){
-					
-					var th_div_sort = null;
-					
-					tab_headers.each(function(i){
-						
-						$(this).contents().wrapAll('<div class="ui-sort"></div>');
-						
-						th_div_sort = $('div.ui-sort', this);
-						
-						th_div_sort.click(function(){
-							
-							tab_headers.removeClass('ui-state-hover');
-							
-							$(this).parent().removeClass('ui-state-active').addClass('ui-state-hover');
-							
-							$('span.ui-icon', tab_headers).remove();
-							
-							if($(this).hasClass('sortedUp')){
-								
-								sortColumn(table, i, "DESC", this);
-								
-								$(this).removeClass('sortedUp').addClass('sortedDown');
-								
-								$(this).append('<span style="display : inline-block; vertical-align : middle" class="ui-icon ui-icon-triangle-1-s"></span>');
-								
-							} else {
-								
-								sortColumn(table, i, "ASC", this);
-								
-								$(this).removeClass('sortedDown').addClass('sortedUp');
-								
-								$(this).append('<span style="display : inline-block; vertical-align : middle" class="ui-icon ui-icon-triangle-1-n"></span>');
-							}
-							
-							_headerscontainer[0].scrollLeft = _body[0].scrollLeft;
-						})
-					});
-				    
-					$('div.ui-sort', tab_headers).addClass('hover');
-				}
-				
-				if(options.resizeCol && (options.colratio.length == nbcol)){
-					
-					tab_headers.each(function(i){
-						
-						var resizer = $('<span class="ui-resize"></span>');
-						
-						$(this).prepend(resizer);
-						
-						resizer.mousedown(function(e){
-							
-							dragStart(i, e);
-							
-							return false;
-						})						
-					});
-					
-					_main_wrapper.mousemove(function(e){
-						
-						if (_resizeInfo){
-							
-							dragMove(e);
-							
-							return false;
-						}
-					}).mouseup(function(){
-						
-						if (_resizeInfo){
-							
-							dragEnd();
-							
-							return false;
-						}
-						
-						return true;
-					});
-					
-					function getOffset(col){
-						
-						var ret = 0, cell = $('col', _colgroup), handler = $('th > span.ui-resize', _headers)[col], bso = _body[0].scrollLeft;
-						
-						for(var i = 0; i < col; i++){
-							
-							ret += parseInt(cell[i].style.width);
-						}
-						
-						return handler.offsetLeft + 5 + ret - bso;
-					}
-					
-					function dragStart(i, x){
-						
-						_resizeInfo = { id : i, startX : x.clientX , initTableWidth : getColratioWidth(), offset : getOffset(i) };
-						
-						_resizeGhost.css({ display : 'block', height : _headerscontainer.height() + _body.height() + 2 + 'px', left : _resizeInfo.offset + 'px', cursor : 'col-resize' });
-					}
-					
-					function dragMove(x){
-						
-						var diff = x.clientX - _resizeInfo.startX;
-						
-						_resizeInfo.newWidth = parseInt($('col', _colgroup)[_resizeInfo.id].style.width) + diff;
-						
-						_resizeInfo.newTableWidth = _resizeInfo.initTableWidth + diff;
-						
-						if(_resizeInfo.newWidth > parseInt(options.minColWidth)){
-						
-							_resizeGhost.css({ left :  _resizeInfo.offset + diff + 'px' });
-							
-						} else {
-							
-							_resizeInfo.newWidth = parseInt(options.minColWidth);
-						}
-					}
-					
-					function dragEnd(){
-						
-						$(_colgroup.children()[_resizeInfo.id]).css({ width : _resizeInfo.newWidth + 'px' });
-						
-						$(_colgroup_body.children()[_resizeInfo.id]).css({ width : _resizeInfo.newWidth + 'px' });
-						
-						var wrapper_width = _resizeInfo.newTableWidth;
-						
-						_headers.css({ 'width' : wrapper_width + 'px' });
-						
-						$(_table).css({ 'width'	: wrapper_width + 'px' });
-							
-						_resizeInfo = null;
-						
-						_resizeGhost.css({ display : 'none' });
-						
-						_headerscontainer[0].scrollLeft = _body[0].scrollLeft;
-					}
-				}
-			}
-
-			function isIE6_7() {
-				
-				if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
-					
-	        		var ieversion = new Number(RegExp.$1);
-	        		 
-	 				if (ieversion == 7 || ieversion == 6) {
-	 					
-	        				return true;
-	        				
-	        		} else {
-	        				return false;
-	        		}
-	        	}
-			}
-			
-			function isIE8() {
-				
-				if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
-					
-	        		var ieversion = new Number(RegExp.$1);
-	        		 
-	 				if (ieversion == 8) {
-	 					
-	        				return true;
-	        				
-	        		} else {
-	        				return false;
-	        		}
-	        	}
-			}
-			
-			function buildBody (table) {
-				
-				_body = $('<div class="body ui-widget-content"></div>').insertBefore(table).append(table);
-				
-				if(options.height != null &&  !isNaN(parseInt(options.height))) {
-				
-					_body.css('height', options.height + 'px');
-				}
-				
-				_colgroup_body = _colgroup.clone();
-				
-				$(table).prepend(_colgroup_body);
-				
-				$('td', table).addClass('ui-widget-content');
-				
-				$(table).wrap('<div></div>');
-				
-				if (options.addTitles == true) {
-				
-					$('td', table).each(function() {
-						
-							$(this).attr('title', $(this).text());
-					});			
-				}
-				
-				if (options.zebra) {
-					
-					$('tr:odd', table).addClass(options.zebraClass);
-				}
-			}
-			
-			function adaptScroll (table) {
-				
-				var scrollwidth = _scrollWidth;
-	        	
-	        	if(isIE6_7()){
-	        		
-	        		scrollwidth = 0; 
-	        	}
-	        	
-	        	var width = 0;
-	        							
-				if (parseInt($(table).height()) > parseInt(options.height)) { 
-									
-					width = scrollwidth;
-					
-					overflow = 'scroll';
-					
-				} else { 
-									
-					width = 0;
-						
-					overflow = 'auto';
-				}
-				
-				if($.browser.msie && options.height) {
-				
-					width = scrollwidth;
-					
-					overflow = 'scroll';
-				}
-				
-				_fillScrollbar.css('margin-right', width);
-				
-				return overflow;				
-			}
-			
-			function restrictRows(table, nbrows) {
-							
-				var length = _objectTable.length;
-				
-				var limit = 0;
-				
-				if(length < nbrows) {
-					
-					limit = length;
-				
-				} else {
-					
-					limit = nbrows;
-				}
-				
-				var _objectTableSliced = _objectTable.slice(0, limit);
-				
-				objectToTable(_objectTableSliced, table);	
-				
-				_nbpages = Math.ceil(length / nbrows);
-				
-				_currentpage = 1;
-				
-				_nbpagesDiv.html('Showing page ' + _currentpage + ' of ' + _nbpages);
-				
-				_body.css('overflow-y', adaptScroll(table));
-				
-				$('tr:last td', table).css('border-bottom-width', '1px');
-			}
-			
-			function moveToNextPage(table) {
-				
-				_currentpage++;
-				
-				if(_currentpage >= (_nbpages)) {
-					
-					_currentpage = (_nbpages);
-				}
-					
-				moveToPage(table);
-			}
-			
-			function moveToPreviousPage(table) {
-				
-				_currentpage--;
-				
-				if(_currentpage <= 1) {
-					
-					_currentpage = 1;
-				}
-				
-				moveToPage(table);
-			}
-			
-			function moveToPage(table) {
-				
-				var length = _objectTable.length;
-				
-				var start, limit = 0;
-				
-				start = (_currentpage - 1) * _new_nbRowsPerPage;
-				
-				if(length < (_currentpage * _new_nbRowsPerPage)) {
-					
-					limit = length;
-				
-				} else {
-					
-					limit = (_currentpage * _new_nbRowsPerPage);
-				}
-				
-				var _objectTableSliced = _objectTable.slice(start, limit);
-				
-				objectToTable(_objectTableSliced, table);
-				
-				_nbpagesDiv.html('Showing page ' + _currentpage + ' of ' + _nbpages);
-				
-				_body.css('overflow-y', adaptScroll(table));	
-				
-				$('tr:last td', table).css('border-bottom-width', '1px');
-			}
-			
-			function buildNavButton(className, callbackClick, buttonClass) {
-				
-				var button = $('<div class="button ui-state-default ' + buttonClass + '"><span class="ui-icon ' + className + '">&nbsp;</span></div>');
-				
-				_pager.append(button);
-				
-				button.mouseover(function(){
-						
-					$(this).addClass('ui-state-hover');
-						
-				}).mousedown(function(){
-						
-					$(this).addClass('ui-state-active');
-						
-				}).mouseup(function(){
-						
-					$(this).removeClass('ui-state-active');
-						
-				}).mouseout(function(){
-					
-					$(this).removeClass('ui-state-active');
-					
-					$(this).removeClass('ui-state-hover');
-					
-				}).click(callbackClick);	
-			}
-			
-			function buildPager(table) {
-				
-				_pager = $('<div class="pager ui-widget-header ui-corner-bottom ui-widget-content"></div>');
-				
-				_main_wrapper.append(_pager);
-				
-				buildNavButton('ui-icon-arrowthickstop-1-e', function(){
-					
-					_currentpage = _nbpages;
-					
-					moveToPage(table);
-				}, 'ui-corner-right');
-				
-				buildNavButton('ui-icon ui-icon-arrowthick-1-e', function(){
-					
-					moveToNextPage(table);
-				}, 'noborder');
-				
-				buildNavButton('ui-icon ui-icon-arrowthick-1-w', function(){
-					
-					moveToPreviousPage(table);
-				}, 'noborder');
-				
-				buildNavButton('ui-icon-arrowthickstop-1-w', function(){
-					
-					_currentpage = 1;
-					
-					moveToPage(table);
-				}, 'ui-corner-left noborder');
-				
-				_button_set = 
-				
-				$('<div id="' + table.id + '_radio" style="float : left">' + 
-				
-					'<input type="radio" id="' + table.id + '_show_10_rows" name="' + table.id + '_radio"/><label for="'  + table.id + '_show_10_rows">10</label>' + 
-					'<input type="radio" id="' + table.id + '_show_25_rows" name="' + table.id + '_radio"/><label for="'  + table.id + '_show_25_rows">25</label>' + 
-					'<input type="radio" id="' + table.id + '_show_50_rows" name="' + table.id + '_radio" /><label for="' + table.id + '_show_50_rows">50</label>' + 
-					'<input type="radio" id="' + table.id + '_show_100_rows" name="' + table.id + '_radio"/><label for="' + table.id + '_show_100_rows">100</label>' + 
-				
-				'</div>');
-									
-				_pager.append(_button_set);
-				
-				$('#' + table.id + '_show_10_rows', _pager).click(function(){
-						
-						_new_nbRowsPerPage = _nbRowsPerPage;
-						
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				$('#' + table.id + '_show_25_rows', _pager).click(function(){
-						
-						_new_nbRowsPerPage = _nbRowsPerPage * 2.5;
-						
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				$('#' + table.id + '_show_50_rows', _pager).click(function(){
-					
-						_new_nbRowsPerPage = _nbRowsPerPage * 5;
-					
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				$('#' + table.id + '_show_100_rows', _pager).click(function(){
-					
-						_new_nbRowsPerPage = _nbRowsPerPage * 10;
-					
-						restrictRows(table, _new_nbRowsPerPage);
-				});
-				
-				_nbpagesDiv = $('<div class="page_infos"></div>');
-				
-				_pager.append(_nbpagesDiv);
-				
-				_new_nbRowsPerPage = _nbRowsPerPage;
-				
-				$('#' + table.id + '_show_' + options.rowsPerPage + '_rows', _pager).click();
-				
-				_button_set.buttonset();
-			}
-			
-			function getColratioWidth(){
-				
-				var tw = 0;
-				
-				for(var i = 0; i < options.colratio.length; i++){
-					
-					tw += parseInt(options.colratio[i]);
-				}
-				
-				return tw;
-			}
-
-			/***********************/
-			/********* MAIN ********/
-			/***********************/
-			
-			_wrapper = $('<div/>').addClass('t_fixed_header ui-state-default default ' + options.theme).insertBefore(this).append(this);
-			
-			_wrapper.css('border', 'none').css('font-weight', 'normal');
-			
-			_main_wrapper = $('<div class="t_fixed_header_main_wrapper ui-widget ui-widget-header ' + options.theme + '"></div>');
-			
-			if (options.whiteSpace == 'normal') {
-			
-				_wrapper.addClass('t_fixed_header_wrap');
-			}		
-			
-			buildTop(this);
-			
-			buildHeaders(this);	
-			
-			buildBody(this);
-			
-			if(options.wrapper){
-			
-				var tampon = _wrapper.wrap('<div class="ui-widget ui-widget-content ui-corner-all" style="padding : 5px; font-size : 1em;"></div>').parent();
-				
-			} else {
-				
-				var tampon = _wrapper.wrap('<div></div>').parent();
-			}
-			
-			if (options.width != null && !isNaN(parseInt(options.width)) && options.width > 0) {
-				
-				tampon.css('width', options.width + 'px');	
-			}
-			
-			var res = _wrapper.detach();
-			
-			var main_wrapper_child = $('<div class="t_fixed_header_main_wrapper_child"></div>');
-			
-			_main_wrapper.append(main_wrapper_child);
-			
-			main_wrapper_child.append(res);
-			
-			tampon.append(_main_wrapper);	
-			
-			if(isIE6_7()){
-			
-				_body.css('margin-bottom', 17 + 'px');
-			}
-			
-			if (options.caption != '') {
-				
-				var caption = $('<div class="t_fixed_header_caption ui-widget-header ui-corner-top">' + options.caption + '</div>');
-				
-				_main_wrapper.prepend(caption).addClass('ui-corner-all');
-				
-				if (options.showhide) {
-				
-					var showhide = $('<div style="cursor : pointer; display : inline-block; vertical-align : middle; background : none; border : none;" class="ui-state-active"><span class="ui-icon ui-icon-triangle-1-n">&nbsp;</span></div>');
-					
-					caption.append(showhide);
-					
-					showhide.click(function(){
-						
-						main_wrapper_child.toggle();
-						
-						caption.toggleClass('toggle')
-						
-						if(_pager) _pager.toggle();
-						
-						$('span', showhide).toggleClass('ui-icon-triangle-1-s');
-					});
-				
-				}
-			} 	
-						
-			if (options.sortable || options.pager) {
-				
-				_objectTable = tableToObject(this);
-			}
-			
-			if (options.pager) {
-				
-				buildPager(this);
-			}
-			
-			if(options.sortable && !isNaN(parseInt(options.sortedColId))) {
-				
-				var cur_th = $('th', _headers)[options.sortedColId];
-				
-				$(cur_th).addClass('ui-state-hover')
-				
-				$('div.ui-sort', cur_th).click();
-			}
-			
-			if(options.resizeCol && (options.colratio.length == nbcol)){
-			
-				_resizeGhost = $('<div class="ui-resize-ghost ui-widget-header" style="height : ' + _main_wrapper.parent().height() + 'px"></div>');
-				
-				_wrapper.append(_resizeGhost);
-			}
-			
-			_body.css('overflow-y', adaptScroll(this));
-			
-			if (options.minWidth != null && !isNaN(parseInt(options.minWidth)) && options.minWidth > 0) {
-				
-				var minWidth = options.minWidth + 'px';
-				
-			} else if (options.minWidthAuto) {
-				
-				if (options.colratio.length == nbcol) {
-					
-					var minWidth =  $(this).width() + 'px';
-					
-				} else {
-					
-					var minWidth = (_initialWidth + 150) + 'px';
-				}
-			}
-						
-			_headerscontainer.children().first().css('min-width', minWidth);
-			
-			_body.children().first().css('min-width', minWidth);
-			
-			_body.scroll(function(){
-				
-				_headerscontainer[0].scrollLeft = _body[0].scrollLeft;
-			});
-			
-			if (options.colratio.length == nbcol) {
-								
-				_wrapper.removeClass('default');
-				
-				$(_headers).css('width', getColratioWidth() + 'px');
-			}
-		});
-	};
-
-})(jQuery);
\ No newline at end of file
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/media-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/media-browser.html
deleted file mode 100644
index c29fc4da7cc3d69582843d84e0983a294de46896..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/media-browser.html
+++ /dev/null
@@ -1,979 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Media</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="media-table-header"><th>Code</th><th>Name</th><th>Storage</th><th>For What</th><th>Organism</th><th></th></tr>
-								</thead>
-								<tbody id='media-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All media
-var medias = null;
-
-/// The media that are currently being inspected
-var inspectedMedias = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				console.log(sample.properties.SOLUTIONS_BUFFERS_PARENTS)
-			}	  
-			
-			   
-}								
-			
-	
-};
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    media = objectOrId;
-  } else {
-  	media = mediasById[objectOrId];
-  }
-  
-  return media;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the medias variable */
-function initializeMedias(result)
-{
-      // Construct a map of all medias by id
-  mediasById = {};
-
-	// Split the medias into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpMedias = [], otherMedias = [];
-	var frpRegex = /^FRM[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        mediasById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the mediasById map
-	    theSample = mediasById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpMedias.push(theSample);
-		} else {
-			otherMedias.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherMedias.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpMedias.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of medias
-	medias = frpMedias.concat(otherMedias);
-}
-
-
-
-
-/** Set the size of the media-table based on whether or not inspectors are visible */
-function resizeMediaTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var mediaTableTransition = d3.selectAll('div.media-table-data-cell');
-	mediaTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectMedia(media)
-{
-	if (inspectedMedias.indexOf(media) < 0) {
-		inspectedMedias.push(media);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var mediaToSend = $.extend({}, media);
-		delete mediaToSend.parents;
-		delete mediaToSend.children;
-	
-	}
-	resizeMediaTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(media)
-{
-	var index = inspectedMedias.indexOf(media);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedMedias.splice(index, 1);
-	resizeMediaTable();
-	updateInspectors(1000);
-}
-
-
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedMedias, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectMedia(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectMedia(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeMedias(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (medias.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#media-table").selectAll("tr.media-table-data").data(medias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "media-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectMedia)
-		.selectAll("td").data(function(sample) {
-			tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.STORAGE, sample.properties.FOR_WHAT, sample.properties.ORGANISM];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "media-table-data-cell")
-			.html(String)
-			
-	$('a').click(function(e){
-	   e.stopPropagation();
-	});
-
-}
-
-function mediaFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#media-table").selectAll("tr.media-table-data").data(medias);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedMedias) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "MEDIA" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/oligo-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/oligo-browser.html
deleted file mode 100644
index 7ac99f79c3792ed9b4e64282849bb2fe9f10abe2..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/oligo-browser.html
+++ /dev/null
@@ -1,599 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-// Some global variables we refer to
-
-/// All oligos
-var oligos = null;
-
-/// The oligos that are currently being inspected
-var inspectedOligos = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-		
-	order1 = ["TARGET", "DIRECTION", "RESTRICTION_ENZYME", "MODIFICATIONS", "SEQUENCE",  "PROJECT"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-	
-	order2 = [ "BOX_NUMBER",  "ROW",  "COLUMN","REGISTRATION_DATE"]
-	new_list2 = []
-	for (var a in order2) {
-		for (var b in pairs) {
-			if (pairs[b][0] == order2[a]) {
-				new_list2.push(pairs[b]);
-				break;
-			}
-		}
-	}
-	
-	return new_list2;
-}
-
-
-
-/** Initialize the oligos variable */
-function initializeOligos(result)
-{
-	// Split the oligos into two groups, the ones that start with FRO in their sample name and the other ones.
-	var froOligos = [], otherOligos = [];
-	var froRegex = /^FRO[0-9]+/;
-	froRegex.compile(froRegex);
-	result.forEach(function(sample) { 
-		if (froRegex.test(sample.code)) {
-			froOligos.push(sample);
-		} else {
-			otherOligos.push(sample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherOligos.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	froOligos.sort(function(a, b) {
-		// Sort based on the FRO number
-		var froNumberA = parseInt(a.code.substring(3));
-		var froNumberB = parseInt(b.code.substring(3));
-		return (froNumberA < froNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of oligos
-	oligos = froOligos.concat(otherOligos);
-}
-
-/** Set the size of the oligo-table based on whether or not inspectors are visible */
-function resizeOligoTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%"
-	areInspectorsVisible = true;
-		
-	var oligoTableTransition = d3.selectAll('div.oligo-table-data-cell');
-	oligoTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectOligo(oligo)
-{
-	if (inspectedOligos.indexOf(oligo) < 0) {
-		inspectedOligos.push(oligo);
-		openbisServer.listDataSetsForSample(oligo, true, dataset.curry(oligo));
-	}
-	resizeOligoTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(oligo)
-{
-	var index = inspectedOligos.indexOf(oligo);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedOligos.splice(index, 1);
-	resizeOligoTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedOligos, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-		
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-				
-
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-			
-
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeOligos(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (oligos.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#oligo-table").selectAll("tr.oligo-table-data").data(oligos);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "oligo-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectOligo)
-		.selectAll("td").data(function(sample) {
-			var tableFields = [sample.identifier.slice(11,50), sample.properties.TARGET, sample.properties.DIRECTION,sample.properties.RESTRICTION_ENZYME, sample.properties.PROJECT];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "oligo-table-data-cell")
-			.html(String)
-
-	$('a').click(function(e){
-	   e.stopPropagation();
-	});
-}
-
-function oligoFilter(filter, property, element, index, array) {
-
-	filter = filter.toLowerCase();
-	if (filter.length < 1) return true;
-
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(codeFilterText, targetFilterText, directionFilterText, enzymeFilterText, projectFilterText)
-{
-	if (codeFilterText == undefined) 
-	{
-		codeFilterText = "";
-	}
-
-	if (targetFilterText == undefined) 
-	{
-		targetFilterText = "";
-	}
-
-	if (directionFilterText == undefined) 
-	{
-		directionFilterText = "";
-	}
-	
-	if (enzymeFilterText == undefined) 
-	{
-		enzymeFilterText = "";
-	}
-	
-	if (projectFilterText == undefined) 
-	{
-		projectFilterText = "";
-	}
-		
-	var displayedOligos = oligos.filter(oligoFilter.curry(codeFilterText, "CODE"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(targetFilterText, "TARGET"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(directionFilterText, "DIRECTION"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(enzymeFilterText, "RESTRICTION_ENZYME"));
-	displayedOligos = displayedOligos.filter(oligoFilter.curry(projectFilterText, "PROJECT"));	
-
-
-	var selection2 = d3.select("#vis").select("#oligo-table").selectAll("tr.oligo-table-data").data(oligos);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedOligos) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-		
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
- 
- function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "OLIGO" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamples(sampleCriteria, displayReturnedSamples);
-
-}
- 
- 
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#code_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});	
-		
-	$('#target_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-	
-	$('#direction_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-
-  $('#enzyme_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-	
-	$('#project_filter').keyup(function() {
-		visualize($('#code_filter').val(), $('#target_filter').val(), $('#direction_filter').val(), $('#enzyme_filter').val(), $('#project_filter').val());
-	});
-
-
-
-
-
-
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-
-</script>
-
-</head>
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Oligos</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr>
-										<td></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Target filter" id="target_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Direction Num filter" id="direction_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Enzyme Name filter" id="enzyme_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Project filter" id="project_filter" type="text"></td>
-									</tr>
-									<tr class="oligo-table-header"><th>Code</th><th>Target</th><th>Direction</th><th>Restriction Enzyme</th><th>Project</th><th></th></tr>
-								</thead>
-								<tbody id='oligo-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/pcr-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/pcr-browser.html
deleted file mode 100644
index ac74912319b4e446b560464685dcf441613fa307..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/pcr-browser.html
+++ /dev/null
@@ -1,1009 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">PCR</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="pcr-table-header"><th>Code</th><th>Name</th><th>For What</th><th>Template</th><th>Publication</th><th></th></tr>
-								</thead>
-								<tbody id='pcr-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All pcr
-var pcrs = null;
-
-/// The pcr that are currently being inspected
-var inspectedpcrs = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				
-			}	  
-			
-			   
-}								
-	
-	
-
-
-	
-};
-
-function reformatString(sample)
-{
-
-
-  		sample.properties.WHAT_FOR = [];
-  		console.log(sample.properties.FOR_WHAT)
- 	
-			if (sample.properties.FOR_WHAT != "undefined") {
-				newArray = sample.properties.FOR_WHAT.split(/\d/);
-				for(i=0; i<newArray.length; i++) {
-   				WHAT_FOR = i+' '+newArray[i]+ "\n";
-   				sample.properties.WHAT_FOR.push(WHAT_FOR)
-   				
-				}
-				
-			console.log(sample.properties.WHAT_FOR)
-			//sample.properties.WHAT_FOR.push(sample.properties.WHAT_FOR)
-			}
-			
-			
-
-}
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION", "MATERIALS", "ORGANISM"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["PROCEDURE",  "pcr_EVALUATION", "DETAILS", "COMMENTS", "PUBLICATION"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS", "GENERAL_pcr_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","SUGGESTIONS", "pcr_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    pcr = objectOrId;
-  } else {
-  	pcr = pcrsById[objectOrId];
-  }
-  
-  return pcr;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the pcrs variable */
-function initializepcrs(result)
-{
-      // Construct a map of all pcrs by id
-  pcrsById = {};
-
-	// Split the pcrs into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frppcrs = [], otherpcrs = [];
-	var frpRegex = /^FRPROT[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        pcrsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the pcrsById map
-	    theSample = pcrsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frppcrs.push(theSample);
-		} else {
-			otherpcrs.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		reformatString(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherpcrs.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frppcrs.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(6));
-		var frpNumberB = parseInt(b.code.substring(6));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of pcrs
-	pcrs = frppcrs.concat(otherpcrs);
-}
-
-
-
-
-/** Set the size of the pcr-table based on whether or not inspectors are visible */
-function resizepcrTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var pcrTableTransition = d3.selectAll('div.pcr-table-data-cell');
-	pcrTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectpcr(pcr)
-{
-	if (inspectedpcrs.indexOf(pcr) < 0) {
-		inspectedpcrs.push(pcr);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var pcrToSend = $.extend({}, pcr);
-		delete pcrToSend.parents;
-		delete pcrToSend.children;
-	
-	}
-	resizepcrTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(pcr)
-{
-	var index = inspectedpcrs.indexOf(pcr);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedpcrs.splice(index, 1);
-	resizepcrTable();
-	updateInspectors(1000);
-}
-
-
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedpcrs, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectpcr(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectpcr(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializepcrs(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (pcrs.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#pcr-table").selectAll("tr.pcr-table-data").data(pcrs);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "pcr-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectpcr)
-		.selectAll("td").data(function(sample) {
-			tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.WHAT_FOR, sample.properties.TEMPLATE, sample.properties.PUBLICATION];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "pcr-table-data-cell")
-			.html(String)
-			
-	$('a').click(function(e){
-		e.stopPropagation();
-	});
-}
-
-function pcrFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#pcr-table").selectAll("tr.pcr-table-data").data(pcrs);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedpcrs) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "PCR" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/plasmid-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/plasmid-browser.html
deleted file mode 100644
index 2971d8e1639bbd16e3fa0f1e19450223bca389ec..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/plasmid-browser.html
+++ /dev/null
@@ -1,827 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Plasmids</h1>
-		</center>
-	
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr>
-										<td></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Owner filter" id="owner_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Owner Num filter" id="ownerNum_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Plasmid Name filter" id="plasmidName_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Backbone filter" id="backbone_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Antibiotic filter" id="antibiotic_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Marker filter" id="marker_filter" type="text"></td>
-									</tr>
-									<tr class="plasmid-table-header"><th>Code</th><th>Owner</th><th>Owner Number</th><th>Plasmid Name</th><th>Backbone</th><th>Bacterial Antibiotic Resistance</th><th>(Yeast) Marker</th><th></th></tr>
-								</thead>
-								<tbody id='plasmid-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-//openbisServer = new openbis('https://localhost:8443/openbis/openbis', 'https://bs-mbp156.ethz.ch:8443/datastore_server');
-
-
-// Some global variables we refer to
-
-/// All plasmids
-var plasmids = null;
-
-/// The plasmids that are currently being inspected
-var inspectedPlasmids = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 500;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "COMMENTS", "PROJECT",  "PLASMIDS", "YEAST_PARENTS", "PLASMID_NAME",  "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    plasmid = objectOrId;
-  } else {
-  	plasmid = plasmidsById[objectOrId];
-  }
-  
-  return plasmid;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the plasmids variable */
-function initializePlasmids(result)
-{
-      // Construct a map of all plasmids by id
-  plasmidsById = {};
-
-	// Split the plasmids into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpPlasmids = [], otherPlasmids = [];
-	var frpRegex = /^FRP[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(
-		function(sampleOrId) {
-			var theSample = sampleOrId;
-			function storeSamplesById(referredSample) {
-      		  if (isNaN(referredSample)) {
-        		  plasmidsById[referredSample["@id"]] = referredSample;
-        		  if (referredSample.parents) {referredSample.parents.forEach(storeSamplesById);}
-        		  if (referredSample.children) {referredSample.children.forEach(storeSamplesById);}
-      		}
-    }	 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-      } else {
-	    // This is referring to an object in the plasmidsById map
-	    theSample = plasmidsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpPlasmids.push(theSample);
-		} else {
-			otherPlasmids.push(theSample);
-		}
-	});
-	
-	// Sort each of the groups
-	otherPlasmids.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpPlasmids.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(3));
-		var frpNumberB = parseInt(b.code.substring(3));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of plasmids
-	plasmids = frpPlasmids.concat(otherPlasmids);
-}
-
-
-
-
-/** Set the size of the plasmid-table based on whether or not inspectors are visible */
-function resizePlasmidTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	if (inspectedPlasmids.length > 0) {
-		cellWidth = ((getAppWidth() - inspectorsWidth) / 9) - padding + "px";
-		console.log(cellWidth)
-		areInspectorsVisible = true;
-	} else {
-		cellWidth = "100%";
-		areInspectorsVisible = false;
-	}
-	var plasmidTableTransition = d3.selectAll('div.plasmid-table-data-cell');
-	plasmidTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectPlasmid(plasmid)
-{
-	if (inspectedPlasmids.indexOf(plasmid) < 0) {
-		inspectedPlasmids.push(plasmid);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var plasmidToSend = $.extend({}, plasmid);
-		delete plasmidToSend.parents;
-		delete plasmidToSend.children;
-		openbisServer.listDataSetsForSample(plasmidToSend, true, dataset.curry(plasmid));
-	}
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(plasmid)
-{
-	var index = inspectedPlasmids.indexOf(plasmid);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedPlasmids.splice(index, 1);
-	resizePlasmidTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedPlasmids, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectPlasmid(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializePlasmids(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (plasmids.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#plasmid-table").selectAll("tr.plasmid-table-data").data(plasmids);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "plasmid-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectPlasmid)
-		.selectAll("td").data(function(sample) { 
-			var tableFields = [sample.identifier.slice(11,50), sample.properties.OWNER.split('_').join(" "), sample.properties.OWNER_NUMBER, sample.properties.PLASMID_NAME, sample.properties.BACKBONE.split('_').join(' '), sample.properties.BACTERIAL_ANTIBIOTIC_RESISTANCE,sample.properties.YEAST_MARKER]; 
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "plasmid-table-data-cell")
-			.html(String)
-
-	$('a').click(function(e){
-	  e.stopPropagation();
-	});
-}
-
-function plasmidFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, plasmidNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (plasmidNameFilterText == undefined) 
-	{
-		plasmidNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedPlasmids = plasmids.filter(plasmidFilter.curry(ownerFilterText, "OWNER"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(plasmidNameFilterText, "PLASMID_NAME"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedPlasmids = displayedPlasmids.filter(plasmidFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#plasmid-table").selectAll("tr.plasmid-table-data").data(plasmids);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedPlasmids) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "PLASMID" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#plasmidName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#plasmidName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/search-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/search-browser.html
deleted file mode 100644
index 21ec57c6e9eb1956ef5eb56dcbcee21aa1a0c0d7..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/search-browser.html
+++ /dev/null
@@ -1,409 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-//openbisServer = new openbis("/openbis/openbis", "https://localhost:8444/datastore_server")
-// Some global variables we refer to
-
-/// All eachsamples
-var eachsamples = null;
-
-/// The eachsamples that are currently being inspected
-var inspectedEachsamples = [];
-
-
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-/** Initialize the eachsamples variable */
-function initializeEachsamples(result)
-{
-	// Split the eachsamples into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all eachsamples by id
-  eachsamplesById = {};
-
-	// Split the eachsamples into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryEachsamples = [], otherEachsamples = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        eachsamplesById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the eachsamplesById map
-	    theSample = eachsamplesById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryEachsamples.push(theSample);
-		} else {
-			otherEachsamples.push(theSample);
-		}
-		
-	});
-	
-	// Sort each of the groups
-	otherEachsamples.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryEachsamples.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of eachsamples
-	eachsamples = fryEachsamples.concat(otherEachsamples);
-	console.log(eachsamples)	
-}
-
-
-
-/** Set the size of the eachsample-table based on whether or not inspectors are visible */
-
-
-function inspectEachsample(eachsample)
-{
-  if (null == eachsample) {
-  	// Ignore this -- it is not a eachsample
-  	return;
-  }
- 
- 
-	 
-  window.open(eachsample.sampleTypeCode.toLowerCase() +"-browser.html?code=" + eachsample.code, "_blank");
-  
-
-}
-
-function closeInspector(eachsample)
-{
-	var index = inspectedEachsamples.indexOf(eachsample);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedEachsamples.splice(index, 1);
-	resizeEachsampleTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{ 
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeEachsamples(data.result);
-	
-	
-
- 
-	d3.select("#vis").select("#eachsample-table").selectAll("tr.eachsample-table-data").remove();
-	var selection = d3.select("#vis").select("#eachsample-table").selectAll("tr.eachsample-table-data").data(eachsamples);
-		// Code under enter is run if there is no HTML element for a data element
-
-
-var searchText = $('#search').val();
-var searchRegexpText = ("*" + searchText + "*").replace(/\*/g, ".*");
-var searchRegexp = new RegExp(searchRegexpText, "i");
-
-selection
-	  .enter()
-		.append("tr")	  
-	 	.attr("class", "eachsample-table-data")
-		.style("cursor", "pointer")
-		.on("click", inspectEachsample)
-		.selectAll("td").data(function(sample) { return [sample.sampleTypeCode, sample.identifier.slice(11,50), sample.properties, sample.properties ]; })
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "eachsample-table-data-cell")
-			.text(function(d, index){
-			  if(index == 2){
-			    if(searchText && searchText.length > 0 && d){
-				    for(propertyName in d){
-				    	  var propertyValue = d[propertyName];
-				        if(propertyValue && searchRegexp.test(propertyValue)){
-							    return propertyValue;
-								  }			    
-				    }
-					}	    
-			  }
-			  else if (index ==3){
-			    if(searchText && searchText.length > 0 && d){
-				    for(propertyName in d){
-				    	  var propertyValue = d[propertyName];
-				        if(propertyValue && searchRegexp.test(propertyValue)){
-							    return propertyName;
-								  }			    
-				    }
-					}	    
-			  }
-			  else{
-			    return d;
-			  }
-			  
-			  return "" 
-			})
-			
-}
-
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-function showSearchedSamples()
-{
-	var sampleCriteria = 
-	{
-   matchClauses : 
-            [ {"@type":"AnyFieldMatchClause",
-                fieldType : "ANY_FIELD",
-                desiredValue : "*" + $("#search").val() + "*"
-            }
-            ],
-        operator : "MATCH_ANY_CLAUSES"
-};
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-	
-}
-
-
-
-function showMatchingSamples()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",
-				attribute:"TYPE",			
-				desiredValue : "*" 
-			}
-			],
-		operator : "MATCH_ANY_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-
-}
-
-function showMatchingField()
-{
-	var sampleCriteria = 
-	{
-		matchClauses : 
-			[ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",
-				attribute:"TYPE",			
-				desiredValue : "*" 
-			}
-			],
-		operator : "MATCH_ANY_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES"], displayReturnedSamples);
-
-}
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	populateMenuNew();
-	
-	//showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$("#search").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('#search').submit();
-			return false;
-		} else {
-			return true;
-		}
-	});
-	
-	$('#search').submit(function() {
-		showSearchedSamples();
-	});
-	
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-  
-</script>
-
-</head>
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Search All Sample Types</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					
-				    <div id="search-field">
-						<form> <input id="search" type="text" class="search-query" placeholder="Search"> </form>
-				    </div>
-					
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="eachsample-table-header"><th>Sample Type</th><th>Code</th><th>Matched Text</th><th>Matching Field</th></tr>
-								</thead>
-								<tbody id='eachsample-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/solutions_buffers-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/solutions_buffers-browser.html
deleted file mode 100644
index 1fc3d644fd30e5d767ea70b88fdf17098cfdc5e5..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/solutions_buffers-browser.html
+++ /dev/null
@@ -1,984 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Solutions Buffers</h1>
-		</center>
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="buffer-table-header"><th>Code</th><th>Name</th><th>Storage</th><th>For What</th><th></th></tr>
-								</thead>
-								<tbody id='buffer-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-// Some global variables we refer to
-
-/// All buffers
-var buffers = null;
-
-/// The buffers that are currently being inspected
-var inspectedbuffers = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var mediaValue = sample.properties.MEDIA;
-  	sample.properties.MEDIA_PARENTS = [];
-	
-		if (!xmlValueRegex.test(mediaValue))
-		return;
-
- 	  globalValue = mediaValue;
-		var mediaXml = xmlParser.parseFromString(mediaValue, "text/xml");
-	
-	
-		for (i=1; i < mediaXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = mediaXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var MEDIA_PARENTS = null;
-			
-				
-				MEDIA_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.MEDIA_PARENTS.push(MEDIA_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				console.log(sample.properties.SOLUTIONS_BUFFERS_PARENTS)
-			}	  
-			
-			   
-}								
-			
-	
-};
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["NAME", "FOR_WHAT", "ORGANISM", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE","STOCK_CONCENTRATION", "STERILIZATION", "KIT" ]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["DETAILS",  "COMMENTS",  "PUBLICATION"   ]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","MEDIA_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "XMLCOMMENTS","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    buffer = objectOrId;
-  } else {
-  	buffer = buffersById[objectOrId];
-  }
-  
-  return buffer;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the buffers variable */
-function initializebuffers(result)
-{
-      // Construct a map of all buffers by id
-  buffersById = {};
-
-	// Split the buffers into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpbuffers = [], otherbuffers = [];
-	var frpRegex = /^FRSOB[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        buffersById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the buffersById map
-	    theSample = buffersById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpbuffers.push(theSample);
-		} else {
-			otherbuffers.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-	});
-	
-	// Sort each of the groups
-	otherbuffers.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpbuffers.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(5));
-		var frpNumberB = parseInt(b.code.substring(5));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of buffers
-	buffers = frpbuffers.concat(otherbuffers);
-}
-
-
-
-/** Set the size of the buffer-table based on whether or not inspectors are visible */
-function resizebufferTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var bufferTableTransition = d3.selectAll('div.buffer-table-data-cell');
-	bufferTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectbuffer(buffer)
-{
-	if (inspectedbuffers.indexOf(buffer) < 0) {
-		inspectedbuffers.push(buffer);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var bufferToSend = $.extend({}, buffer);
-		delete bufferToSend.parents;
-		delete bufferToSend.children;
-		openbisServer.listDataSetsForSample(bufferToSend, true, dataset.curry(buffer));
-	}
-	resizebufferTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(buffer)
-{
-	var index = inspectedbuffers.indexOf(buffer);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedbuffers.splice(index, 1);
-	resizebufferTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedbuffers, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbuffer(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectbuffer(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-							
-	
-			
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-//	var dataSetRow = box.select("table.properties").append("tr");
-//	dataSetRow
-//				.append("td")
-//					.attr("class", "property")
-//					.text("DATA_SETS");
-//	dataSetRow
-//				.append("td")
-//					.attr("class", "data_sets");
-	
-
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializebuffers(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (buffers.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#buffer-table").selectAll("tr.buffer-table-data").data(buffers);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "buffer-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectbuffer)
-		.selectAll("td").data(function(sample) { 
-				tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.STORAGE, sample.properties.FOR_WHAT];
-				tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-				return tableFields;
-			})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "buffer-table-data-cell")
-			.html(String)
-	
-	$('a').click(function(e){
-		e.stopPropagation();
-	});
-}
-
-function bufferFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, bufferNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (bufferNameFilterText == undefined) 
-	{
-		bufferNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedbuffers = buffers.filter(bufferFilter.curry(ownerFilterText, "OWNER"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(bufferNameFilterText, "buffer_NAME"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedbuffers = displayedbuffers.filter(bufferFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#buffer-table").selectAll("tr.buffer-table-data").data(buffers);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedbuffers) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "SOLUTIONS_BUFFERS" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#bufferName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#bufferName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/template-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/template-browser.html
deleted file mode 100644
index f4304eab78fee9baf9789061ea31828fbc63a5ad..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/template-browser.html
+++ /dev/null
@@ -1,919 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-	
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-// Some global variables we refer to
-var SAMPLE_TYPE = "TEMPLATE_SAMPLE";
-var SAMPLE_TYPE_PROPERTIES = ["TEMPLATE_DESCRIPTION", "TEMPLATE_NUMBER", "TEMPLATE_TEXT"];
-var SAMPLE_TYPE_PROPERTIES_DISPLAY_NAME = ["Description", "Number", "Text"];
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var plasmidValue = sample.properties.PLASMIDS;
-  sample.properties.PLASMIDS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(plasmidValue))
-		return;
-
-  globalValue = plasmidValue;
-	var plasmidXml = xmlParser.parseFromString(plasmidValue, "text/xml");
-	
-	
-	for (i=1; i < plasmidXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = plasmidXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	 		   		
-						if (sampleNode.attributes.getNamedItem("annotation") != null)  {
-	 	  				 var annotation = sampleNode.attributes.getNamedItem("annotation").value;
-						}	 		   		
-						else{
-								var annotation = "";
-						}
-						if (sampleNode.attributes.getNamedItem("rel") != null) {
-								var relationship = sampleNode.attributes.getNamedItem("rel").value;
-						}	
-						else{
-								var relationship = "";
-						}  	  		
-				 }
-			
-			  var PLASMIDS_PARENTS = null;
-			
-				if (relationship == "INT"){
-				  PLASMIDS_PARENTS = " " + code + "::" + annotation;
-				}
-				if (relationship == "MOD"){
-			   	PLASMIDS_PARENTS = " " + code + "_" + annotation;
-				}
-				if (relationship == "DEL"){
-			  	 PLASMIDS_PARENTS = " " + code + "_D_" + annotation;
-				}
-				if (relationship == "") {
-						PLASMIDS_PARENTS = code;
-				}
-				
-				sample.properties.PLASMIDS_PARENTS.push(PLASMIDS_PARENTS);
-	
-}			
-			
-			
-			var yeastParentsValue = sample.properties.YEAST_PARENTS;
- 	   sample.properties.YEASTS_PARENTS = [];
-  
-	
-	if (!xmlValueRegex.test(yeastParentsValue))
-		return;
-
- 		 globalValue2 = yeastParentsValue;
-		 var yeastParentsXml = xmlParser.parseFromString(yeastParentsValue, "text/xml");
-	
-		for (i=1; i < yeastParentsXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	
-			var sampleYeastNode = yeastParentsXml.childNodes.item(0).childNodes.item(i);
-			
- 		  var yeastsDisplay = null;
-  
-			if (sampleYeastNode.attributes.getNamedItem("code") != null ) {
-					var yeastCode = sampleYeastNode.attributes.getNamedItem("code").value;
-			}
-			
-	yeastsDisplay = yeastCode;
-		
-	sample.properties.YEASTS_PARENTS.push(yeastsDisplay);
-
-	}
-	
-};
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = SAMPLE_TYPE_PROPERTIES
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order5 = ["YEASTS_PARENTS"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-		return new_list5;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    yeast = objectOrId;
-  
-  } else {
-  	yeast = yeastsById[objectOrId];
-  
-  }
-  
- 
-  return yeast;
-}
-
-
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list5=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list5.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list5;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list6=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-		data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list6.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list6;
-}
-
-
-
-
-
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(yeast)
-{
-	var index = inspectedYeasts.indexOf(yeast);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedYeasts.splice(index, 1);
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedYeasts, function (d) { return d.code });
-
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-
-	var propsTable = box.append("table").attr("class", "properties");
-
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-	var propsTable5 = box.append("table").attr("class", "properties");
-	propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) }).enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					 	
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTable2 = box.append("table").attr("class", "properties");
-	propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-	var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-
-	downloadTable
-			.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
- 
-
-var selection = d3.select("#vis").select("#sample-data-holder").selectAll("tr.yeast-table-data").data(yeasts);
-// Code under enter is run if there is no HTML element for a data element
-		
-	selection
-	  .enter()
-		.append("tr")
-	 	.attr("class", "yeast-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectYeast)
-		.selectAll("td").data(function(sample) {
-			var tableFields = [sample.code];
-			for(var i=0; i<SAMPLE_TYPE_PROPERTIES.length; i++) {
-				tableFields[tableFields.length] = sample.properties[SAMPLE_TYPE_PROPERTIES[i]];
-			}
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "yeast-table-data-cell")
-			.html(String)
-
-			$('a').click(function(e){
-			   e.stopPropagation();
-			});
-}
-
-
-/**
- * Filters
- */
- 
- 
-function yeastFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
- 
- 
-
-
-/**
- * Function visualize filters 
- */
-function visualize(filterResults)
-{
-	var displayedYeasts;
-	
-	for(var i=0; i < SAMPLE_TYPE_PROPERTIES.length;i++) {
-		if(i == 0) {
-			displayedYeasts = yeasts.filter(yeastFilter.curry(((filterResults[i] == undefined)?"":filterResults[i]), SAMPLE_TYPE_PROPERTIES[i]));
-		} else {
-			displayedYeasts = displayedYeasts.filter(yeastFilter.curry((filterResults[i] == undefined)?"":filterResults[i],SAMPLE_TYPE_PROPERTIES[i]));
-		}
-	}
-	
-	
-	var selection2 = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-	
-		selection2.style("display", function(data) {
-		 		if ($.inArray(data, displayedYeasts) != -1) {
-					return "table-row"
-				} 
-				else {
-					return  "none"
-				}
-			});
-			
-};
-
-
-
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : SAMPLE_TYPE
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	//showChildrenSamples();
-	populateMenuNew();
-	createTableFromProperties();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	
-	
-	$('#search').keyup(function() {
-		visualize($('#search').val());
-	});
-	
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-
-
-
-
-
-/**
- * Show and Hide the filters when clicking on the Filters button 
- */
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-    
-  
-</script>
-
-</head>
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-	
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Sample Template</h1>
-		</center>
-		
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-		
-					<div id="vis">
-						   <div id="tableContainer"></div>
-					</div>
-					
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-			
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/western_blotting-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/western_blotting-browser.html
deleted file mode 100644
index 3723d772f12314d716e93f99a66105f2152fc686..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/western_blotting-browser.html
+++ /dev/null
@@ -1,1057 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-
-</head>
-
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Western Blotting</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr class="western_blotting-table-header"><th>Code</th><th>Name</th><th>For What</th><th>Storage</th><th>Publication</th><th></th></tr>
-								</thead>
-								<tbody id='western_blotting-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-	
-<script>
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-
-
-// Some global variables we refer to
-
-/// All western_blotting
-var western_blottings = null;
-
-/// The western_blotting that are currently being inspected
-var inspectedwestern_blottings = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var chemicalValue = sample.properties.CHEMICALS;
-  sample.properties.CHEMICALS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(chemicalValue))
-		return;
-
-  globalValue = chemicalValue;
-	var chemicalXml = xmlParser.parseFromString(chemicalValue, "text/xml");
-	
-	
-	for (i=1; i < chemicalXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = chemicalXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var CHEMICALS_PARENTS = null;
-			
-				
-				CHEMICALS_PARENTS = "\n\n    " +code  +  " (" + name + ") " + concentration ;
-				
-				
-				
-				sample.properties.CHEMICALS_PARENTS.push(CHEMICALS_PARENTS);
-				
-
-			}	  
-}			
-	
-	
-	
-		var antibodyValue = sample.properties.ANTIBODIES;
-  	sample.properties.ANTIBODY_PARENTS = [];
-	
-		if (!xmlValueRegex.test(antibodyValue))
-		return;
-
- 	  globalValue = antibodyValue;
-		var antibodyXml = xmlParser.parseFromString(antibodyValue, "text/xml");
-	
-	
-		for (i=1; i < antibodyXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = antibodyXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var ANTIBODY_PARENTS = null;
-			
-				
-				ANTIBODY_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.ANTIBODY_PARENTS.push(ANTIBODY_PARENTS);
-				
-		
-			}	  
-			
-			   
-}			
-
-
-
-		var bufferValue = sample.properties.SOLUTIONS_BUFFERS;
-  	sample.properties.SOLUTIONS_BUFFERS_PARENTS = [];
-	
-		if (!xmlValueRegex.test(bufferValue))
-		return;
-
- 	  globalValue = bufferValue;
-		var bufferXml = xmlParser.parseFromString(bufferValue, "text/xml");
-	
-	
-		for (i=1; i < bufferXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = bufferXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	  	  		
-	 		   		
-						if (sampleNode.attributes.getNamedItem("concentration") != null)  {
-	 	  				 var concentration = sampleNode.attributes.getNamedItem("concentration").value;
-						}	 		   		
-						else{
-								var concentration = "n.a.";
-						}
-						if (sampleNode.attributes.getNamedItem("name") != null) {
-								var name = sampleNode.attributes.getNamedItem("name").value;
-						}	
-						else{
-								var name = "n.a.";
-						}  	  		
-				 }
-				 
-				 
-			
-				if (code !=null){		
-				
-							
-			  var SOLUTIONS_BUFFERS_PARENTS = null;
-			
-				
-				SOLUTIONS_BUFFERS_PARENTS = "\n\n    " +code  +  "(" + name + ")" + concentration ;
-				
-				
-				
-				sample.properties.SOLUTIONS_BUFFERS_PARENTS.push(SOLUTIONS_BUFFERS_PARENTS);
-				
-				
-			}	  
-			
-			   
-}								
-	
-	
-				
-	
-
-	
-};
-
-function reformatString(sample)
-{
-
-
-  		sample.properties.WHAT_FOR = [];
-  		console.log(sample.properties.FOR_WHAT)
- 	
-			if (sample.properties.FOR_WHAT != "undefined") {
-				newArray = sample.properties.FOR_WHAT.split(/\d/);
-				for(i=0; i<newArray.length; i++) {
-   				WHAT_FOR = i+' '+newArray[i]+ "\n";
-   				sample.properties.WHAT_FOR.push(WHAT_FOR)
-   				
-				}
-				
-			console.log(sample.properties.WHAT_FOR)
-			//sample.properties.WHAT_FOR.push(sample.properties.WHAT_FOR)
-			}
-			
-			
-
-}
-
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
- 					
- 					
-	order1 = ["NAME", "FOR_WHAT", "SUPPLIER", "ARTICLE_NUMBER", "LOCAL_ID",  "STORAGE", "STOCK_CONCENTRATION", "STERILIZATION", "MATERIALS", "ORGANISM", "KIT"]
-	new_list1 = []
-	for (var i in order1) {
-	  for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-	return new_list1;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	order2 = ["PROCEDURE",  "PROTOCOL_EVALUATION","DETAILS", "EPITOPE",  "CLONALITY", "ISOTYPE", "COMMENTS",  "PUBLICATION"   ]
-	
-	
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["CHEMICALS_PARENTS","ANTIBODY_PARENTS","SOLUTIONS_BUFFERS_PARENTS" ]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order4 = ["MEMBRANE","ANTIBODY_DILUTION","ANTIBODY_SOLUTION", "COMMENTS" ]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order5 = [ "XMLCOMMENTS","SUGGESTIONS", "PROTOCOL_MODIFICATIONS", "REGISTRATION_DATE"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list5;
-}
-
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    western_blotting = objectOrId;
-  } else {
-  	western_blotting = western_blottingsById[objectOrId];
-  }
-  
-  return western_blotting;
-}
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list3=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list3.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list3;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list4=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-	  data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list4.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list4;
-}
-
-
-/** Initialize the western_blottings variable */
-function initializewestern_blottings(result)
-{
-      // Construct a map of all western_blottings by id
-  western_blottingsById = {};
-
-	// Split the western_blottings into two groups, the ones that start with FRP in their sample name and the other ones.
-	var frpwestern_blottings = [], otherwestern_blottings = [];
-	var frpRegex = /^FRWB[0-9]+/;
-	frpRegex.compile(frpRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        western_blottingsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the western_blottingsById map
-	    theSample = western_blottingsById[sampleOrId];
-		}       
- 		if (frpRegex.test(theSample.code)) {
-			frpwestern_blottings.push(theSample);
-		} else {
-			otherwestern_blottings.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-		reformatString(theSample);
-		
-	});
-	
-	// Sort each of the groups
-	otherwestern_blottings.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	frpwestern_blottings.sort(function(a, b) {
-		// Sort based on the FRP number
-		var frpNumberA = parseInt(a.code.substring(6));
-		var frpNumberB = parseInt(b.code.substring(6));
-		return (frpNumberA < frpNumberB) ? -1 : 1;
-	});
-	
-	// Combine the two groups back together to produce the full collection of western_blottings
-	western_blottings = frpwestern_blottings.concat(otherwestern_blottings);
-}
-
-
-
-
-/** Set the size of the western_blotting-table based on whether or not inspectors are visible */
-function resizewestern_blottingTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 10;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var western_blottingTableTransition = d3.selectAll('div.western_blotting-table-data-cell');
-	western_blottingTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectwestern_blotting(western_blotting)
-{
-	if (inspectedwestern_blottings.indexOf(western_blotting) < 0) {
-		inspectedwestern_blottings.push(western_blotting);
-		
-		// When requesting information about the sample, we don't need parents
-		// and children, so send a copy of the saple without that information.
-		var western_blottingToSend = $.extend({}, western_blotting);
-		delete western_blottingToSend.parents;
-		delete western_blottingToSend.children;
-	
-	}
-	resizewestern_blottingTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(western_blotting)
-{
-	var index = inspectedwestern_blottings.indexOf(western_blotting);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedwestern_blottings.splice(index, 1);
-	resizewestern_blottingTable();
-	updateInspectors(1000);
-}
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedwestern_blottings, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-		
-  var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectwestern_blotting(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			.on("click", function(trData) { inspectwestern_blotting(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-						
-		
-		var propsTable2 = box.append("table").attr("class", "properties");
-		propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");		
-		
-		
-			var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	var propsTable5 = box.append("table").attr("class", "properties");
-	propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-					
-				
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	// Add table row for data sets
-	var dataSetRow = box.select("table.properties").append("tr");
-	dataSetRow
-				.append("td")
-					.attr("class", "property")
-					.text("DATA_SETS");
-	dataSetRow
-				.append("td")
-					.attr("class", "data_sets");
-	
-}
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializewestern_blottings(data.result);
-	
-	// This will show the object in the log -- helpful for debugging
-	// console.log(data.result);
-	if (western_blottings.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
-	var selection = d3.select("#vis").select("#western_blotting-table").selectAll("tr.western_blotting-table-data").data(western_blottings);
-		// Code under enter is run if there is no HTML element for a data element
-	
-	
-	
-	selection
-		.enter()
-		.append("tr")
-		.attr("class", "western_blotting-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectwestern_blotting)
-		.selectAll("td").data(function(sample) {
-			tableFields = [sample.identifier.slice(11,50), sample.properties.NAME, sample.properties.WHAT_FOR, sample.properties.STORAGE, sample.properties.PUBLICATION];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "western_blotting-table-data-cell")
-			.html(String)
-
-	$('a').click(function(e){
-		e.stopPropagation();
-	});
-}
-
-function western_blottingFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
-
-function visualize(ownerFilterText, ownerNumFilterText, antibodyNameFilterText, backboneFilterText, antibioticFilterText, markerFilterText )
-{
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (antibodyNameFilterText == undefined) 
-	{
-		antibodyNameFilterText = "";
-	}
-
-	if (backboneFilterText == undefined) 
-	{
-		backboneFilterText = "";
-	}
-	
-	if (antibioticFilterText == undefined) 
-	{
-		antibioticFilterText = "";
-	}
-
-	if (markerFilterText == undefined) 
-	{
-		markerFilterText = "";
-	}
-	
-	var displayedAntibodys = antibodys.filter(antibodyFilter.curry(ownerFilterText, "OWNER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibodyNameFilterText, "ANTIBODY_NAME"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(backboneFilterText, "BACKBONE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(antibioticFilterText, "BACTERIAL_ANTIBIOTIC_RESISTANCE"));
-	displayedAntibodys = displayedAntibodys.filter(antibodyFilter.curry(markerFilterText, "YEAST_MARKER"));
-	
-
-
-	var selection2 = d3.select("#vis").select("#western_blotting-table").selectAll("tr.western_blotting-table-data").data(western_blottings);
-		// Code under enter is run if there is no HTML element for a data element
-	
-
-
-		selection2.style("display", 
-			function(data) {
-				if ($.inArray(data, displayedwestern_blottings) != -1) {
-					return "table-row"
-				} else {
-					return  "none"
-				}
-			});
-
-	
-}
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "WESTERN_BLOTTING" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		console.log(data);
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	populateMenuNew();
-	
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-
-  $('#antibodyName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#backbone_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#antibiotic_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	$('#marker_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#antibodyName_filter').val(), $('#backbone_filter').val(), $('#antibiotic_filter').val(), $('#marker_filter').val());
-	});
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-		// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-</script>
-
-
-
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/yeast-browser.html b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/yeast-browser.html
deleted file mode 100644
index a022963db01e6fc6632bbdbf423fba9a49a14c35..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/html/yeast-browser.html
+++ /dev/null
@@ -1,1024 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
-	<title>YeastLab Browser</title>
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap.css" />
-	<link type="text/css" rel="stylesheet" href="./bootstrap/css/bootstrap-responsive.css" />
-	<link type="text/css" rel="stylesheet" href="./css/style.css" />
-	
-	<script type="text/javascript" src="/openbis/resources/js/jquery.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis.js"></script>
-	<script type="text/javascript" src="/openbis/resources/js/openbis-login.js"></script>
-	<!-- <script To speed development, cache the requests type="text/javascript" src="/openbis/resources/js/openbis-request-cache.js"></script> -->
-	<script type="text/javascript" src="./js/d3.js"></script>
-	<script type="text/javascript" src="./js/d3.layout.js"></script>
-	<script type="text/javascript" src="./js/d3.time.js"></script>
-	<script type="text/javascript" src="./js/d3.tsv.js"></script>
-	<script type="text/javascript" src="./js/infra.js"></script>
-	<script type="text/javascript" src="./js/jquery.dataTables.js"></script>
-	<script type="text/javascript" src="./js/common.js"></script>
-
-<script>
-
-
-/// The openbisServer we use for our data
-openbisServer = new openbis(openbisUrl, dssUrl);
-
-
-// Some global variables we refer to
-
-/// All yeasts
-var yeasts = null;
-
-/// The yeasts that are currently being inspected
-var inspectedYeasts = [];
-
-/// The width of the inspectors section
-var inspectorsWidth = 450;
-
-//var appWidth = 200;
-
-function getAppHeight(){
-	return Math.max($(window).height() - 50, getVisibleLeafsCountForNode(root) * 30);
-}
-
-function getAppWidth(){
-	return $(window).width();
-}
-
-
-var didCreateVis = false;
-
-/// The visualization, referenced by functions that display content
-var vis;
-
-/// The inspectors, referenced by functions that show or hide inspectors
-var inspectors;
-
-/**
- * Create the DOM elements to store the visualization (tree + inspectors)
- */
-function createVis()
-{ 
-	if (didCreateVis) return;
-	
-	// Create a div to house the tree visualization and the inspectors
-	vis = d3.select("#vis");
-	
-	// An element for the inspectors.
-	inspectors = d3.select("#inspectorsContainer")
-		.style("width", + inspectorsWidth + "px")
-		.style("overflow", "auto")
-		.style("display", "none");
-
-	didCreateVis = true;
-}
-
-function translateSrc(d)
-{
-	var translate;
-	if (d.parent != undefined) {
-		var y0 = (null != d.parent.y0) ? d.parent.y0 : d.parent.y;
-		var x0 = (null != d.parent.x0) ? d.parent.x0 : d.parent.x;
-		translate = "translate(" + y0 + "," + x0 + ")";
-	} else {
-		translate = "translate(" + 0 + "," + 0 + ")";
-	}
-	
-	return translate;
-}
-
-function translateDst(d)
-{
-	d.x0 = d.x;
-	d.y0 = d.y;
-	var translate =	 "translate(" + d.y + "," + d.x + ")";
-	
-	return translate;
-}
-
-
-
-xmlValueRegex = /^<root>.*/;
-xmlValueRegex.compile(xmlValueRegex);
-xmlParser = new DOMParser();
-
-/** Initialize properties that are not stored in the database */
-function initializeSyntheticProperties(sample)
-{
-	var plasmidValue = sample.properties.PLASMIDS;
-  sample.properties.PLASMIDS_PARENTS = [];
-	
-	if (!xmlValueRegex.test(plasmidValue))
-		return;
-
-  globalValue = plasmidValue;
-	var plasmidXml = xmlParser.parseFromString(plasmidValue, "text/xml");
-	
-	
-	for (i=1; i < plasmidXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	   
-				var sampleNode = plasmidXml.childNodes.item(0).childNodes.item(i);
-	
-				if (sampleNode.attributes.getNamedItem("code") != null) {
-	  	  		
-	  	  		var code = sampleNode.attributes.getNamedItem("code").value;
-	 		   		
-						if (sampleNode.attributes.getNamedItem("annotation") != null)  {
-	 	  				 var annotation = sampleNode.attributes.getNamedItem("annotation").value;
-						}	 		   		
-						else{
-								var annotation = "";
-						}
-						if (sampleNode.attributes.getNamedItem("rel") != null) {
-								var relationship = sampleNode.attributes.getNamedItem("rel").value;
-						}	
-						else{
-								var relationship = "";
-						}  	  		
-				 }
-			
-			  var PLASMIDS_PARENTS = null;
-			
-				if (relationship == "INT"){
-				  PLASMIDS_PARENTS = " " + code + "::" + annotation;
-				}
-				if (relationship == "MOD"){
-			   	PLASMIDS_PARENTS = " " + code + "_" + annotation;
-				}
-				if (relationship == "DEL"){
-			  	 PLASMIDS_PARENTS = " " + code + "_D_" + annotation;
-				}
-				if (relationship == "") {
-						PLASMIDS_PARENTS = code;
-				}
-				
-				sample.properties.PLASMIDS_PARENTS.push(PLASMIDS_PARENTS);
-	
-}			
-			
-			
-			var yeastParentsValue = sample.properties.YEAST_PARENTS;
- 	   sample.properties.YEASTS_PARENTS = [];
-  
-	
-	if (!xmlValueRegex.test(yeastParentsValue))
-		return;
-
- 		 globalValue2 = yeastParentsValue;
-		 var yeastParentsXml = xmlParser.parseFromString(yeastParentsValue, "text/xml");
-	
-		for (i=1; i < yeastParentsXml.childNodes.item(0).childNodes.length; i+=2 ) {
-	
-			var sampleYeastNode = yeastParentsXml.childNodes.item(0).childNodes.item(i);
-			
- 		  var yeastsDisplay = null;
-  
-			if (sampleYeastNode.attributes.getNamedItem("code") != null ) {
-					var yeastCode = sampleYeastNode.attributes.getNamedItem("code").value;
-			}
-			
-	yeastsDisplay = yeastCode;
-		
-	sample.properties.YEASTS_PARENTS.push(yeastsDisplay);
-
-	}
-	
-};
-
-
-/**
- * Convert properties to pairs
- */
-function props_to_pairs1(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order1 = ["OWNER", "OWNER_NUMBER", "YEAST_STRAIN_NAME", "COMMENTS", "PROJECT",  "PLASMIDS_PARENTS", "PLASMID_NAME",  "BACKBONE", "BACTERIAL_ANTIBIOTIC_RESISTANCE",  "YEAST_MARKER",  "OTHER_MARKER",  "FLANKING_RESTRICTION_ENZYME",  "COMMENTS"]
-	new_list1 = []
-	for (var i in order1) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order1[i]) {
-				new_list1.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list1;
-}
-
-
-function props_to_pairs5(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-
-	order5 = ["YEASTS_PARENTS"]
-	new_list5 = []
-	for (var i in order5) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order5[i]) {
-				new_list5.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	
-		return new_list5;
-}
-
-
-function props_to_pairs2(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	
-	order2 = ["GENETIC_BACKGROUND",  "MATING_TYPE",  "BACKGROUND_SPECIFIC_MARKERS", "COMMON_MARKERS", "ENDOGENOUS_PLASMID"]
-	new_list2 = []
-	for (var i in order2) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order2[i]) {
-				new_list2.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list2;
-}
-
-function props_to_pairs3(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	order3 = ["SOURCE","ORIGIN","STRAIN_CHECK"]
-	new_list3 = []
-	for (var i in order3) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order3[i]) {
-				new_list3.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list3;
-}
-
-function props_to_pairs4(data)
-{
-
-	d = data.properties;
-	
-	var pairs = [];
-	for (var prop in d) {
-		var pair = [prop, d[prop]];
-		pairs.push(pair);
-	}
-	
-	pairs.push(["REGISTRATION_DATE", new Date(data.registrationDetails.registrationDate)]);
-
-	order4 = [ "BOX_NUMBER","ROW","COLUMN","REGISTRATION_DATE"]
-	new_list4 = []
-	for (var i in order4) {
-		for (var j in pairs) {
-			if (pairs[j][0] == order4[i]) {
-				new_list4.push(pairs[j]);
-				break;
-			}
-		}
-	}
-	return new_list4;
-}
-
-
-function resolveObjectReference(objectOrId) {
-  if (isNaN(objectOrId)) {
-    yeast = objectOrId;
-  
-  } else {
-  	yeast = yeastsById[objectOrId];
-  
-  }
-  
- 
-  return yeast;
-}
-
-
-
-function get_parents(data)
-{
-
-	d = data.properties;
-
-	new_list5=[]	
-	
-	if (data.parents != null) {
-		var i = 1;
-	  data.parents.forEach(function(parentOrId) {
-      parentLabel = "PARENT "+ i;
-      parent = resolveObjectReference(parentOrId);
-      new_list5.push([parentLabel, parent ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list5;
-}
-
-
-function get_children(data)
-{
-	d = data.properties;
-
-	new_list6=[]	
-	
-	if (data.children != null) {
-		var i = 1;
-		data.children.forEach(function(childOrId) {
-      childLabel = "CHILD "+ i;
-      child = resolveObjectReference(childOrId);
-      new_list6.push([childLabel, child ]);
-			i++;	  
-		});
-	  
-	}
-	
-	return new_list6;
-}
-
-
-
-
-
-
-
-/** Initialize the yeasts variable */
-function initializeYeasts(result)
-{
-	// Split the yeasts into two groups, the ones that start with FRY in their sample name and the other ones.
-	      // Construct a map of all yeasts by id
-  yeastsById = {};
-
-	// Split the yeasts into two groups, the ones that start with FRP in their sample name and the other ones.
-	var fryYeasts = [], otherYeasts = [];
-	var fryRegex = /^FRY[0-9]+/;
-	fryRegex.compile(fryRegex);
-	result.forEach(function(sampleOrId) {
-		var theSample = sampleOrId;
-		function storeSamplesById(referredSample) {
-      if (isNaN(referredSample)) {
-        yeastsById[referredSample["@id"]] = referredSample;
-        if (referredSample.parents) referredSample.parents.forEach(storeSamplesById);
-        if (referredSample.children) referredSample.children.forEach(storeSamplesById);
-      }
-    } 
-	  if (isNaN(theSample)) {
-	  	storeSamplesById(theSample);
-    } else {
-	    // This is referring to an object in the yeastsById map
-	    theSample = yeastsById[sampleOrId];
-		}       
- 		if (fryRegex.test(theSample.code)) {
-			fryYeasts.push(theSample);
-		} else {
-			otherYeasts.push(theSample);
-		}
-		initializeSyntheticProperties(theSample);
-	});
-	
-	// Sort each of the groups
-	otherYeasts.sort(function(a, b) { 
-		return (a.code < b.code) ? -1 : 1; 
-	});
-	
-	fryYeasts.sort(function(a, b) {
-		// Sort based on the FRY number
-		var fryNumberA = parseInt(a.code.substring(3));
-		var fryNumberB = parseInt(b.code.substring(3));
-		return (fryNumberA < fryNumberB) ? -1 : 1;
-	});
-	
-	
-	
-	
-	// Combine the two groups back together to produce the full collection of yeasts
-	yeasts = fryYeasts.concat(otherYeasts);
-}
-
-
-
-/** Set the size of the yeast-table based on whether or not inspectors are visible */
-function resizeYeastTable()
-{
-	var cellWidth;
-	var areInspectorsVisible;
-	var padding = 20;
-	cellWidth = "100%";
-	areInspectorsVisible = true;
-	
-	var yeastTableTransition = d3.selectAll('div.yeast-table-data-cell');
-	yeastTableTransition.style('width', cellWidth);
-	if (areInspectorsVisible) {
-		$("#inspectorsContainer").show();
-	} else {
-		$("#inspectorsContainer").hide();
-	}
-}
-
-function inspectYeast(yeast)
-{
-  if (null == yeast) {
-  	// Ignore this -- it is not a yeast
-  	return;
-  }
-   
-	if (inspectedYeasts.indexOf(yeast) < 0) {
-		inspectedYeasts.push(yeast);
-	}
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-function closeInspector(yeast)
-{
-	var index = inspectedYeasts.indexOf(yeast);
-	if (index < 0) {
-		return;
-	}
-	
-	inspectedYeasts.splice(index, 1);
-	resizeYeastTable();
-	updateInspectors(1000);
-}
-
-
-/**
- * Draw / update node inspectors
- */
-function updateInspectors(duration)
-{		
-		// Draw / update the inspectors	
-	var inspector = inspectors.selectAll("div.inspector").data(inspectedYeasts, function (d) { return d.code });
-		
-	var box = inspector
-			.enter()
-		.append("div")
-		.attr("class", "inspector")
-		.attr("id", function(d) {return d.code+"_INSPECTOR"})
-		.text(function(d) { return d.code });
-		
-	box.append("span")
-		.attr("class", "close")
-		.on("click", closeInspector)
-		.text("x");
-	
-	inspector
-		.exit()
-	.transition()
-	.duration(duration)
-	.style("opacity", "0")
-	.remove();
-	
-
-	var propsTable = box.append("table").attr("class", "properties");
-	propsTable.selectAll("tr").data(function(d) { return props_to_pairs1(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-				
-				var propsTable5 = box.append("table").attr("class", "properties");
-	      propsTable5.selectAll("tr").data(function(d) { return props_to_pairs5(d) })
-	   	.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-				
-	var propsTableParents = box.append("table").attr("class", "properties");
-	propsTableParents.selectAll("tr").data(function(d) { return get_parents(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					 	
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-
-
-
-
-	var propsTableChildren = box.append("table").attr("class", "properties");
-	propsTableChildren.selectAll("tr").data(function(d) { return get_children(d) })
-		.enter()
-			.append("tr")
-			//.on("click", inspectYeast)
-      .on("click", function(trData) { inspectYeast(trData[1]) } )
-     	.style("cursor", "pointer")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { 
-					if (null == d.identifier) {
-						return d;
-					} else { 
-					 	return d.identifier.slice(11,50);
-					} 
-				})
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-
-	var propsTable2 = box.append("table").attr("class", "properties");
-	propsTable2.selectAll("tr").data(function(d) { return props_to_pairs2(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-
-
-	var propsTable3 = box.append("table").attr("class", "properties");
-	propsTable3.selectAll("tr").data(function(d) { return props_to_pairs3(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");	
-				
-				
-	var propsTable4 = box.append("table").attr("class", "properties");
-	propsTable4.selectAll("tr").data(function(d) { return props_to_pairs4(d) })
-		.enter()
-			.append("tr")
-			.selectAll("td").data(function(d) { return d }).enter()
-				.append("td")
-				.attr("class", "property")
-				.style("opacity", "0")
-				.text(function(d) { return d })
-			.transition()
-				.duration(duration)
-				.style("opacity", "1");			
-	
-	
-
-	var downloadTable = inspector.selectAll("table.downloads").data(function(d) { return [d] });
-	
-	downloadTable
-		.enter()
-			.append("table")
-				.attr("width", "100%")
-				.attr("class", "downloads");
-	
-	
-
-}
-
-
-
-/**
- * Display the samples returned by the server
- */
-function displayReturnedSamples(data)
-{
-	if (data.error) {
-		console.log(data.error);
-		vis.append("p").text("Could not retrieve data.");
-		return;
-	}
-	
-	initializeYeasts(data.result);
-	
-// This will show the object in the log -- helpful for debugging
-// console.log(data.result);
-	if (yeasts.length < 1) {
-		vis.append("p").text("No data found.");
-		return;
-	}
-
- 
-
-	var selection = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-		
-selection
-	  .enter()
-		.append("tr")	  
-	 	.attr("class", "yeast-table-data")
-		.attr("permId", function(sample){ return sample.permId })
-		.style("cursor", "pointer")
-		.on("click", inspectYeast)
-		.selectAll("td").data(function(sample) {
-			tableFields = [sample.identifier.slice(11,50), sample.properties.OWNER.split('_').join(" "), sample.properties.OWNER_NUMBER, sample.properties.YEAST_STRAIN_NAME, sample.properties.PROJECT, sample.properties.PLASMIDS_PARENTS, sample.properties.YEASTS_PARENTS, sample.properties.GENETIC_BACKGROUND, sample.properties.MATING_TYPE];
-			tableFields[tableFields.length] = "<center><a class='btn' onclick=\"jsfunction\" href=\"javascript:showEditWindowForSample('"+sample.code+"', '"+sample.permId+"');\">Edit</a></center>";
-			return tableFields;
-		})
-			.enter()
-			.append("td")
-			.append("div")
-			.attr("class", "yeast-table-data-cell")
-			.html(String)
-
-			$('a').click(function(e){
-			   e.stopPropagation();
-			});
-			
-}
-
-
-/**
- * Filters
- */
- 
- 
-function yeastFilter(filter, property, element, index, array) {
-
-	
-	filter = filter.toLowerCase();
-  if (filter.length < 1) return true;
-  
-	if (property == "CODE") {
-		if (element.code.toLowerCase().indexOf(filter) != -1) {
-			return true;
-		}
-	}	
-
-	if (element.properties[property] == undefined) {
-		return false;
-	}
-
-	if (element.properties[property].toLowerCase().indexOf(filter) != -1) {
-		return true;
-	}
-
-	return false;
-}
-
- 
- 
-
-
-/**
- * Function visualize filters 
- */
-function visualize(ownerFilterText, ownerNumFilterText, yeastNameFilterText, projectFilterText, plasmidsFilterText, yeastParentsFilterText, geneticBackgroundFilterText, matingTypeFilterText )
-{
-
-
-	if (ownerFilterText == undefined) 
-	{
-		ownerFilterText = "";
-	}
-
-	if (ownerNumFilterText == undefined) 
-	{
-		ownerNumFilterText = "";
-	}
-	
-	if (yeastNameFilterText == undefined) 
-	{
-		yeastNameFilterText = "";
-	}
-
-	if (projectFilterText == undefined) 
-	{
-		projectFilterText = "";
-	}
-	
-	if (plasmidsFilterText == undefined) 
-	{
-		plasmidsFilterText = "";
-	}
-
-	if (yeastParentsFilterText == undefined) 
-	{
-		yeastParentsFilterText = "";
-	}
-	
-		if (geneticBackgroundFilterText == undefined) 
-	{
-		geneticBackgroundFilterText = "";
-	}
-
-	if (matingTypeFilterText == undefined) 
-	{
-		matingTypeFilterText = "";
-	}
-	
-	var displayedYeasts = yeasts.filter(yeastFilter.curry(ownerFilterText, "OWNER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(ownerNumFilterText, "OWNER_NUMBER"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastNameFilterText, "YEAST_STRAIN_NAME"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(projectFilterText, "PROJECT"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(plasmidsFilterText, "PLASMIDS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(yeastParentsFilterText, "YEAST_PARENTS"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(geneticBackgroundFilterText, "GENETIC_BACKGROUND"));
-	displayedYeasts = displayedYeasts.filter(yeastFilter.curry(matingTypeFilterText, "MATING_TYPE"));
-	
-	
-	var selection2 = d3.select("#vis").select("#yeast-table").selectAll("tr.yeast-table-data").data(yeasts);
-		// Code under enter is run if there is no HTML element for a data element
-
-	
-		selection2.style("display", function(data) {
-		 		if ($.inArray(data, displayedYeasts) != -1) {
-					return "table-row"
-				} 
-				else {
-					return  "none"
-				}
-			});
-			
-	  
-};
-
-
-
-
-/**
- * Request samples matching some criteria from the server and show them in the Page.
- */
-
-
-
-
-
-
-function showMatchingSamples()
-{
-  var matchClauses = [ {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "TYPE",
-				desiredValue : "YEAST" 
-			}
-	]
-	
-	var selectedYeastCode = new openbisWebAppContext().getParameter('code');
-	if(selectedYeastCode){
-	  matchClauses.push(
-      {"@type":"AttributeMatchClause",
-				fieldType : "ATTRIBUTE",			
-				attribute : "CODE",
-				desiredValue : selectedYeastCode 
-			}		
-	  );
-	}
-
-	var sampleCriteria = 
-	{
-		matchClauses : matchClauses,
-		operator : "MATCH_ALL_CLAUSES"
-	};
-
-	openbisServer.searchForSamplesWithFetchOptions(sampleCriteria, ["PROPERTIES", "ANCESTORS", "DESCENDANTS"], displayReturnedSamples);
-
-}
-
-
-
-/**
- * Login  
- */
-function enterApp(data)
-{
-	if(data.result == null){
-		alert("Login or password incorrect");
-		$("#username").focus();
-		return;
-	}
-	
-	$("#login-form-div").hide();
-	$("#main").show();
-	
-	createVis();
-	
-	//showChildrenSamples();
-	
-	populateMenuNew();
-
-	showMatchingSamples();
-}
-
-
-$(document).ready(function() {
-	$('#main').hide();
-	
-	var username = $("#username").value;
-	if(username == null || username.length==0) {
-		$("#username").focus();
-	} else {
-		$("#login-button").focus();
-	}
-	
-	$('#logout-button').click(function() { 
-		openbisServer.logout(function(data) { 
-			$("#login-form-div").show();
-			$("#main").hide();
-			$("#username").focus();
-		});
-	});
-	
-	$('#login-form').submit(function() {
-		 openbisServer.login( $.trim($('#username').val()), $.trim($('#password').val()), function(data) { enterApp(data) })
-	});
-	
-	$('#owner_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});	
-		
-	$('#ownerNum_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-
-  $('#yeastName_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#project_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#plasmids_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#yeastParents_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-  $('#geneticBackground_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#matingType_filter').keyup(function() {
-		visualize($('#owner_filter').val(), $('#ownerNum_filter').val(), $('#yeastName_filter').val(), $('#project_filter').val(), $('#plasmids_filter').val(), $('#yeastParents_filter').val(), $('#geneticBackground_filter').val(), $('#matingType_filter').val());
-	});
-	
-	$('#search').keyup(function() {
-		visualize($('#search').val());
-	});
-	
-	
-	
-	openbisServer.ifRestoredSessionActive(function(data) { enterApp(data) });
-
-// Make the ENTER key the default button
-	$("login-form input").keypress(function (e) {
-		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
-			$('button[type=submit].default').click();
-			return false;
-		} else {
-			return true;
-		}
-	});
-});
-
-/**
- * Show and Hide the filters when clicking on the Filters button 
- */
-function ShowHide(divId)
-{
-	if(document.getElementById(divId).style.display == 'none')
-	{
-		document.getElementById(divId).style.display='block';
-	}
-	else
-	{
-	document.getElementById(divId).style.display = 'none';
-	}
-}
-    
-  
-</script>
-
-</head>
-<body>
-	<div>
-		<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" style="position: absolute; margin-left: 10px; margin-top: 10px; width: 120px;"/>
-	</div>
-	
-	<div id="login-form-div" style="visibility:hidden; margin-top: 10px; auto; margin-left: auto; margin-right: auto; display: block; background-color: #EEEEEE; border-radius: 6px 6px 6px 6px; width: 400px; padding: 20px;">
-			<img id="openbis-logo" src="images/openBIS_Logo.png" alt="openBIS" />
-			<br /><br />
-			<form id="login-form" action="javascript:">
-				<input placeholder="username" id="username" type="text" required="required">
-				<br />
-				<input placeholder="password" id="password" type="password" required="required">
-				<br />
-				<button class="btn" id="login-button" type="submit">Login</button>
-				<br /><br />
-				<center>
-					Compatible With:
-					<br />
-					<img src="./images/browser-icon-chrome.png" style="width: 96px; height:96px;" /><img src="./images/browser-icon-firefox.png" style="width: 96px; height:96px;" />
-				</center>
-			</form>
-	</div>
-
-	<div id="main">
-		<center>
-			<h1 id = "title" style="padding-top:20px">Yeasts</h1>
-		</center>
-
-		<div class="container-fluid">
-		    <div class="row-fluid">
-		    	<div class="span2" id ="sectionsContainer"></div>
-		    	<div class="span10">
-					<div id="vis">
-						<div style="height: 500px; width:100%; overflow: auto;">
-							<table class="table table-striped table-bordered table-hover">
-								<thead>
-									<tr>
-										<td></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Owner filter" id="owner_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Owner Num filter" id="ownerNum_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Yeast Name filter" id="yeastName_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Project filter" id="project_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Plastmids filter" id="plasmids_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Yeast Parents filter" id="yeastParents_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Genetic Background filter" id="geneticBackground_filter" type="text"></td>
-										<td style="border:none; border-collapse:collapse;"><input style="width: 90%;" placeholder="Mating filter" id="matingType_filter" type="text"></td>
-									</tr>
-									<tr class="yeast-table-header"><th>Code</th><th>Owner</th><th>Owner Number</th><th>Yeast Strain Name</th><th>Project</th><th>Plasmids</th><th>Yeast Parents</th><th>Genetic Background</th><th>Mating Type</th><th></th></tr>
-								</thead>
-								<tbody id='yeast-table'></tbody>
-							</table>
-						</div>
-					</div>
-					<div id="inspectorsContainer"></div>
-		    	</div>
-		    </div>
-		</div>
-	</div>
-</body>
-</html>
diff --git a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/plugin.properties b/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/plugin.properties
deleted file mode 100644
index 9a94ff03bf056593809e33328f4b5346335829e1..0000000000000000000000000000000000000000
--- a/plasmid/source/core-plugins/yeastlabbrowser/2/as/webapps/yeastlabbrowser/plugin.properties
+++ /dev/null
@@ -1 +0,0 @@
-webapp-folder = html
diff --git a/plasmid/source/drop-boxes/BOXIT-integration/import_antibody.py b/plasmid/source/drop-boxes/BOXIT-integration/import_antibody.py
deleted file mode 100644
index 2a0d114d57e360a31c639b9ca2cf13125c6496e1..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/BOXIT-integration/import_antibody.py
+++ /dev/null
@@ -1,244 +0,0 @@
-#!/usr/bin/env python
-
-
-import sys, csv, os, re
-import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.DataType as DataType
-from datetime import datetime
-
-print "########################################################"
-
-SPACE_CODE = "INVENTORY"
-PROJECT_CODE = "MATERIALS"
-PROJECT_ID = "/%(SPACE_CODE)s/%(PROJECT_CODE)s" % vars()
-EXPERIMENT_CODE = "ANTIBODY"
-EXPERIMENT_ID = "/%(SPACE_CODE)s/%(PROJECT_CODE)s/%(EXPERIMENT_CODE)s" % vars()
-
-# A map that has the sample property codes as the key and the CSV header as the value
-CSV_TO_PROPERTY_MAPPING = {
-  # PROPERTY_CODE : (CSV_HEADER, FORMAT)
-  'NAME'  : ('Antibody ID', DataType.VARCHAR),
-  'ANTIBODY_ID_NR': ('antibody_id_nr', DataType.VARCHAR),  
-  'ANTIGEN ': ('antigen', DataType.VARCHAR),
-  'BARCODE' : ('barcode', DataType.VARCHAR),
-  'BARCODE_LABEL' : ('barcode', DataType.VARCHAR),
-  'ANTIBODY_FACS_BLOCK' : ('block facs', DataType.VARCHAR),
-  'ANTIBODY_IF_BLOCK' : ('block IFF', DataType.VARCHAR),
-  'ANTIBODY_WB_BLOCK' : ('block western', DataType.VARCHAR),
-  'BOX' : ('box', DataType.VARCHAR),
-  'CATALOGUE_NUMBER' : ('catalog id #', DataType.VARCHAR),
-  'CLASS' : ('class', DataType.VARCHAR),
-  'CLONE' : ('clone', DataType.VARCHAR),
-  'ANTIBODY_FACS_CONC' : ('conc facs', DataType.VARCHAR), 
-  'ANTIBODY_IF_CONC'  : ('conc IFF', DataType.VARCHAR),
-  'ANTIBODY_IP_CONC' : ('conc ip', DataType.VARCHAR),
-  'ANTIBODY_WB_CONC' : ('ANTIBODY_WB_CONC', DataType.VARCHAR), 
-  'ANTIBODY_CONCENTRATION' : ('concentration', DataType.VARCHAR),   
-  'ANTIBODY_CROSSREACTIVITY'  : ('crossreactivity', DataType.VARCHAR),  
-  'ANTIBODY_FACS_FIX' : ('fix facs', DataType.VARCHAR),
-  'ANTIBODY_IF_FIX' : ('fix IFF', DataType.VARCHAR),
-  'ANTIBODY_WB_FIX' : ('fix western', DataType.VARCHAR),
-  'COMMENTS'  : ('info', DataType.VARCHAR),
-  'LOTNUMBER' : ('lotnumber', DataType.VARCHAR),
-  'MODIFIED_BY': ('modified by', DataType.VARCHAR), 
-  'ANTIBODY_FACS_NOTES' : ('notes FACS', DataType.VARCHAR),
-  'ANTIBODY_IF_NOTES' : ('notes IFF', DataType.VARCHAR),
-  'ANTIBODY_IP_NOTES': ('notes IP', DataType.VARCHAR),
-  'ANTIBODY_WB_NOTES' : ('notes western', DataType.VARCHAR),
-  'RACK' : ('rack', DataType.VARCHAR),
-  'PUBLISHED' : ('reference', DataType.VARCHAR),
-  'SERIAL_NUMBER' : ('serial number', DataType.INTEGER),
-  'ANTIGEN_SIZE'  : ('size', DataType.VARCHAR),
-  'BOX_NUMBER' : ('antibody ID data box::box label', DataType.VARCHAR),
-  'FROZEN_BY' : ('antibody ID data box::frozen by', DataType.VARCHAR),
-  'FREEZER_NAME'  : ('antibody ID data box::location', DataType.CONTROLLEDVOCABULARY),
-  'BOX_POSITION': ('antibody ID data box::position', DataType.VARCHAR),
-
-}
-
-#create a space if it does not exist
-def create_space_if_needed(tr):
-  space = tr.getSpace(SPACE_CODE)
-  if None == space:
-    space = tr.createNewSpace(SPACE_CODE, None)
-    space.setDescription("Inventory space")
-
-#create a project if it does not exist
-def create_project_if_needed(tr):
-  project = tr.getProject(PROJECT_ID)
-  if None == project:
-    create_space_if_needed(tr)
-    project = tr.createNewProject(PROJECT_ID)
-    project.setDescription("Materials purchased or produced in the lab")
-
-#create an experiment if it does not exist
-def create_experiment_if_needed(tr):
-  """ Get the specified experiment or register it if necessary """
-  exp = tr.getExperiment(EXPERIMENT_ID)
-  if None == exp:
-    create_project_if_needed(tr)
-    exp = tr.createNewExperiment(EXPERIMENT_ID, 'DEFAULT_EXPERIMENT')
-    
-  return exp
-
-#parse the csv file exported form Filemaker
-def parse_incoming(tr,exp): 
-  data_rows = []
-  f = open(tr.getIncoming().getAbsolutePath(), 'rU')
-  dialect = csv.Sniffer().sniff(f.read())
-  f.seek(0)
-  reader = csv.DictReader(f,  dialect = dialect)
-  
-  ##
-  ## 0. Current sample and storage properties being used
-  ##
-  storageProperties = [{
-    "FREEZER_NAME" : "FREEZER_NAME",
-    "ROW" : "ROW",
-    "COLUMN" : "COLUMN",
-    "BOX_NUMBER" : "BOX_NUMBER",
-    "BOX_POSITION" : "BOX_POSITION",
-    "USER_ID" : "USER_PROPERTY"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_2",
-    "ROW" : "ROW_2",
-    "COLUMN" : "COLUMN_2",
-    "BOX_NUMBER" : "BOX_NUMBER_2",
-    "BOX_POSITION" : "BOX_POSITION_2",
-    "USER_ID" : "USER_PROPERTY_2"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_3",
-    "ROW" : "ROW_3",
-    "COLUMN" : "COLUMN_3",
-    "BOX_NUMBER" : "BOX_NUMBER_3",
-    "BOX_POSITION" : "BOX_POSITION_3",
-    "USER_ID" : "USER_PROPERTY_3"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_4",
-    "ROW" : "ROW_4",
-    "COLUMN" : "COLUMN_4",
-    "BOX_NUMBER" : "BOX_NUMBER_4",
-    "BOX_POSITION" : "BOX_POSITION_4",
-    "USER_ID" : "USER_PROPERTY_4"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_5",
-    "ROW" : "ROW_5",
-    "COLUMN" : "COLUMN_5",
-    "BOX_NUMBER" : "BOX_NUMBER_5",
-    "BOX_POSITION" : "BOX_POSITION_5",
-    "USER_ID" : "USER_PROPERTY_5"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_6",
-    "ROW" : "ROW_6",
-    "COLUMN" : "COLUMN_6",
-    "BOX_NUMBER" : "BOX_NUMBER_6",
-    "BOX_POSITION" : "BOX_POSITION_6",
-    "USER_ID" : "USER_PROPERTY_6"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_7",
-    "ROW" : "ROW_7",
-    "COLUMN" : "COLUMN_7",
-    "BOX_NUMBER" : "BOX_NUMBER_7",
-    "BOX_POSITION" : "BOX_POSITION_7",
-    "USER_ID" : "USER_PROPERTY_7"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_8",
-    "ROW" : "ROW_8",
-    "COLUMN" : "COLUMN_8",
-    "BOX_NUMBER" : "BOX_NUMBER_8",
-    "BOX_POSITION" : "BOX_POSITION_8",
-    "USER_ID" : "USER_PROPERTY_8"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_9",
-    "ROW" : "ROW_9",
-    "COLUMN" : "COLUMN_9",
-    "BOX_NUMBER" : "BOX_NUMBER_9",
-    "BOX_POSITION" : "BOX_POSITION_9",
-    "USER_ID" : "USER_PROPERTY_9"
-  }, {
-    "FREEZER_NAME" : "FREEZER_NAME_10",
-    "ROW" : "ROW_10",
-    "COLUMN" : "COLUMN_10",
-    "BOX_NUMBER" : "BOX_NUMBER_10",
-    "BOX_POSITION" : "BOX_POSITION_10",
-    "USER_ID" : "USER_PROPERTY_10"
-  }
-  ];
-
-  
-  currentSample = None
-  storagePropertiesIndex = 0
-
-  for row in reader:
-    ##
-    ## 1. Check if there is an entity with all information or only new storage data
-    ##
-    onlyStorage = None
-    
-    space_code = SPACE_CODE
-    sample_code = row.get('ANTIBODY_ID_NR')
-    sample_id = "/%(space_code)s/%(sample_code)s" % vars()
-    
-    if sample_code != None and sample_code != '':
-      storagePropertiesIndex = 0
-      onlyStorage = False
-    else:
-      onlyStorage = True
-      storagePropertiesIndex += 1
-
-     
-    ##
-    ## 2. Depending on the outcome you set all fields or only new storage fields
-    ##
-    if not onlyStorage:
-      # 1. Set all properties
-
-      currentSample = tr.getSample(sample_id)
-      if not currentSample:
-        currentSample = tr.createNewSample(sample_id, 'ANTIBODY')
-      currentSample.setExperiment(exp)
-      
-      for key in CSV_TO_PROPERTY_MAPPING:
-        prop_value = row[CSV_TO_PROPERTY_MAPPING[key][0]]
-        if prop_value == '' or prop_value == None:
-          prop_value = 'n.a.'
-        currentSample.setPropertyValue(CSV_TO_PROPERTY_MAPPING[key][0],prop_value)
-    
-    else:
-      # 2. Set always the storage properties
-    
-
-      freezer_name_label =storageProperties[storagePropertiesIndex]['FREEZER_NAME']
-      freezer_name_value =row[CSV_TO_PROPERTY_MAPPING['FREEZER_NAME'][0]]
-      box_number_label =storageProperties[storagePropertiesIndex]['BOX_NUMBER']
-      box_number_value =row[CSV_TO_PROPERTY_MAPPING['BOX_NUMBER'][0]]
-      box_position_label = storageProperties[storagePropertiesIndex]['BOX_POSITION']
-      box_position_value = row[CSV_TO_PROPERTY_MAPPING['BOX_POSITION'][0]]
-  
-     # row_label =storageProperties[storagePropertiesIndex]['ROW']
-     # row_value =row[CSV_TO_PROPERTY_MAPPING['ROW'][0]]
-    #  column_label =storageProperties[storagePropertiesIndex]['COLUMN']
-     # column_value =row[CSV_TO_PROPERTY_MAPPING['COLUMN'][0]]
-     # user_id_label =storageProperties[storagePropertiesIndex]['USER_ID']
-    #  user_id_value = row[CSV_TO_PROPERTY_MAPPING['USER_ID'][0]]
-
-
-      currentSample.setPropertyValue(freezer_name_label, freezer_name_value)      
-      currentSample.setPropertyValue(box_number_label, box_number_value)      
-      currentSample.setPropertyValue(box_position_label, box_position_value)      
-      #currentSample.setPropertyValue(row_label, row_value)      
-     # currentSample.setPropertyValue(column_label, column_value)     
-     # currentSample.setPropertyValue(user_id_label, user_id_value)    
-   
-
-  f.close()
-  return data_rows
-
-
-def process(tr):
-  exp = create_experiment_if_needed(tr)
-  data_rows = parse_incoming(tr,exp)
-
-
-  
- 
-
diff --git a/plasmid/source/drop-boxes/facs_data/BDLSRFortessaDropbox.py b/plasmid/source/drop-boxes/facs_data/BDLSRFortessaDropbox.py
deleted file mode 100644
index 57ffbe2b18e7d9c26ed82d99ed5c366935154649..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/facs_data/BDLSRFortessaDropbox.py
+++ /dev/null
@@ -1,589 +0,0 @@
-"""
-@author: Aaron Ponti
-"""
-import re
-import os
-import logging
-import xml.etree.ElementTree as xml
-from datetime import datetime
-
-class Processor:
-    """The Processor class performs all steps required for registering datasets
-    from the assigned dropbox folder."""
-
-    # A transaction object passed by openBIS
-    transaction = None
-
-    # The incoming folder to process (a java.io.File object)
-    incoming = ""
-
-    # Constructor
-    def __init__(self, transaction, logFile):
-
-        self.transaction = transaction
-        self.incoming = transaction.getIncoming()
-
-        # Set up logging
-        logging.basicConfig(filename=logFile, level=logging.DEBUG)
-
-    def createExperiment(self, expId, expName,
-                         expType="LSR_FORTESSA_EXPERIMENT"):
-        """Create an experiment with given Experiment ID extended with the addition
-        of a string composed from current date and time.
-
-        @param expID, the experiment ID
-        @param expName, the experiment name
-        @param expType, the experiment type that must already exist; optional,
-        default is "LSR_FORTESSA_EXPERIMENT"
-        """
-
-        # Make sure to keep the code length within the limits imposed by
-        # openBIS for codes
-        if len(expId) > 41:
-            expId = expId[0:41]
-
-        # Create univocal ID
-        expId = expId + "_" + self.getCustomTimeStamp()
-
-        # Create the experiment
-        logging.info("Register experiment %s" % expId)
-        exp = self.transaction.createNewExperiment(expId, expType)
-        if not exp:
-            msg = "Could not create experiment " + expId + "!"
-            logging.error(msg)
-            raise Exception(msg)
-        else:
-            logging.info("Created experiment with ID " + expId + ".")
-
-        # Store the name
-        exp.setPropertyValue("LSR_FORTESSA_EXPERIMENT_NAME", expName)
-
-        return exp
-
-    def createSampleWithGenCode(self, spaceCode,
-                                sampleType="LSR_FORTESSA_PLATE"):
-        """Create a sample with automatically generated code.
-
-        @param spaceCode, the code of the space
-        @param sampleType, the sample type that must already exist
-        @return sample An ISample
-        """
-
-        # Make sure there are not slashes in the spaceCode
-        spaceCode = spaceCode.replace("/", "")
-
-        # Create the sample
-        sample = self.transaction.createNewSampleWithGeneratedCode(spaceCode, sampleType)
-        if not sample:
-            msg = "Could not create sample with generated code"
-            logging.error(msg)
-            raise Exception(msg)
-
-        return sample
-
-    def formatExpDateForPostgreSQL(self, expDate):
-        """Format the experiment date to be compatible with postgreSQL's
-        'timestamp' data type
-
-        @param Date stored in the FCS file, in the form 01-JAN-2013
-        @return Date in the form 2013-01-01
-        """
-
-        monthMapper = {'JAN': '01', 'FEB': '02', 'MAR': '03', 'APR': '04',
-                       'MAY': '05', 'JUN': '06', 'JUL': '07', 'AUG': '08',
-                       'SEP': '09', 'OCT': '10', 'NOV': '11', 'DEC': '12'}
-
-        # Separate the date into day, month, and year
-        (day, month, year) = expDate.split("-")
-
-        # Try mapping the month to digits (e.g. "06"). If the mapping does
-        # not work, return "NOT_FOUND"
-        month = monthMapper.get(month, "NOT_FOUND")
-
-        # Build the date in the correct format. If the month was not found,
-        # return 01-01-1970
-        if (month == "NOT_FOUND"):
-            logging.info("Invalid experiment date %s found. " \
-                         "Reverting to 1970/01/01." % expDate)
-            return "1970-01-01"
-        else:
-            return (year + "-" + month + "-" + day)
-
-    def getCustomTimeStamp(self):
-        """Create an univocal time stamp based on the current date and time
-        (works around incomplete API of Jython 2.5).
-        """
-
-        t = datetime.now()
-        return (t.strftime("%y%d%m%H%M%S") + unicode(t)[20:])
-
-    def getSubFolders(self):
-        """Returns a list of subfolders of the passed incoming directory.
-
-        @return list of subfolders (String)
-        """
-
-        incomingStr = self.incoming.getAbsolutePath()
-        return [name for name in os.listdir(incomingStr)
-                if os.path.isdir(os.path.join(incomingStr, name))]
-
-    def processExperiment(self, experimentNode,
-                          openBISExpType="LSR_FORTESSA_EXPERIMENT"):
-        """Register an IExperimentUpdatable based on the Experiment XML node.
-
-        @param experimentNode An XML node corresponding to an Experiment
-        @param openBISExpType The experiment type
-        @return IExperimentUpdatable experiment
-        """
-
-        # Get the openBIS identifier
-        openBISIdentifier = experimentNode.attrib.get("openBISIdentifier")
-
-        # Get the experiment name
-        expName = experimentNode.attrib.get("name")
-
-        # Get the experiment date and reformat it to be compatible
-        # with postgreSQL
-        expDate = self.formatExpDateForPostgreSQL(experimentNode.attrib.get("date"))
-
-        # Get the description
-        description = experimentNode.attrib.get("description")
-
-        # Get the acquisition hardware
-        acqHardware = experimentNode.attrib.get("acq_hardware")
-
-        # Get the acquisition software
-        acqSoftware = experimentNode.attrib.get("acq_software")
-
-        # Get the owner name
-        owner = experimentNode.attrib.get("owner_name")
-
-        # Create the experiment (with corrected ID if needed: see above)
-        openBISExperiment = self.createExperiment(openBISIdentifier,
-                                                  expName, openBISExpType)
-        if not openBISExperiment:
-            msg = "Could not create experiment " + openBISIdentifier
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Set the date
-        openBISExperiment.setPropertyValue("LSR_FORTESSA_EXPERIMENT_DATE",
-                                           expDate)
-        # Set the description
-        openBISExperiment.setPropertyValue("LSR_FORTESSA_EXPERIMENT_DESCRIPTION",
-                                           description)
-
-        # Set the acquisition hardware
-        openBISExperiment.setPropertyValue("LSR_FORTESSA_EXPERIMENT_ACQ_HARDWARE",
-                                           acqHardware)
-
-        # Set the acquisition software
-        openBISExperiment.setPropertyValue("LSR_FORTESSA_EXPERIMENT_ACQ_SOFTWARE",
-                                           acqSoftware)
-
-        # Set the experiment owner
-        openBISExperiment.setPropertyValue("LSR_FORTESSA_EXPERIMENT_OWNER",
-                                           owner)
-
-        # Return the openBIS Experiment object
-        return openBISExperiment
-
-    def processFCSFile(self, fcsFileNode, openBISTube, openBISExperiment):
-        """Register the FCS File using the parsed properties file
-
-        @param fcsFileNode An XML node corresponding to an FCS file (dataset)
-        @param openBISTube  An ISample object representing a Tube or Well
-        @param openBISExperiment An ISample object representing an Experiment
-        """
-
-        # Dataset type
-        datasetType = "LSR_FORTESSA_FCSFILE"
-
-        # Create a new dataset
-        dataset = self.transaction.createNewDataSet()
-        if not dataset:
-            msg = "Could not get or create dataset"
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Set the dataset type
-        dataset.setDataSetType(datasetType)
-
-        # Assign the dataset to the sample
-        dataset.setSample(openBISTube)
-
-        # Assign the dataset to the experiment
-        dataset.setExperiment(openBISExperiment)
-
-        # Set the file type
-        dataset.setFileFormatType("FCS")
-
-        # Assign the file to the dataset (we will use the absolute path)
-        fileName = fcsFileNode.attrib.get("relativeFileName")
-        fileName = os.path.join(self.incoming.getAbsolutePath(), fileName)
-
-        # Log
-        logging.info("PROCESSFCSFILE: Registering file: " + fileName)
-
-        # Move the file
-        self.transaction.moveFile(fileName, dataset)
-
-
-    def processTray(self, trayNode, openBISExperiment):
-        """Register a Tray (Plate) based on the Tray XML node
-        and an IExperimentUpdatable object
-
-        @param trayNode An XML node corresponding to a Tray (Plate)
-        @param openBISExperiment An IExperimentUpdatable object
-        @param openBISSampleType sample type (default "LSR_FORTESSA_PLATE")
-        @return ISample sample, or null
-        """
-
-        # openBIS sample type
-        openBISSampleType = "LSR_FORTESSA_PLATE"
-
-        # Get the identifier of the space all relevant attributes
-        openBISSpaceIdentifier = \
-            trayNode.attrib.get("openBISSpaceIdentifier")
-
-        # Get the tray name
-        name = trayNode.attrib.get("name")
-
-        # Get the tray geometry
-        trayGeometry = trayNode.attrib.get("trayGeometry")
-
-        # Create the sample. The Plate is configured in openBIS to
-        # auto-generate its own identifier.
-        openBISTray = self.createSampleWithGenCode(openBISSpaceIdentifier,
-                                                   openBISSampleType)
-        if not openBISTray:
-            msg = "Could not create plate sample."
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Set the experiment for the sample
-        openBISTray.setExperiment(openBISExperiment)
-
-        # Set the plate name
-        openBISTray.setPropertyValue("LSR_FORTESSA_PLATE_NAME", name)
-
-        # Set the tray geometry
-        openBISTray.setPropertyValue("LSR_FORTESSA_PLATE_GEOMETRY", trayGeometry)
-
-        # Return the openBIS ISample object
-        return openBISTray
-
-
-    def processTubeOrWell(self, tubeNode, openBISContainerSample,
-                          specimenName, openBISExperiment):
-        """Register a Tube or Well (as a child of a Specimen) based on the Tube or
-        Well XML node and an ISample object.
-
-        The associated fcs file is attached as a IDataset
-
-        @param tubeNode An XML node corresponding to a Tube or Well
-        @param openBISContainerSample  An ISample object that will contain
-        the Tube or Well
-        @param specimenName Name of the specimen associated to the Tube or Well
-        @param openBISExperiment The IExperiment to which the Tube belongs
-        @param openBISSpecimenType (default "LSR_FORTESSA_TUBE"), the
-        sample type. One of LSR_FORTESSA_TUBE and LSR_FORTESSA_WELL.
-        @return ISample sample, or null
-        """
-
-        # Get the name
-        name = tubeNode.attrib.get("name")
-
-        # openBIS type
-        if tubeNode.tag == "Tube":
-            openBISSpecimenType = "LSR_FORTESSA_TUBE"
-        elif tubeNode.tag == "Well":
-            openBISSpecimenType = "LSR_FORTESSA_WELL"
-        else:
-            msg = "Unknown tube type" + tubeNode.tag
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Build the openBIS Identifier
-        openBISSpaceIdentifier = \
-            tubeNode.attrib.get("openBISSpaceIdentifier")
-
-        # Create the sample. The Tube/Well is configured in openBIS to
-        # auto-generate its own identifier.
-        openBISTube = self.createSampleWithGenCode(openBISSpaceIdentifier,
-                                                   openBISSpecimenType)
-        if not openBISTube:
-            msg = "Could not create sample with auto-generated identifier"
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Set the experiment to which it belongs
-        openBISTube.setExperiment(openBISExperiment)
-
-        # Set the Specimen name as a property
-        openBISTube.setPropertyValue("LSR_FORTESSA_SPECIMEN", specimenName)
-
-        # Set the name
-        if openBISSpecimenType == "LSR_FORTESSA_TUBE":
-            openBISTube.setPropertyValue("LSR_FORTESSA_TUBE_NAME", name)
-        elif openBISSpecimenType == "LSR_FORTESSA_WELL":
-            openBISTube.setPropertyValue("LSR_FORTESSA_WELL_NAME", name)
-        else:
-            msg = "Unknown value for openBISSpecimenType."
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Set the TubeSet container
-        openBISTube.setContainer(openBISContainerSample)
-
-        # Return the openBIS ISample
-        return openBISTube
-
-    def processTubeSet(self, experimentNode, openBISExperiment):
-        """Register a TubeSet (virtual tube container).
-
-        @param experimentNode An XML node corresponding to an Experiment
-        @param openBISExperiment An IExperimentUpdatable object
-        @param openBISSampleType  The TubeSet sample type
-        @return ISample sample, or null
-        """
-
-        # Sample type
-        openBISSampleType = "LSR_FORTESSA_TUBESET"
-
-        # Get the identifier of the space all relevant attributes
-        openBISSpaceIdentifier = \
-            experimentNode.attrib.get("openBISSpaceIdentifier")
-
-        # Create the sample. The Tubeset is configured in openBIS to
-        # auto-generate its own identifier.
-        openBISTubeSet = self.createSampleWithGenCode(openBISSpaceIdentifier,
-                                                      openBISSampleType)
-        if not openBISTubeSet:
-            msg = "Could not get or create TubeSet"
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Set the experiment for the sample
-        openBISTubeSet.setExperiment(openBISExperiment)
-
-        logging.info("PROCESS_TUBESET: Created new TubeSet " \
-                     "with identifier %s, sample type %s" \
-                     % (openBISTubeSet.getSampleIdentifier(),
-                        openBISSampleType))
-
-        # Return the openBIS ISample object
-        return openBISTubeSet
-
-    def register(self, tree):
-        """Register the Experiment using the parsed properties file.
-
-        @param tree ElementTree parsed from the properties XML file
-        """
-
-        # Get the root node (obitXML)
-        root = tree.getroot()
-
-        # Create a virtual TubeSet
-        openBISTubeSet = None
-
-        # Iterate over the children (Experiments)
-        for experimentNode in root:
-
-            # The tag of the immediate children of the root experimentNode
-            # must be Experiment
-            if experimentNode.tag != "Experiment":
-                msg = "Expected Experiment node, found " + experimentNode.tag
-                logging.error(msg)
-                raise Exception(msg)
-
-            # Process an Experiment XML node and get/create an IExperimentUpdatable
-            openBISExperiment = self.processExperiment(experimentNode,
-                                                       "LSR_FORTESSA_EXPERIMENT")
-
-            # Process children of the Experiment
-            for childNode in experimentNode:
-
-                # The child of an Experiment can be a Tray or a Specimen
-                nodeType = childNode.tag
-
-                if nodeType == "Specimen":
-
-                    # A specimen is a direct child of an experiment if there
-                    # is no plate, and the FCS files are therefore associated
-                    # to tubes. In this case, we create a virtual TubeSet
-                    # sample container (one for all Tubes in the experiment).
-                    if openBISTubeSet is None:
-                        openBISTubeSet = self.processTubeSet(experimentNode,
-                                                             openBISExperiment)
-
-                    # The only information we need from the Specimen is its
-                    # name to associate to the Tubes as property
-                    specimenNameProperty = childNode.attrib.get("name")
-
-                    # Now iterate over the children of the Specimen
-                    for tubeNode in childNode:
-
-                        # The child of a Specimen is a Tube
-                        if tubeNode.tag != "Tube":
-                            msg = "Expected Tube node!"
-                            logging.error(msg)
-                            raise Exception(msg)
-
-                        # Process the tube node and get the openBIS object
-                        openBISTube = self.processTubeOrWell(tubeNode,
-                                                       openBISTubeSet,
-                                                       specimenNameProperty,
-                                                       openBISExperiment)
-
-                        # Now process the FCS file
-                        for fcsNode in tubeNode:
-
-                            # The child of a Tube is an FCSFile
-                            if fcsNode.tag != "FCSFile":
-                                msg = "Expected FSC File node!"
-                                logging.error(msg)
-                                raise Exception(msg)
-
-                            # Process the FCS file node
-                            self.processFCSFile(fcsNode, openBISTube,
-                                                openBISExperiment)
-
-                elif nodeType == "Tray":
-
-                    # Process the tray node and get the openBIS object
-                    openBISTray = self.processTray(childNode,
-                                                   openBISExperiment)
-
-                    # Now iterate over the children of the Tray
-                    for specimenNode in childNode:
-
-                        # The child of a Tray is a Specimen
-                        if specimenNode.tag != "Specimen":
-                            msg = "Expected Specimen node!"
-                            logging.error(msg)
-                            raise Exception(msg)
-
-                        # The only information we need from the Specimen is its
-                        # name to associate to the Wells as property
-                        specimenNameProperty = specimenNode.attrib.get("name")
-
-                        for wellNode in specimenNode:
-
-                            # The child of a Specimen is a Tube
-                            if wellNode.tag != "Well":
-                                msg = "Expected Well node!"
-                                logging.error(msg)
-                                raise Exception(msg)
-
-                            # Process the tube node and get the openBIS object
-                            openBISWell = self.processTubeOrWell(wellNode,
-                                                           openBISTray,
-                                                           specimenNameProperty,
-                                                           openBISExperiment)
-
-                            # Now process the FCS file
-                            for fcsNode in wellNode:
-
-                                # The child of a Tube is an FCSFile
-                                if fcsNode.tag != "FCSFile":
-                                    msg = "Expected FSC File node!"
-                                    logging.error(msg)
-                                    raise Exception(msg)
-
-                                # Process the FCS file node
-                                self.processFCSFile(fcsNode, openBISWell,
-                                                    openBISExperiment)
-
-                else:
-
-                    msg = "The Node must be either a Specimen or a Tray"
-                    logging.error(msg)
-                    raise Exception(msg)
-
-        # Log that we are finished with the registration
-        logging.info("REGISTER: Registration completed")
-
-
-    def run(self):
-        """Run the registration."""
-
-        # Make sure that incoming is a folder
-        if not self.incoming.isDirectory():
-            msg = "Incoming MUST be a folder!"
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Log
-        logging.info("Incoming folder: " + self.incoming.getAbsolutePath())
-
-        # There must be just one subfolder: the user subfolder
-        subFolders = self.getSubFolders()
-        if len(subFolders) != 1:
-            msg = "Expected user subfolder!"
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Set the user folder
-        userFolder = os.path.join(self.incoming.getAbsolutePath(),
-                                  subFolders[0])
-
-        # In the user subfolder we must find the data_structure.ois file
-        dataFileName = os.path.join(userFolder, "data_structure.ois")
-        if not os.path.exists(dataFileName):
-            msg = "File data_structure.ois not found!"
-            logging.error(msg)
-            raise Exception(msg)
-
-        # Now read the data structure file and store all the pointers to
-        # the properties files. The paths are stored relative to self.incoming,
-        # so we can easily build the full file paths.
-        propertiesFileList = []
-        f = open(dataFileName)
-        try:
-            for line in f:
-                line = re.sub('[\r\n]', '', line)
-                propertiesFile = os.path.join(self.incoming.getAbsolutePath(),
-                                            line)
-                propertiesFileList.append(propertiesFile)
-        finally:
-            f.close()
-
-        # Process (and ultimately register) all experiments
-        for propertiesFile in propertiesFileList:
-
-            # Log
-            logging.info("* * * Processing: " + propertiesFile)
-
-            # Read the properties file into an ElementTree
-            tree = xml.parse(propertiesFile)
-
-            # Now register the experiment
-            self.register(tree)
-
-
-def process(transaction):
-    """Dropbox entry point.
-
-    @param transaction, the transaction object
-    """
-
-    # Get path to containing folder
-    # __file__ does not work (reliably) in Jython
-    dbPath = "../core-plugins/microscopy/1/dss/drop-boxes/BDLSRFortessaDropbox"
-
-    # Path to the logs subfolder
-    logPath = os.path.join(dbPath, "logs")
-
-    # Make sure the logs subforder exist
-    if not os.path.exists(logPath):
-        os.makedirs(logPath)
-
-    # Path for the log file
-    logFile = os.path.join(logPath, "registration_log.txt")
-
-    # Create a Processor
-    processor = Processor(transaction, logFile)
-
-    # Run
-    processor.run()
diff --git a/plasmid/source/drop-boxes/facs_data/import_facs.py b/plasmid/source/drop-boxes/facs_data/import_facs.py
deleted file mode 100644
index 08bb8f864079bded6675ca2a47851b8c27739054..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/facs_data/import_facs.py
+++ /dev/null
@@ -1,543 +0,0 @@
-#! /usr/bin/env python
-"""
-  Script for uploading FACS data for the YeastLab.
-
-  FACS data are organized in one main folder which contains a folder with the username. Inside this folder there are folders and subfolders that correspond 
-  to different FACS experiments. Inside the username folder there is a file called data_structure.ois which contains the structure of the FACS experiments.
-  This script creates a sample in openBIS for each FACS experiment and uploads the corresponding data in one dataset connected to the samples.
-  The space where the sample should go is detected from the username. The project and experiment are detected from the name of the folders given by the user.
-  The FACS experiment should be named by the users as PROJECT-EXPERIMENT-SAMPLE.  
-  The script also automatically assign teh FREEFORM_TABLE_STATE property, which creates tables in the ELN UI. If there are plates in the directories (these are directories named "96 Wells") 
-  it creates 96-well plates table (8x12); if there are .fcs files it creates a table with one row and as many columns as there are .fcs files. Multiple tables for one sample can be created.
-
-  
-"""
-
-import os, glob, re, csv, time, shutil
-from java.io import File
-from ch.systemsx.cisd.openbis.dss.etl.dto.api.v1 import SimpleImageDataConfig, ImageMetadata, Location
-from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import Geometry
-from ch.systemsx.cisd.openbis.dss.etl.dto.api.v1 import SimpleImageContainerDataConfig, ChannelColor
-from loci.formats import ImageReader
-from time import *
-from datetime import *
-
-print "##############################################################"
-
-def process(transaction):
-	incoming = transaction.getIncoming()
-	
-	projectNameList=[]
-	experimentNameList=[]
-	sampleNameList=[]
-	directoryToImportList=[]
-	userNameList=[]
-
-
-	# read the data_structure.ois file to get the structure of the FACS experiment. The name of the FACS experiment contains project, experiment, sample info for openBIS.
-	def getProjExpSample(incoming):
-		for userName in os.listdir(incoming):
-			if not userName.startswith('.'):
-				dataStructure = incoming + "/" + userName + "/data_structure.ois" 
-				f = open(dataStructure)
-				lines=f.readlines()
-				for line in lines:
-					path = re.split("/", line)
-					directoryToImport= incoming +"/"+ "/".join(path[:-1])
-					projectName = re.split("-",path[-1])[0]
-					if len(re.split("-",path[-1])) == 3: #in some cases the user specifies the sample name in the file name
-						experimentName = re.split("-",path[-1])[1]
-						sampleNameFile = re.split("-",path[-1])[2]
-						sampleName = re.split("_properties.oix", sampleNameFile)[0]
-					elif len(re.split("-",path[-1]))==2: #in some cases the sample name is not in the file name, and it will be generated by openBIS
-						experimentNameProp = re.split("-",path[-1])[1]
-						experimentName = re.split("_properties.oix", experimentNameProp)[0]
-						sampleName = "na" 
-					
-
-					projectNameList.append(projectName)
-					experimentNameList.append(experimentName)
-					sampleNameList.append(sampleName)
-					directoryToImportList.append(directoryToImport)
-					userNameList.append(userName)
-
-		return userNameList, projectNameList, experimentNameList, sampleNameList, directoryToImportList
-					
-
-	getProjExpSample(incoming.getPath()) 
-
-
-	#get the space according to the user	
-	for user in set (userNameList):
-		if user == "pontia":
-			space = "AARON"
-		elif user == "ottozd":
-			space = "DIANA"
-		elif user == "elfstrok":
-			space = "KRISTINA"
-		elif user == "rgnuegge":
-			space = "ROBERT"
-
-	#get or create the project
-	for proj in set(projectNameList):
-		project = transaction.getProject("/" + space + "/" + proj)
-		if not project:
-	 		project = transaction.createNewProject("/" + space + "/" + proj)
-
-	#get or create the experiment
-	for exp in set(experimentNameList):
-		experiment = transaction.getExperiment("/" + space  + "/" + proj + "/" + exp)
-		if not experiment:
-  			experiment = transaction.createNewExperiment("/" + space  + "/" + proj + "/" + exp, "ANALYSIS")	
-
-  	#create te samples, upload the datasets for the sample, create the tables for the ELN UI
-  	for sample, directory in zip(sampleNameList,directoryToImportList):
-		
-  		table =[]
-  		all_subdir_list=[]
-  		fcs_file_plate_list=[]
-  	
-		for all_subdir in os.listdir(directory):
-			if not all_subdir.startswith('.'):
-				(all_subdir_name, all_subdir_ext) = os.path.splitext(all_subdir)
-				if not (all_subdir_ext):
-					plate_content = directory + "/" + all_subdir_name
-					
-					A1 = str(glob.glob(os.path.join(plate_content, "*A01.fcs")))
-					if not A1:
-						A1 = ''
-					(A1_content, A1_ext)= os.path.splitext(os.path.basename(A1))
-					A2 = str(glob.glob(os.path.join(plate_content, "*A02.fcs")))
-					if not A2:
-						A2 = ''
-					(A2_content, A2_ext)= os.path.splitext(os.path.basename(A2))
-					A3 = str(glob.glob(os.path.join(plate_content, "*A03.fcs")))
-					if not A3:
-						A3 = ''
-					(A3_content, A3_ext)= os.path.splitext(os.path.basename(A3))
-					A4 = str(glob.glob(os.path.join(plate_content, "*A04.fcs")))
-					if not A4:
-						A4 = ''
-					(A4_content, A4_ext)= os.path.splitext(os.path.basename(A4))
-					A5 = str(glob.glob(os.path.join(plate_content, "*A05.fcs")))
-					if not A5:
-						A5 = ''
-					(A5_content, A5_ext)= os.path.splitext(os.path.basename(A5))
-					A6 = str(glob.glob(os.path.join(plate_content, "*A06.fcs")))
-					if not A6:
-						A6 = ''
-					(A6_content, A6_ext)= os.path.splitext(os.path.basename(A6))
-					A7 = str(glob.glob(os.path.join(plate_content, "*A07.fcs")))
-					if not A7:
-						A7 = ''
-					(A7_content, A7_ext)= os.path.splitext(os.path.basename(A7))
-					A8 = str(glob.glob(os.path.join(plate_content, "*A08.fcs")))
-					if not A8:
-						A8 = ''
-					(A8_content, A8_ext)= os.path.splitext(os.path.basename(A8))
-					A9 = str(glob.glob(os.path.join(plate_content, "*A09.fcs")))
-					if not A9:
-						A9 = ''
-					(A9_content, A9_ext)= os.path.splitext(os.path.basename(A9))
-					A10 = str(glob.glob(os.path.join(plate_content, "*A10.fcs")))
-					if not A10:
-						A10 = ''
-					(A10_content, A10_ext)= os.path.splitext(os.path.basename(A10))
-					A11 = str(glob.glob(os.path.join(plate_content, "*A11.fcs")))
-					if not A11:
-						A11 = ''
-					(A11_content, A11_ext)= os.path.splitext(os.path.basename(A11))
-					A12 = str(glob.glob(os.path.join(plate_content, "*A12.fcs")))
-					if not A12:
-						A12 = ''
-					(A12_content, A12_ext)= os.path.splitext(os.path.basename(A12))
-
-					B1 = str(glob.glob(os.path.join(plate_content, "*B01.fcs")))
-					if not B1:
-						B1 = ''
-					(B1_content, B1_ext)= os.path.splitext(os.path.basename(B1))
-					B2 = str(glob.glob(os.path.join(plate_content, "*B02.fcs")))
-					if not B2:
-						B2 = ''
-					(B2_content, B2_ext)= os.path.splitext(os.path.basename(B2))
-					B3 = str(glob.glob(os.path.join(plate_content, "*B03.fcs")))
-					if not B3:
-						B3 = ''
-					(B3_content, B3_ext)= os.path.splitext(os.path.basename(B3))
-					B4 = str(glob.glob(os.path.join(plate_content, "*B04.fcs")))
-					if not B4:
-						B4 = ''
-					(B4_content, B4_ext)= os.path.splitext(os.path.basename(B4))
-					B5 = str(glob.glob(os.path.join(plate_content, "*B05.fcs")))
-					if not B5:
-						B5 = ''
-					(B5_content, B5_ext)= os.path.splitext(os.path.basename(B5))
-					B6 = str(glob.glob(os.path.join(plate_content, "*B06.fcs")))
-					if not B6:
-						B6 = ''
-					(B6_content, B6_ext)= os.path.splitext(os.path.basename(B6))
-					B7 = str(glob.glob(os.path.join(plate_content, "*B07.fcs")))
-					if not B7:
-						B7 = ''
-					(B7_content, B7_ext)= os.path.splitext(os.path.basename(B7))
-					B8 = str(glob.glob(os.path.join(plate_content, "*B08.fcs")))
-					if not B8:
-						B8 = ''
-					(B8_content, B8_ext)= os.path.splitext(os.path.basename(B8))
-					B9 = str(glob.glob(os.path.join(plate_content, "*B09.fcs")))
-					if not B9:
-						B9 = ''
-					(B9_content, B9_ext)= os.path.splitext(os.path.basename(B9))
-					B10 = str(glob.glob(os.path.join(plate_content, "*B10.fcs")))
-					if not B10:
-						B10 = ''
-					(B10_content, B10_ext)= os.path.splitext(os.path.basename(B10))
-					B11 = str(glob.glob(os.path.join(plate_content, "*B11.fcs")))
-					if not B11:
-						B11 = ''
-					(B11_content, B11_ext)= os.path.splitext(os.path.basename(B11))
-					B12 = str(glob.glob(os.path.join(plate_content, "*B12.fcs")))
-					if not B12:
-						B12 = ''
-					(B12_content, B12_ext)= os.path.splitext(os.path.basename(B12))
-			
-					C1 = str(glob.glob(os.path.join(plate_content, "*C01.fcs")))
-					if not C1:
-						C1 = ''
-					(C1_content, C1_ext)= os.path.splitext(os.path.basename(C1))
-					C2 = str(glob.glob(os.path.join(plate_content, "*C02.fcs")))
-					if not C2:
-						C2 = ''
-					(C2_content, C2_ext)= os.path.splitext(os.path.basename(C2))
-					C3 = str(glob.glob(os.path.join(plate_content, "*C03.fcs")))
-					if not C3:
-						C3 = ''
-					(C3_content, C3_ext)= os.path.splitext(os.path.basename(C3))
-					C4 = str(glob.glob(os.path.join(plate_content, "*C04.fcs")))
-					if not C4:
-						C4 = ''
-					(C4_content, C4_ext)= os.path.splitext(os.path.basename(C4))
-					C5 = str(glob.glob(os.path.join(plate_content, "*C05.fcs")))
-					if not C5:
-						C5 = ''
-					(C5_content, C5_ext)= os.path.splitext(os.path.basename(C5))
-					C6 = str(glob.glob(os.path.join(plate_content, "*C06.fcs")))
-					if not C6:
-						C6 = ''
-					(C6_content, C6_ext)= os.path.splitext(os.path.basename(C6))
-					C7 = str(glob.glob(os.path.join(plate_content, "*C07.fcs")))
-					if not C7:
-						C7 = ''
-					(C7_content, C7_ext)= os.path.splitext(os.path.basename(C7))
-					C8 = str(glob.glob(os.path.join(plate_content, "*C08.fcs")))
-					if not C8:
-						C8 = ''
-					(C8_content, C8_ext)= os.path.splitext(os.path.basename(C8))
-					C9 = str(glob.glob(os.path.join(plate_content, "*C09.fcs")))
-					if not C9:
-						C9 = ''
-					(C9_content, C9_ext)= os.path.splitext(os.path.basename(C9))
-					C10 = str(glob.glob(os.path.join(plate_content, "*C10.fcs")))
-					if not C10:
-						C10 = ''
-					(C10_content, C10_ext)= os.path.splitext(os.path.basename(C10))
-					C11 = str(glob.glob(os.path.join(plate_content, "*C11.fcs")))
-					if not C11:
-						C11 = ''
-					(C11_content, C11_ext)= os.path.splitext(os.path.basename(C11))
-					C12 = str(glob.glob(os.path.join(plate_content, "*C12.fcs")))
-					if not C12:
-						C12 = ''
-					(C12_content, C12_ext)= os.path.splitext(os.path.basename(C12))					
-
-
-					D1 = str(glob.glob(os.path.join(plate_content, "*D01.fcs")))
-					if not D1:
-						D1 = ''
-					(D1_content, D1_ext)= os.path.splitext(os.path.basename(D1))
-					D2 = str(glob.glob(os.path.join(plate_content, "*D02.fcs")))
-					if not D2:
-						D2 = ''
-					(D2_content, D2_ext)= os.path.splitext(os.path.basename(D2))
-					D3 = str(glob.glob(os.path.join(plate_content, "*D03.fcs")))
-					if not D3:
-						D3 = ''
-					(D3_content, D3_ext)= os.path.splitext(os.path.basename(D3))
-					D4 = str(glob.glob(os.path.join(plate_content, "*D04.fcs")))
-					if not D4:
-						D4 = ''
-					(D4_content, D4_ext)= os.path.splitext(os.path.basename(D4))
-					D5 = str(glob.glob(os.path.join(plate_content, "*D05.fcs")))
-					if not D5:
-						D5 = ''
-					(D5_content, D5_ext)= os.path.splitext(os.path.basename(D5))
-					D6 = str(glob.glob(os.path.join(plate_content, "*D06.fcs")))
-					if not D6:
-						D6 = ''
-					(D6_content, D6_ext)= os.path.splitext(os.path.basename(D6))
-					D7 = str(glob.glob(os.path.join(plate_content, "*D07.fcs")))
-					if not D7:
-						D7 = ''
-					(D7_content, D7_ext)= os.path.splitext(os.path.basename(D7))
-					D8 = str(glob.glob(os.path.join(plate_content, "*D08.fcs")))
-					if not D8:
-						D8 = ''
-					(D8_content, D8_ext)= os.path.splitext(os.path.basename(D8))
-					D9 = str(glob.glob(os.path.join(plate_content, "*D09.fcs")))
-					if not D9:
-						D9 = ''
-					(D9_content, D9_ext)= os.path.splitext(os.path.basename(D9))
-					D10 = str(glob.glob(os.path.join(plate_content, "*D10.fcs")))
-					if not D10:
-						D10 = ''
-					(D10_content, D10_ext)= os.path.splitext(os.path.basename(D10))
-					D11 = str(glob.glob(os.path.join(plate_content, "*D11.fcs")))
-					if not D11:
-						D11 = ''
-					(D11_content, D11_ext)= os.path.splitext(os.path.basename(D11))
-					D12 = str(glob.glob(os.path.join(plate_content, "*D12.fcs")))
-					if not D12:
-						D12 = ''
-					(D12_content, D12_ext)= os.path.splitext(os.path.basename(D12))
-
-
-					E1 = str(glob.glob(os.path.join(plate_content, "*E01.fcs")))
-					if not E1:
-						E1 = ''
-					(E1_content, E1_ext)= os.path.splitext(os.path.basename(E1))
-					E2 = str(glob.glob(os.path.join(plate_content, "*E02.fcs")))
-					if not E2:
-						E2 = ''
-					(E2_content, E2_ext)= os.path.splitext(os.path.basename(E2))
-					E3 = str(glob.glob(os.path.join(plate_content, "*E03.fcs")))
-					if not E3:
-						E3 = ''
-					(E3_content, E3_ext)= os.path.splitext(os.path.basename(E3))
-					E4 = str(glob.glob(os.path.join(plate_content, "*E04.fcs")))
-					if not E4:
-						E4 = ''
-					(E4_content, E4_ext)= os.path.splitext(os.path.basename(E4))
-					E5 = str(glob.glob(os.path.join(plate_content, "*E05.fcs")))
-					if not E5:
-						E5 = ''
-					(E5_content, E5_ext)= os.path.splitext(os.path.basename(E5))
-					E6 = str(glob.glob(os.path.join(plate_content, "*E06.fcs")))
-					if not E6:
-						E6 = ''
-					(E6_content, E6_ext)= os.path.splitext(os.path.basename(E6))
-					E7 = str(glob.glob(os.path.join(plate_content, "*E07.fcs")))
-					if not E7:
-						E7 = ''
-					(E7_content, E7_ext)= os.path.splitext(os.path.basename(E7))
-					E8 = str(glob.glob(os.path.join(plate_content, "*E08.fcs")))
-					if not E8:
-						E8 = ''
-					(E8_content, E8_ext)= os.path.splitext(os.path.basename(E8))
-					E9 = str(glob.glob(os.path.join(plate_content, "*E09.fcs")))
-					if not E9:
-						E9 = ''
-					(E9_content, E9_ext)= os.path.splitext(os.path.basename(E9))
-					E10 = str(glob.glob(os.path.join(plate_content, "*E10.fcs")))
-					if not E10:
-						E10 = ''
-					(E10_content, E10_ext)= os.path.splitext(os.path.basename(E10))
-					E11 = str(glob.glob(os.path.join(plate_content, "*E11.fcs")))
-					if not E11:
-						E11 = ''
-					(E11_content, E11_ext)= os.path.splitext(os.path.basename(E11))
-					E12 = str(glob.glob(os.path.join(plate_content, "*E12.fcs")))
-					if not E12:
-						E12 = ''
-					(E12_content, E12_ext)= os.path.splitext(os.path.basename(E12))
-
-
-					F1 = str(glob.glob(os.path.join(plate_content, "*F01.fcs")))
-					if not F1:
-						F1 = ''
-					(F1_content, F1_ext)= os.path.splitext(os.path.basename(F1))
-					F2 = str(glob.glob(os.path.join(plate_content, "*F02.fcs")))
-					if not F2:
-						F2 = ''
-					(F2_content, F2_ext)= os.path.splitext(os.path.basename(F2))
-					F3 = str(glob.glob(os.path.join(plate_content, "*F03.fcs")))
-					if not F3:
-						F3 = ''
-					(F3_content, F3_ext)= os.path.splitext(os.path.basename(F3))
-					F4 = str(glob.glob(os.path.join(plate_content, "*F04.fcs")))
-					if not F4:
-						F4 = ''
-					(F4_content, F4_ext)= os.path.splitext(os.path.basename(F4))
-					F5 = str(glob.glob(os.path.join(plate_content, "*F05.fcs")))
-					if not F5:
-						F5 = ''
-					(F5_content, F5_ext)= os.path.splitext(os.path.basename(F5))
-					F6 = str(glob.glob(os.path.join(plate_content, "*F06.fcs")))
-					if not F6:
-						F6 = ''
-					(F6_content, F6_ext)= os.path.splitext(os.path.basename(F6))
-					F7 = str(glob.glob(os.path.join(plate_content, "*F07.fcs")))
-					if not F7:
-						F7 = ''
-					(F7_content, F7_ext)= os.path.splitext(os.path.basename(F7))
-					F8 = str(glob.glob(os.path.join(plate_content, "*F08.fcs")))
-					if not F8:
-						F8 = ''
-					(F8_content, F8_ext)= os.path.splitext(os.path.basename(F8))
-					F9 = str(glob.glob(os.path.join(plate_content, "*F09.fcs")))
-					if not F9:
-						F9 = ''
-					(F9_content, F9_ext)= os.path.splitext(os.path.basename(F9))
-					F10 = str(glob.glob(os.path.join(plate_content, "*F10.fcs")))
-					if not F10:
-						F10 = ''
-					(F10_content, F10_ext)= os.path.splitext(os.path.basename(F10))
-					F11 = str(glob.glob(os.path.join(plate_content, "*F11.fcs")))
-					if not F11:
-						F11 = ''
-					(F11_content, F11_ext)= os.path.splitext(os.path.basename(F11))
-					F12 = str(glob.glob(os.path.join(plate_content, "*F12.fcs")))
-					if not F12:
-						F12 = ''
-					(F12_content, F12_ext)= os.path.splitext(os.path.basename(F12))
-
-
-					G1 = str(glob.glob(os.path.join(plate_content, "*G01.fcs")))
-					if not G1:
-						G1 = ''
-					(G1_content, G1_ext)= os.path.splitext(os.path.basename(G1))
-					G2 = str(glob.glob(os.path.join(plate_content, "*G02.fcs")))
-					if not G2:
-						G2 = ''
-					(G2_content, G2_ext)= os.path.splitext(os.path.basename(G2))
-					G3 = str(glob.glob(os.path.join(plate_content, "*G03.fcs")))
-					if not G3:
-						G3 = ''
-					(G3_content, G3_ext)= os.path.splitext(os.path.basename(G3))
-					G4 = str(glob.glob(os.path.join(plate_content, "*G04.fcs")))
-					if not G4:
-						G4 = ''
-					(G4_content, G4_ext)= os.path.splitext(os.path.basename(G4))
-					G5 = str(glob.glob(os.path.join(plate_content, "*G05.fcs")))
-					if not G5:
-						G5 = ''
-					(G5_content, G5_ext)= os.path.splitext(os.path.basename(G5))
-					G6 = str(glob.glob(os.path.join(plate_content, "*G06.fcs")))
-					if not G6:
-						G6 = ''
-					(G6_content, G6_ext)= os.path.splitext(os.path.basename(G6))
-					G7 = str(glob.glob(os.path.join(plate_content, "*G07.fcs")))
-					if not G7:
-						G7 = ''
-					(G7_content, G7_ext)= os.path.splitext(os.path.basename(G7))
-					G8 = str(glob.glob(os.path.join(plate_content, "*G08.fcs")))
-					if not G8:
-						G8 = ''
-					(G8_content, G8_ext)= os.path.splitext(os.path.basename(G8))
-					G9 = str(glob.glob(os.path.join(plate_content, "*G09.fcs")))
-					if not G9:
-						G9 = ''
-					(G9_content, G9_ext)= os.path.splitext(os.path.basename(G9))
-					G10 = str(glob.glob(os.path.join(plate_content, "*G10.fcs")))
-					if not G10:
-						G10 = ''
-					(G10_content, G10_ext)= os.path.splitext(os.path.basename(G10))
-					G11 = str(glob.glob(os.path.join(plate_content, "*G11.fcs")))
-					if not G11:
-						G11 = ''
-					(G11_content, G11_ext)= os.path.splitext(os.path.basename(G11))
-					G12 = str(glob.glob(os.path.join(plate_content, "*G12.fcs")))
-					if not G12:
-						G12 = ''
-					(G12_content, G12_ext)= os.path.splitext(os.path.basename(G12))
-
-					H1 = str(glob.glob(os.path.join(plate_content, "*H01.fcs")))
-					if not H1:
-						H1 = ''
-					(H1_content, H1_ext)= os.path.splitext(os.path.basename(H1))
-					H2 = str(glob.glob(os.path.join(plate_content, "*H02.fcs")))
-					if not H2:
-						H2 = ''
-					(H2_content, H2_ext)= os.path.splitext(os.path.basename(H2))
-					H3 = str(glob.glob(os.path.join(plate_content, "*H03.fcs")))
-					if not H3:
-						H3 = ''
-					(H3_content, H3_ext)= os.path.splitext(os.path.basename(H3))
-					H4 = str(glob.glob(os.path.join(plate_content, "*H04.fcs")))
-					if not H4:
-						H4 = ''
-					(H4_content, H4_ext)= os.path.splitext(os.path.basename(H4))
-					H5 = str(glob.glob(os.path.join(plate_content, "*H05.fcs")))
-					if not H5:
-						H5 = ''
-					(H5_content, H5_ext)= os.path.splitext(os.path.basename(H5))
-					H6 = str(glob.glob(os.path.join(plate_content, "*H06.fcs")))
-					if not H6:
-						H6 = ''
-					(H6_content, H6_ext)= os.path.splitext(os.path.basename(H6))
-					H7 = str(glob.glob(os.path.join(plate_content, "*H07.fcs")))
-					if not H7:
-						H7 = ''
-					(H7_content, H7_ext)= os.path.splitext(os.path.basename(H7))
-					H8 = str(glob.glob(os.path.join(plate_content, "*H08.fcs")))
-					if not H8:
-						H8 = ''
-					(H8_content, H8_ext)= os.path.splitext(os.path.basename(H8))
-					H9 = str(glob.glob(os.path.join(plate_content, "*H09.fcs")))
-					if not H9:
-						H9 = ''
-					(H9_content, H9_ext)= os.path.splitext(os.path.basename(H9))
-					H10 = str(glob.glob(os.path.join(plate_content, "*H10.fcs")))
-					if not H10:
-						H10 = ''
-					(H10_content, H10_ext)= os.path.splitext(os.path.basename(H10))
-					H11 = str(glob.glob(os.path.join(plate_content, "*H11.fcs")))
-					if not H11:
-						H11 = ''
-					(H11_content, H11_ext)= os.path.splitext(os.path.basename(H11))
-					H12 = str(glob.glob(os.path.join(plate_content, "*H12.fcs")))
-					if not H12:
-						H12 = ''
-					(H12_content, H12_ext)= os.path.splitext(os.path.basename(H12))
-
-			 	
-				 	t = "{\"name\":\"\",\"modelDetailed\":[[""\"" + A1_content + "\" ,"  "\"" + A2_content + "\"," "\"" + A3_content + "\"," "\"" + A4_content + "\","  "\"" + A5_content + "\","  "\"" + A6_content + "\","  "\"" + A7_content + "\"," "\"" + A8_content + "\"," "\"" + A9_content + "\"," "\"" + A10_content + "\"," "\"" + A11_content + "\"," "\"" + A12_content + "\"""],[""\"" + B1_content + "\" ,"  "\"" + B2_content + "\"," "\"" + B3_content + "\"," "\"" + B4_content + "\","  "\"" + B5_content + "\","  "\"" + B6_content + "\","  "\"" + B7_content + "\"," "\"" + B8_content + "\"," "\"" + B9_content + "\"," "\"" + B10_content + "\"," "\"" + B11_content + "\"," "\"" + B12_content + "\"""],[""\"" + C1_content + "\" ,"  "\"" + C2_content + "\"," "\"" + C3_content + "\"," "\"" + C4_content + "\","  "\"" + C5_content + "\","  "\"" + C6_content + "\","  "\"" + C7_content + "\"," "\"" + C8_content + "\"," "\"" + C9_content + "\"," "\"" + C10_content + "\"," "\"" + C11_content + "\"," "\"" + C12_content + "\"""],[""\"" + D1_content + "\" ,"  "\"" + D2_content + "\"," "\"" + D3_content + "\"," "\"" + D4_content + "\","  "\"" + D5_content + "\","  "\"" + D6_content + "\","  "\"" + D7_content + "\"," "\"" + D8_content + "\"," "\"" + D9_content + "\"," "\"" + D10_content + "\"," "\"" + D11_content + "\"," "\"" + D12_content + "\"""],[""\"" + E1_content + "\" ,"  "\"" + E2_content + "\"," "\"" + E3_content + "\"," "\"" + E4_content + "\","  "\"" + E5_content + "\","  "\"" + E6_content + "\","  "\"" + E7_content + "\"," "\"" + E8_content + "\"," "\"" + E9_content + "\"," "\"" + E10_content + "\"," "\"" + E11_content + "\"," "\"" + E12_content + "\"""],[""\"" + F1_content + "\" ,"  "\"" + F2_content + "\"," "\"" + F3_content + "\"," "\"" + F4_content + "\","  "\"" + F5_content + "\","  "\"" + F6_content + "\","  "\"" + F7_content + "\"," "\"" + F8_content + "\"," "\"" + F9_content + "\"," "\"" + F10_content + "\"," "\"" + F11_content + "\"," "\"" + F12_content + "\"""],[""\"" + G1_content + "\" ,"  "\"" + G2_content + "\"," "\"" + G3_content + "\"," "\"" + G4_content + "\","  "\"" + G5_content + "\","  "\"" + G6_content + "\","  "\"" + G7_content + "\"," "\"" + G8_content + "\"," "\"" + G9_content + "\"," "\"" + G10_content + "\"," "\"" + G11_content + "\"," "\"" + G12_content + "\"""],[""\"" + H1_content + "\" ,"  "\"" + H2_content + "\"," "\"" + H3_content + "\"," "\"" + H4_content + "\","  "\"" + H5_content + "\","  "\"" + H6_content + "\","  "\"" + H7_content + "\"," "\"" + H8_content + "\"," "\"" + H9_content + "\"," "\"" + H10_content + "\"," "\"" + H11_content + "\"," "\"" + H12_content + "\"""]],\"modelMini\":{\"rows\":[null,null,null,null,null,null,null,null],\"columns\":[null,null,null,null,null,null,null,null,null,null,null,null]}}"	
-				
-					table.append(t)
-				elif all_subdir_ext == ".fcs":
-					all_subdir_list.append(all_subdir_name)
-
-			
-	
-		
-
-	
-   		s = "[\"" + "\",\"".join(str(x) for x in all_subdir_list) + "\"]" #write the filename in each column of teh table
- 		t = "{\"name\":\"\",\"modelDetailed\":[" + s  + "],\"modelMini\":{\"rows\":[\"\"],\"columns\":" + s + "}}" #for single samples (not in plates) create a table with only one row and as many columns as samples.
- 		table.append(t)
-
-  			
-  		freeform_table = "[" +','.join(map(str,table)) +"]"
-
-  		print "FREFORM", freeform_table
-  		
-  		if sample == "na":
-  			sampleNew = transaction.createNewSampleWithGeneratedCode(space, "RESULT")
-  			sampleNew.setExperiment(experiment)
-  			sampleNew.setPropertyValue("FREEFORM_TABLE_STATE", freeform_table)
-  		else:
-  			sampleNew = transaction.createNewSample("/" + space + "/" + sample, "RESULT" )
-			sampleNew.setExperiment(experiment)
-			sampleNew.setPropertyValue("FREEFORM_TABLE_STATE", freeform_table)
-
-
-		dataSet = transaction.createNewDataSet()
-		dataSet.setDataSetType("FACS_DATA_RAW")
-		dataSet.setSample(sampleNew)
-		transaction.moveFile(directory, dataSet)					
-	
-
-		
-
-	
-
-
diff --git a/plasmid/source/drop-boxes/facs_data/plugin.properties b/plasmid/source/drop-boxes/facs_data/plugin.properties
deleted file mode 100644
index d7b020e7b35dcad1c7613baea737340d7de9f4fb..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/facs_data/plugin.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-#input = image-dropbox
-dropbox-name = facs_data
-
-incoming-dir = /Users/barillac/openbis-screening2/data/incoming-facs
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = import_facs.py
-#script-path =BDLSRFortessaDropbox.py
-program-class = ch.systemsx.cisd.etlserver.registrator.api.v2.ExampleJavaDataSetRegistrationDropboxV2
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
-
diff --git a/plasmid/source/drop-boxes/general-protocols-dropbox/plugin.properties b/plasmid/source/drop-boxes/general-protocols-dropbox/plugin.properties
deleted file mode 100644
index 3dce7f268a43d65cf94c12a57589e6a93fd2696b..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/general-protocols-dropbox/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = general-protocols-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-generalProtocol-dropbox-v2.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/general-protocols-dropbox/xml_import-generalProtocol-dropbox-v2.py b/plasmid/source/drop-boxes/general-protocols-dropbox/xml_import-generalProtocol-dropbox-v2.py
deleted file mode 100644
index b1873bea989feb3789e41145fde71d9558519ca0..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/general-protocols-dropbox/xml_import-generalProtocol-dropbox-v2.py
+++ /dev/null
@@ -1,534 +0,0 @@
-#! /usr/bin/env python
-"""
- Import general protocols from a text file.  
-"""
-print "########################################################"
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-ATR_NAME='name'
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-NAME_LABEL = 'name'
-
-chemicals_list=[]
-quantity_list=[]
-buffers_list=[]
-buffers_quantity_list =[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-medias_list=[]
-medias_quantity_list=[]
-protocols_list=[]
-enzymes_list=[]
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-	    sample_name = node.text
-	  else:
-	    node.text = ""  
-	    
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		experiment_name = node.text
-		print experiment_name
-	  else:
-	    node.text = ""  
-	
- 
- 
- 	def Protocols():
-	  for path in [ './General_Protocol']:
-		node = tree.find(path)
-		if node.text is not None:
-		  protocols = node.text
-		  tokens = protocols.split(',')
-		  for token in tokens:
-			protocols_name=token  
-			protocols_list.append(protocols_name)
-		else:
-		  node.text = "n.a." 	  
-	  return protocols_list	  
-	
-	Protocols()
-  
-	  
-	def Chemicals():
-	  for path in [ './Chemicals']:
-		node = tree.find(path)
-		if node.text is not None:
-		  chemicals = node.text
-		  tokens = chemicals.split(',')
-		  for token in tokens:
-		    if re.search(":", token): 
-			  token = token.split(':')
-			  chemical_name = token[0]
-			  chemical_quantity=token[1]
-			  chemicals_list.append(chemical_name)
-			  quantity_list.append(chemical_quantity)
-		    else:
-			  chemical_name=token  
-			  chemical_quantity = "n.a."
-			  chemicals_list.append(chemical_name)
-			  quantity_list.append(chemical_quantity)
-		else:
-		  node.text = "n.a." 	  
-	  return chemicals_list, quantity_list	  
-	
-	Chemicals()
-
-	def Buffers():
-		  for path in [ './Solutions_Buffers']:
-			node = tree.find(path)
-			if node.text is not None:
-			  buffers = node.text
-			  tokens = buffers.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  buffer_name = token[0]
-				  buffer_quantity=token[1]
-				  buffers_list.append(buffer_name)
-				  buffers_quantity_list.append(buffer_quantity)
-				else:
-				  buffer_name=token  
-				  buffer_quantity = "n.a."
-				  buffers_list.append(buffer_name)
-				  buffers_quantity_list.append(buffer_quantity)
-			else:
-			  node.text = "n.a." 	  
-		  return buffers_list, buffers_quantity_list
-		  
-	Buffers()	  
-	
-	def Medias():
-		  for path in [ './Media']:
-			node = tree.find(path)
-			if node.text is not None:
-			  medias = node.text
-			  tokens = medias.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  media_name = token[0]
-				  media_quantity=token[1]
-				  medias_list.append(media_name)
-				  medias_quantity_list.append(media_quantity)
-				else:
-				  media_name=token  
-				  media_quantity = "n.a."
-				  medias_list.append(media_name)
-				  medias_quantity_list.append(media_quantity)
-			else:
-			  node.text = "n.a." 	  
-		  return medias_list, medias_quantity_list
-		  
-	Medias()	  
-
-
-	def Enzymes():
-		  for path in [ './Enzymes']:
-			node = tree.find(path)
-			if node.text is not None:
-			  enzymes = node.text
-			  tokens = enzymes.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  enzyme_name = token[0]
-				  enzyme_concentration=token[1]
-				  enzymes_list.append(enzyme_name)
-				else:
-				  enzyme_name=token  
-				  enzyme_concentration = "n.a."
-				  enzymes_list.append(enzyme_name)
-			else:
-			  node.text = "n.a." 	  
-		  return enzymes_list
-		  
-	Enzymes()	  
-
-
-	
-	
-	for path in [ './XMLCOMMENTS']:
-	  node = tree.find(path)
-	  if node.text is not None:
-		comment_text_list= node.text
-	  else:
-	    comment_text_list = None 
-
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-    
-
-
-###IMPORT CHEMICALS####################################################################
-
-
-	def _createChemicalsSampleLink(chemicals_list, quantity_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if chemicals_list is not None:
-		  chemicalPath= "/YEAST_LAB/" + chemicals_list
-		  permId =transaction.getSample(chemicalPath).getSample().getPermId()
-		  name = transaction.getSample(chemicalPath).getPropertyValue("NAME")
-		  if not permId:
-			permId = chemicals_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, chemicals_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateChemicalsFromBatchInput(chemicals_list, quantity_list):
-		elements = []
-		input = chemicals_list
-		input2 = quantity_list
-		if input != "":
-		   for i, j in zip(chemicals_list,quantity_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createChemicalsSampleLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-
-###IMPORT SOLUTION BUFFERS####################################################################
-
-
-	def _createBuffersLink(buffers_list, buffers_quantity_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if buffers_list is not None:
-		  buffersPath= "/YEAST_LAB/" + buffers_list
-		  permId =transaction.getSample(buffersPath).getSample().getPermId()
-		  if not permId:
-			permId = buffers_list
-		  name = transaction.getSample(buffersPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, buffers_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_QUANTITY, buffers_quantity_list)
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateBuffersFromBatchInput(buffers_list, buffers_quantity_list):
-		elements = []
-		input = buffers_list
-		input2 = buffers_quantity_list
-		if input != "":
-		   for i, j in zip(buffers_list,buffers_quantity_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createBuffersLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-		
-###IMPORT MEDIA####################################################################
-
-
-	def _createMediasLink(medias_list, medias_quantity_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if medias_list is not None:
-		  mediasPath= "/YEAST_LAB/" + medias_list
-		  permId =transaction.getSample(mediasPath).getSample().getPermId()
-		  if not permId:
-			permId = medias_list
-		  name = transaction.getSample(mediasPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, medias_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_QUANTITY, medias_quantity_list)
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateMediasFromBatchInput(medias_list, medias_quantity_list):
-		elements = []
-		input = medias_list
-		input2 = medias_quantity_list
-		if input != "":
-		   for i, j in zip(medias_list,medias_quantity_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createMediasLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-
-###IMPORT PROTOCOLS####################################################################
-
-
-	def _createProtocolsLink(protocols_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if protocols_list is not None:
-		  protocolsPath= "/YEAST_LAB/" + protocols_list
-		  permId =transaction.getSample(protocolsPath).getSample().getPermId()
-		  if not permId:
-			permId = protocols_list
-		  name = transaction.getSample(protocolsPath).getPropertyValue("NAME")
-		  if name is None:
-		  	name = "n.a."
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, protocols_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateProtocolsFromBatchInput(protocols_list):
-		elements = []
-		input = protocols_list
-		if input != "":
-		   for i in protocols_list: 
-		   		sampleLink = _createProtocolsLink(i.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-	
-	updateProtocolsFromBatchInput(protocols_list)	
-
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-		  		
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-	
-###IMPORT ENZYMES####################################################################
-
-
-	def _createEnzymesLink(enzymes_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if enzymes_list is not None:
-		  enzymesPath= "/YEAST_LAB/" + enzymes_list
-		  permId =transaction.getSample(enzymesPath).getSample().getPermId()
-		  if not permId:
-			permId = enzymes_list
-		  name = transaction.getSample(enzymesPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, enzymes_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		 		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateEnzymesFromBatchInput(enzymes_list):
-		elements = []
-		input = enzymes_list
-		if input != "":
-		   for i in enzymes_list: 
-				sampleLink = _createEnzymesLink(i.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'GENERAL_PROTOCOL')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-	
-	""" Set medias, chemicals, protocols, buffers as parents for the sample"""	
-
-
-	protocolId_list =[]
-	for protocol in protocols_list:
-		protocolIdentifier = "/YEAST_LAB/" + protocol.strip()
-		protocolId_list.append(protocolIdentifier)
-
-	mediaId_list =[]
-	for media in medias_list:
-		mediaIdentifier = "/YEAST_LAB/" + media.strip()
-		mediaId_list.append(mediaIdentifier)
-
-	chemicalId_list =[]
-	for chemical in chemicals_list:
-		chemicalIdentifier = "/YEAST_LAB/" + chemical.strip()
-		chemicalId_list.append(chemicalIdentifier)
-		
-	bufferId_list =[]
-	for buffer in buffers_list:
-		bufferIdentifier = "/YEAST_LAB/" + buffer.strip()
-		bufferId_list.append(bufferIdentifier)
-
-	enzymeId_list =[]
-	for enzyme in enzymes_list:
-		enzymeIdentifier = "/YEAST_LAB/" + enzyme.strip()
-		enzymeId_list.append(enzymeIdentifier)
-		
-		
-	parents_list = protocolId_list + mediaId_list + chemicalId_list + bufferId_list
-	newSample.setParentSampleIdentifiers(parents_list)
-	
-	
-	for child in root:
-		if child.tag == "Chemicals":
-			newSample.setPropertyValue("CHEMICALS",updateChemicalsFromBatchInput(chemicals_list,quantity_list))
-		if child.tag == "Solutions_Buffers":
-			newSample.setPropertyValue("SOLUTIONS_BUFFERS",updateBuffersFromBatchInput(buffers_list,buffers_quantity_list))
-		if child.tag == "Media":
-			newSample.setPropertyValue("Media",updateMediasFromBatchInput(medias_list,medias_quantity_list))
-  		if child.tag == "XMLCOMMENTS":
-  			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-  		if child.tag == "General_Protocol":
-  			newSample.setPropertyValue("GENERAL_PROTOCOL", updateProtocolsFromBatchInput(protocols_list))
-		if child.tag == "Enzymes":
-			newSample.setPropertyValue("Enzymes",updateEnzymesFromBatchInput(enzymes_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Chemicals" and child.tag != "XMLCOMMENTS" and child.tag != "Solutions_Buffers" and child.tag != "Media" and child.tag!= "General_Protocol" and child.tag!="Enzymes":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-  			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-buffers-dropbox/plugin.properties b/plasmid/source/drop-boxes/ylab-buffers-dropbox/plugin.properties
deleted file mode 100644
index f70082b6c31a988f1a2ac2dfe0548df951c500c7..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-buffers-dropbox/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = ylab-buffers-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-Buffers-dropbox-v2.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/ylab-buffers-dropbox/xml_import-Buffers-dropbox-v2.py b/plasmid/source/drop-boxes/ylab-buffers-dropbox/xml_import-Buffers-dropbox-v2.py
deleted file mode 100644
index f5bb21c5cc0f1964119d4f22e23d53d1f9af0f56..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-buffers-dropbox/xml_import-Buffers-dropbox-v2.py
+++ /dev/null
@@ -1,432 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-print "########################################################"
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-ATR_NAME="name"
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-NAME_LABEL="name"
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-
-chemicals_list=[]
-concentration_list=[]
-buffers_list=[]
-buffers_concentration_list =[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-medias_list=[]
-medias_concentration_list=[]
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-		sample_name = node.text
-	  else:
-		node.text = ""  
-		
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
-	  if node.text != "":
-		experiment_name = node.text
-	  else:
-		node.text = ""  
-	
-   
-	  
-	chemicals_found = False
-	for child in root.getchildren():
-		if child.tag == 'Chemicals':
-			chemicals_found = True	  
-			def Chemicals():
-				for path in [ './Chemicals']:
-					node = tree.find(path)
-					if node.text is not None:
-						chemicals = node.text
-						tokens = chemicals.split(',')
-						for token in tokens:
-							if re.search(":", token): 
-								token = token.split(':')
-								chemical_name = token[0]
-								chemical_concentration=token[1]
-								chemicals_list.append(chemical_name)
-								concentration_list.append(chemical_concentration)
-							else:
-								chemical_name=token  
-								chemical_concentration = "n.a."
-								chemicals_list.append(chemical_name)
-								concentration_list.append(chemical_concentration)
-					else:
-						node.text = "n.a." 	  
-				return chemicals_list, concentration_list	  
-	
-			Chemicals()
-		if not chemicals_found:
-			chemicals= None
-			chemical_name = None
-			chemical_concentration = None
-			chemicals_list = None
-			concentration_list = None
-
-
-
-	buffers_found = False
-	for child in root.getchildren():
-		if child.tag == 'Solutions_Buffers':
-			buffers_found = True
-			def Buffers():
-				  for path in [ './Solutions_Buffers']:
-					node = tree.find(path)
-					if node.text is not None:
-					  buffers = node.text
-					  tokens = buffers.split(',')
-					  for token in tokens:
-						if re.search(":", token): 
-						  token = token.split(':')
-						  buffer_name = token[0]
-						  buffer_concentration=token[1]
-						  buffers_list.append(buffer_name)
-						  buffers_concentration_list.append(buffer_concentration)
-						else:
-						  buffer_name=token  
-						  buffer_concentration = "n.a."
-						  buffers_list.append(buffer_name)
-						  buffers_concentration_list.append(buffer_concentration)
-					else:
-					  node.text = "n.a." 	  
-				  return buffers_list, buffers_concentration_list
-				  
-			Buffers()	  
-		if not chemicals_found:
-			buffers= None
-			buffer_name = None
-			buffer_concentration = None
-			buffers_list = None
-			buffers_concentration_list = None
-	
-
-	medias_found = False
-	for child in root.getchildren():
-		if child.tag == 'Media':
-			medias_found = True
-			def Medias():
-				  for path in [ './Media']:
-					node = tree.find(path)
-					if node.text is not None:
-					  medias = node.text
-					  tokens = medias.split(',')
-					  for token in tokens:
-						if re.search(":", token): 
-						  token = token.split(':')
-						  media_name = token[0]
-						  media_concentration=token[1]
-						  medias_list.append(media_name)
-						  medias_concentration_list.append(media_concentration)
-						else:
-						  media_name=token  
-						  media_concentration = "n.a."
-						  medias_list.append(media_name)
-						  medias_concentration_list.append(media_concentration)
-					else:
-					  node.text = "n.a." 	  
-				  return medias_list, medias_concentration_list
-				  
-			Medias()	  
-		if not medias_found:
-			medias= None
-			media_name = None
-			media_concentration = None
-			medias_list = None
-			medias_concentration_list = None
-
-	
-	
-
-	xmlcomments_found = False
-	for child in root.getchildren():
-		if child.tag == 'XMLCOMMENTS':
-			xmlcomments_found = True
-			for path in [ './XMLCOMMENTS']:
-				node = tree.find(path)
-				if node.text is not None:
-					comment_text_list= node.text
-				else:
-					comment_text_list = None 
-		if not xmlcomments_found:
-			comment_text_list = None
-
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-	
-
-
-###IMPORT CHEMICALS####################################################################
-
-
-	def _createChemicalsSampleLink(chemicals_list, concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if chemicals_list is not None:
-		  chemicalPath= "/YEAST_LAB/" + chemicals_list
-		  permId =transaction.getSample(chemicalPath).getSample().getPermId()
-		  name = transaction.getSample(chemicalPath).getPropertyValue("NAME")
-		  if not permId:
-			permId = chemicals_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, chemicals_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, concentration_list)
-
- 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateChemicalsFromBatchInput(chemicals_list, concentration_list):
-		elements = []
-		input = chemicals_list
-		input2 = concentration_list
-		if input != "":
-		   for i, j in zip(chemicals_list,concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createChemicalsSampleLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-
-###IMPORT SOLUTION BUFFERS####################################################################
-
-
-	def _createBuffersLink(buffers_list, buffers_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if buffers_list is not None:
-		  buffersPath= "/YEAST_LAB/" + buffers_list
-		  permId =transaction.getSample(buffersPath).getSample().getPermId()
-		  if not permId:
-			permId = buffers_list
-		  name = transaction.getSample(buffersPath).getPropertyValue("NAME")
-		  print "Buffer Name is:", name
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, buffers_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, buffers_concentration_list)
-		
-		 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateBuffersFromBatchInput(buffers_list, buffers_concentration_list):
-		elements = []
-		input = buffers_list
-		input2 = buffers_concentration_list
-		if input != "":
-		   for i, j in zip(buffers_list,buffers_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createBuffersLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-		
-###IMPORT MEDIA####################################################################
-
-
-	def _createMediasLink(medias_list, medias_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if medias_list is not None:
-		  mediasPath= "/YEAST_LAB/" + medias_list
-		  permId =transaction.getSample(mediasPath).getSample().getPermId()
-		  if not permId:
-			permId = medias_list
-		  name = transaction.getSample(mediasPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, medias_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, medias_concentration_list)
-	
-	
-		 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateMediasFromBatchInput(medias_list, medias_concentration_list):
-		elements = []
-		input = medias_list
-		input2 = medias_concentration_list
-		if input != "":
-		   for i, j in zip(medias_list,medias_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createMediasLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-				
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		print "comments", comment_text_list  
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-	
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'SOLUTIONS_BUFFERS')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-	
-	""" Set medias, chemicals,  buffers as parents for the sample"""
-
-	mediaId_list =[]
-	if medias_list != None:
-		for media in medias_list:
-			mediaIdentifier = "/YEAST_LAB/" + media.strip()
-			mediaId_list.append(mediaIdentifier)
-
-	chemicalId_list =[]
-	if chemicals_list != None:
-		for chemical in chemicals_list:
-			chemicalIdentifier = "/YEAST_LAB/" + chemical.strip()
-			chemicalId_list.append(chemicalIdentifier)
-
-	bufferId_list =[]
-	if buffers_list !=None:
-		for buffer in buffers_list:
-			bufferIdentifier = "/YEAST_LAB/" + buffer.strip()
-			bufferId_list.append(bufferIdentifier)
-
-	parents_list =  mediaId_list + chemicalId_list + bufferId_list
-	newSample.setParentSampleIdentifiers(parents_list)	
-	
-	for child in root:
-		if child.tag == "Chemicals":
-			newSample.setPropertyValue("CHEMICALS",updateChemicalsFromBatchInput(chemicals_list,concentration_list))
-		if child.tag == "Solutions_Buffers":
-			newSample.setPropertyValue("SOLUTIONS_BUFFERS",updateBuffersFromBatchInput(buffers_list,buffers_concentration_list))
-		if child.tag == "Media":
-			newSample.setPropertyValue("Media",updateMediasFromBatchInput(medias_list,medias_concentration_list))
-		if child.tag == "XMLCOMMENTS":
-			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Chemicals" and child.tag != "XMLCOMMENTS" and child.tag != "Solutions_Buffers" and child.tag != "Media":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-dropbox/plugin.properties b/plasmid/source/drop-boxes/ylab-dropbox/plugin.properties
deleted file mode 100644
index 21550a061b9ba25aa94bdf870c9de221ef600480..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-dropbox/plugin.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = ylab-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-Yeasts-dropbox-plasmidParents-v2.py 
-#script-path = xml_import-Yeasts-dropbox-v2.py 
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/ylab-dropbox/xml_import-Yeasts-dropbox-plasmidParents-v2.py b/plasmid/source/drop-boxes/ylab-dropbox/xml_import-Yeasts-dropbox-plasmidParents-v2.py
deleted file mode 100644
index c448780cabc94654d844221f0ab86fdbb7c42ddc..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-dropbox/xml_import-Yeasts-dropbox-plasmidParents-v2.py
+++ /dev/null
@@ -1,495 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-
-print "########################################################"
-tz=localtime()[3]-gmtime()[3]
-d=datetime.now()
-print d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-
-ATR_NAME="name"
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-ATR_RELATIONSHIP = "rel"
-ATR_ANNOTATION = "annotation"
-
-NAME_LABEL='name'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-CONNECTION_LABEL = "connection"
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-RELATIONSHIP_LABEL = "relationship"
-ANNOTATION_LABEL = "annotation"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-
-chemicals_list=[]
-concentration_list=[]
-buffers_list=[]
-buffers_concentration_list =[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-medias_list=[]
-medias_concentration_list=[]
-relationship_list=[]
-plasmids_list=[]
-annotation_list=[]
-sampleLink_list=[]
-####FOR PLASMID PARENTS CODE:
-
-"""input pattern matching one plasmid, e.g.: 
-- 'FRP1 (DEL:URA3)', 
-- 'FRP2 (INT)', 
-- 'FRP3(MOD:URA3)', 
-- 'FRP4'
-"""
-INPUT_PATTERN = """
-                 # no '^': allow whitespace at the beginning
-    ([^ (]*)     # 1st group: match code of a sample, everything before a space or '(' (e.g. 'FRP')
-    (\ *\(       # start of 2nd group (matches an optional relationship type with annotation) 
-                 # any spaces followed by a '('
-    ([^:]*)      # 3rd group: match relationship type, any character but ':' (e.g. 'DEL', 'INT', 'MOD')
-    :?           # optional ':' separator
-    (.*)         # 4th group: match annotation, any text (e.g. 'URA3')
-    \))?         # end of 2nd (optional) group: closing bracket of relationship details
-                 # no '$': allow whitespace at the end
-"""
-
-""" due to some weird jython threading issue, we need to compile the pattern outside the function body """
-inputPattern = re.compile(INPUT_PATTERN, re.VERBOSE)
-
-"""relationship types shortcuts"""
-
-DEL_REL_TYPE = 'DEL'
-INT_REL_TYPE = 'INT'
-MOD_REL_TYPE = 'MOD'
-
-"""tuple of supported relationship types as shortcuts"""
-REL_TYPES = (DEL_REL_TYPE, INT_REL_TYPE, MOD_REL_TYPE)
-"""dictionary from relationship type shortcut to its 'character' representation"""
-REL_TYPE_CHARS = {
-    DEL_REL_TYPE: u'\u0394', # unicode '∆'
-#	DEL_REL_TYPE: 'D', 
-    INT_REL_TYPE: '::', 
-    MOD_REL_TYPE: '_' 
-}
-"""dictionary from relationship type shortcut to its full name/label"""
-REL_TYPE_LABELS = {
-    DEL_REL_TYPE: 'deletion', 
-    INT_REL_TYPE: 'integration', 
-    MOD_REL_TYPE: 'modification' 
-}
-
-REL_TYPE_LABEL_OTHER = '(other)'
-REL_TYPE_LABELS_WITH_NONE = tuple([REL_TYPE_LABEL_OTHER] + REL_TYPE_LABELS.values())
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-	    sample_name = node.text
-	  else:
-	    node.text = ""  
-	    
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		experiment_name = node.text
-	  else:
-	    node.text = ""  
-	
-	yeast_parents_found = False
-	for child in root.getchildren():
-		if child.tag == 'Yeast_Parents':
-			pombe_parents_found = True	
-			for path in [ './Yeast_Parents']:
-			  node = tree.find(path)
-		 	  if node.text != "":
-				yeast_parents = node.text
-			  else:
-			    node.text = "" 
-		if not yeast_parents_found:
-			yeast_parents = None 
-
-	plasmids=""	
-
-
- 	plasmids_found = False
-	for child in root.getchildren():
-		if child.tag == 'Plasmids':
-			plasmids_found = True
-			def Plasmids():
-			  for path in [ './Plasmids']:
-				node = tree.find(path)
-				if node.text is not None:
-				  plasmids = node.text
-				  relationship_list=[]
-				  annotation_list	=[]
-				  plasmids_list=[]
-				  tokens = plasmids.split(',')
-				  for token in tokens:
-					if re.search(':', token): 
-					  token = token.split(':')
-					  plasmid_name = token[0][:-4]
-					  plasmid_relationship= token[0][-3:]
-					  plasmid_annotation=token[1][:-1]
-					  plasmids_list.append(plasmid_name)
-					  relationship_list.append(plasmid_relationship)
-					  annotation_list.append(plasmid_annotation)
-					else:
-					  plasmid_name=token  
-					  plasmid_relationship = ""
-					  plasmid_annotation =""
-					  plasmids_list.append(plasmid_name)
-					  relationship_list.append(plasmid_relationship)
-					  annotation_list.append(plasmid_annotation)
-				else:
-				  plasmids= None
-				  plasmid_name=None  
-				  plasmid_relationship = None
-				  plasmid_annotation =None
-				  plasmids_list=None
-				  relationship_list=None
-				  annotation_list=None
-
-			  return  plasmids, plasmids_list, relationship_list, annotation_list	
-			Plasmids()  
-			plasmids=Plasmids()[0]
-		if not plasmids_found:
-		  plasmids= None
-		  plasmid_name=None  
-		  plasmid_relationship = None
-		  plasmid_annotation =None
-		  plasmids_list=None
-		  relationship_list=None
-		  annotation_list=None
-
-	
-	
-	
-	xmlcomments_found = False
-	for child in root.getchildren():
-		if child.tag == 'XMLCOMMENTS':
-			xmlcomments_found = True
-			for path in [ './XMLCOMMENTS']:
-				node = tree.find(path)
-				if node.text is not None:
-					comment_text_list= node.text
-				else:
-					comment_text_list = None 
-		if not xmlcomments_found:
-			comment_text_list = None
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-    
-
-### IMPORT YEAST PARENTS##############################################################
-
-	def _createYeastSampleLink(yeast_parents):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if yeast_parents is not None:
-		  YPpath= "/YEAST_LAB/" + yeast_parents
-		  permId =transaction.getSample(YPpath).getSample().getPermId()
-		  if not permId:
-			permId = yeast_parents
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, yeast_parents)
-		return sampleLink    
-	
-	
-	"""
-	Example input:
-	
-	FRY1, FRY2, FRY3, FRY4
-	"""
-	def updateYeastFromBatchInput(yeast_parents):
-		elements = []
-		input = yeast_parents
-		if input is not None:
-			samples = input.split(',')
-			for yeast_parents in samples:
-				sampleLink = _createYeastSampleLink(yeast_parents.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-	
-	
-	def _getYeastCode(yeast_parents):
-		elements = []
-		input = yeast_parents
-		if input is not None:
-			samples = input.split(',')
-			for yeast_parents in samples:
-				yeastPath= "/YEAST_LAB/" + yeast_parents.strip()
-				elements.append(yeastPath)   
-		return elements          
-
-
-
-
-###IMPORT PLASMID PARENTS#######################################################
-
-	def _group(pattern, input):
-		"""@return: groups returned by performing pattern search with given @pattern on given @input"""
-		return pattern.search(input).groups()
-	
-	
-	def _translateToChar(relationship_list):
-		"""
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @return: character representation of given @relationship, 
-					empty string for null
-					'[<relationship>]' for unknown relationship
-		"""
-		if relationship_list:
-			if relationship_list in REL_TYPE_CHARS:
-				return REL_TYPE_CHARS[relationship_list]
-			else:
-				return "[" + relationship_list + "]"
-		else:
-			return ""
-		
-		
-	def _translateToLabel(relationship_list):
-		"""
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @return: full name of given @relationship, 
-					empty string for null, 
-					'[<relationship>]' for unknown relationship
-		"""
-		if relationship_list:
-			if relationship_list in REL_TYPE_LABELS:
-				return REL_TYPE_LABELS[relationship_list]
-			else:
-				return "[" + relationship_list + "]"
-		else:
-			return REL_TYPE_LABEL_OTHER    
-	
-	def _translateFromLabel(relationshipLabel):
-		"""
-		   @param relationshipLabel: relationship type as label (@see REL_TYPE_LABELS_WITH_NONE)
-		   @return: type of given @relationshipLabel, None for REL_TYPE_LABEL_OTHER, 
-		"""
-		if relationshipLabel == REL_TYPE_LABEL_OTHER:
-			return None
-		elif relationshipLabel == 'deletion':
-			return DEL_REL_TYPE
-		elif relationshipLabel == 'integration':
-			return INT_REL_TYPE
-		elif relationshipLabel == 'modification':
-			return MOD_REL_TYPE    
-	
-	def _createConnectionString(plasmids_list, relationship_list, annotation_list):
-		"""
-		   @param plasmids: code of a sample
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @param annotation: annotation of the relationship, may be null
-		   @return: string representation of a connection with @relationship translated to a 'character'
-		"""
-		result = plasmids_list
-		if relationship_list:
-			result += _translateToChar(relationship_list)
-		if annotation_list:
-			result += annotation_list
-		return result
-
-	
-	def _createPlasmidSampleLink(plasmids_list, relationship_list, annotation_list):
-		"""
-		   Creates sample link XML element for sample with specified @code. The element will contain
-		   given @code as 'code' attribute apart from standard 'permId' attribute. If specified 
-		   @relationship or @annotation are not null they will also be contained as attributes.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with @code as permId.
-		   
-		   @param code: code of a sample
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @param annotation: annotation of the relationship, may be null
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FRP2" permId="20110309154532868-4219" relationship="DEL" annotation="URA3"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		   - '<Sample code="FRP4" permId="20110309154532868-4219" relationship="INT"/>'
-		   @raise Exception: if the specified relationship type is unknown
-		"""
-		if plasmids is not None:
-			plasmidPath= "/YEAST_LAB/" + plasmids_list.strip()
-			permId =transaction.getSample(plasmidPath).getSample().getPermId()
-			if not permId:
-				permId = plasmids_list
-			sampleLink = elementFactory.createSampleLink(permId)
-			sampleLink.addAttribute(ATR_CODE, plasmids_list)
-			if relationship_list:
-				sampleLink.addAttribute(ATR_RELATIONSHIP, relationship_list)
-				if relationship_list in REL_TYPES:
-					connectionString = _createConnectionString(plasmids_list, relationship_list, annotation_list)
-				else:
-					raise ValidationException("Unknown relationship: '" + relationship_list + 
-											  "'. Expected one of: " + REL_TYPES)
-			if annotation_list:
-				sampleLink.addAttribute(ATR_ANNOTATION, annotation_list)
-		return sampleLink    
-
-	""" MAIN FUNCTIONS """
-	
-	"""Example input:
-	
-	FRP1 (DEL:URA3), FRP2 (INT), FRP3 (MOD:URA3), FRP4
-	
-	Relationship types:
-	- DEL: deletion
-	- INT: integration
-	- MOD: modification
-	"""
-	
-	def updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list):
-		elements = []
-		input = plasmids
-		if input is not None:
-			plas = input.split(',')
-			for p in plas:
- 				(plasmids_list, g, relationship_list, annotation_list) = _group(inputPattern, p.strip())
-  				sampleLink = _createPlasmidSampleLink(plasmids_list, relationship_list, annotation_list)
- 				elements.append(sampleLink)
- 		
- 		parentsInput = yeast_parents
- 		if parentsInput is not None:
- 			parents = parentsInput.split(',')
-			for parent in parents:
- 				YeastPath= "/YEAST_LAB/" + parent.strip()
- 				print "Yeast Path", YeastPath
-				parentPlasmids = transaction.getSample(YeastPath).getPropertyValue('PLASMIDS')
-
- 				if parentPlasmids is " ":
- 					print "None:", parentPlasmids
- 					continue
- 				parentElements = list(propertyConverter.convertStringToElements(parentPlasmids))
- 				print "pele", parentElements
- 				for parentLink in parentElements:
- 					elements.append(parentLink)     
- 			
- 		return propertyConverter.convertToString(elements)
-
- 	
- 	updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list)
-	
- 	
-	def _getPlasmidCode(plasmids_list):
-		elements = []
-		input = plasmids_list
-		if input is not None:
-			for i in plasmids_list:
-				plasmidPath= "/YEAST_LAB/" + i.strip()
-				elements.append(plasmidPath)   
-		return elements          
-
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-		  		
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'YEAST')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-	
-	parents = _getPlasmidCode(plasmids_list) +  _getYeastCode(yeast_parents)
-	print "parents =", parents
-	newSample.setParentSampleIdentifiers(parents)
-	
-	for child in root:
- 		if child.tag == "Yeast_Parents":
-			newSample.setPropertyValue("YEAST_PARENTS", updateYeastFromBatchInput(yeast_parents))
-  		if child.tag == "Plasmids":
-  			newSample.setPropertyValue("PLASMIDS",updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list))
-		if child.tag == "XMLCOMMENTS":
-  			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Yeast_Parents" and child.tag != "Plasmids" and child.tag != "XMLCOMMENTS":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-  			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-dropbox/xml_import-Yeasts-dropbox-v2.py b/plasmid/source/drop-boxes/ylab-dropbox/xml_import-Yeasts-dropbox-v2.py
deleted file mode 100644
index 968701392a4c19cd05e93ea6327c2f0cc97ca772..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-dropbox/xml_import-Yeasts-dropbox-v2.py
+++ /dev/null
@@ -1,496 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-
-print "########################################################"
-tz=localtime()[3]-gmtime()[3]
-d=datetime.now()
-print d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-
-
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-ATR_RELATIONSHIP = "rel"
-ATR_ANNOTATION = "annotation"
-
-
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-RELATIONSHIP_LABEL = "relationship"
-ANNOTATION_LABEL = "annotation"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-
-chemicals_list=[]
-concentration_list=[]
-buffers_list=[]
-buffers_concentration_list =[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-medias_list=[]
-medias_concentration_list=[]
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-	    sample_name = node.text
-	  else:
-	    node.text = ""  
-	    
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		experiment_name = node.text
-	  else:
-	    node.text = ""  
-	
-	
-	for path in [ './Yeast_Parents']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		yeast_parents = node.text
-	  else:
-	    node.text = ""  
-	
-				
-	for path in [ './Plasmids']:
-	  node = tree.find(path)
-	  if node.text != "":
-		plasmids = node.text
-	  else:
-	    node.text = ""  
-        
-	  
-	def Chemicals():
-	  for path in [ './Chemicals']:
-		node = tree.find(path)
-		if node.text is not None:
-		  chemicals = node.text
-		  tokens = chemicals.split(',')
-		  for token in tokens:
-		    if re.search(":", token): 
-			  token = token.split(':')
-			  chemical_name = token[0]
-			  chemical_concentration=token[1]
-			  chemicals_list.append(chemical_name)
-			  concentration_list.append(chemical_concentration)
-		    else:
-			  chemical_name=token  
-			  chemical_concentration = "n.a."
-			  chemicals_list.append(chemical_name)
-			  concentration_list.append(chemical_concentration)
-		else:
-		  node.text = "n.a." 	  
-	  return chemicals_list, concentration_list	  
-	
-	Chemicals()
-
-	def Buffers():
-		  for path in [ './Solutions_Buffers']:
-			node = tree.find(path)
-			if node.text is not None:
-			  buffers = node.text
-			  tokens = buffers.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  buffer_name = token[0]
-				  buffer_concentration=token[1]
-				  buffers_list.append(buffer_name)
-				  buffers_concentration_list.append(buffer_concentration)
-				else:
-				  buffer_name=token  
-				  buffer_concentration = "n.a."
-				  buffers_list.append(buffer_name)
-				  buffers_concentration_list.append(buffer_concentration)
-			else:
-			  node.text = "n.a." 	  
-		  return buffers_list, buffers_concentration_list
-		  
-	Buffers()	  
-	
-	def Medias():
-		  for path in [ './Media']:
-			node = tree.find(path)
-			if node.text is not None:
-			  medias = node.text
-			  tokens = medias.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  media_name = token[0]
-				  media_concentration=token[1]
-				  medias_list.append(media_name)
-				  medias_concentration_list.append(media_concentration)
-				else:
-				  media_name=token  
-				  media_concentration = "n.a."
-				  medias_list.append(media_name)
-				  medias_concentration_list.append(media_concentration)
-			else:
-			  node.text = "n.a." 	  
-		  return medias_list, medias_concentration_list
-		  
-	Medias()	  
-
-
-	
-	for path in [ './XMLCOMMENTS']:
-	  node = tree.find(path)
-	  if node.text is not None:
-		comment_text_list= node.text
-	  else:
-	    comment_text_list = None 
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-    
-
-### IMPORT YEAST PARENTS##############################################################
-
-	def _createYeastSampleLink(yeast_parents):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if yeast_parents is not None:
-		  YPpath= "/YEAST_LAB/" + yeast_parents
-		  permId =transaction.getSample(YPpath).getSample().getPermId()
-		  if not permId:
-			permId = yeast_parents
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, yeast_parents)
-		return sampleLink    
-	
-	
-	"""
-	Example input:
-	
-	FRY1, FRY2, FRY3, FRY4
-	"""
-	def updateYeastFromBatchInput(yeast_parents):
-		elements = []
-		input = yeast_parents
-		if input is not None:
-			samples = input.split(',')
-			for yeast_parents in samples:
-				sampleLink = _createYeastSampleLink(yeast_parents.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-	
-	
-	def _getYeastCode(yeast_parents):
-		elements = []
-		input = yeast_parents
-		if input is not None:
-			samples = input.split(',')
-			for yeast_parents in samples:
-				yeastPath= "/YEAST_LAB/" + yeast_parents.strip()
-				elements.append(yeastPath)   
-		return elements          
-
-
-
-
-###IMPORT PLASMID PARENTS#######################################################
-
-	def _createPlasmidSampleLink(plasmids):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if plasmids is not None:
-		  plasmidPath= "/YEAST_LAB/" + plasmids
-		  permId =transaction.getSample(plasmidPath).getSample().getPermId()
-		  if not permId:
-			permId = plasmids
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, plasmids)
-		return sampleLink    
-	
-	
-	"""
-	Example input:
-	
-	FRP1, FRP2, FRP3, FRP4
-	"""
-	def updatePlasmidFromBatchInput(plasmids):
-		elements = []
-		input = plasmids
-		if input is not None:
-			samples = input.split(',')
-			for plasmids in samples:
-				sampleLink = _createPlasmidSampleLink(plasmids.strip())
-				elements.append(sampleLink)
-		
-		return propertyConverter.convertToString(elements)
-	
-	
-	def _getPlasmidCode(plasmids):
-		elements = []
-		input = plasmids
-		if input is not None:
-			samples = input.split(',')
-			for plasmids in samples:
-				plasmidPath= "/YEAST_LAB/" + plasmids.strip()
-				elements.append(plasmidPath)
-				   
-		return elements          
-
-###IMPORT CHEMICALS####################################################################
-
-
-	def _createChemicalsSampleLink(chemicals_list, concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if chemicals_list is not None:
-		  chemicalPath= "/YEAST_LAB/" + chemicals_list
-		  print chemicalPath
-		  permId =transaction.getSample(chemicalPath).getSample().getPermId()
-		  print "chemical permid", permId
-		  if not permId:
-			permId = chemicals_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, chemicals_list)
-		  sampleLink.addAttribute(ATR_CONC, concentration_list)
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateChemicalsFromBatchInput(chemicals_list, concentration_list):
-		elements = []
-		input = chemicals_list
-		input2 = concentration_list
-		if input != "":
-		   for i, j in zip(chemicals_list,concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createChemicalsSampleLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-
-###IMPORT SOLUTION BUFFERS####################################################################
-
-
-	def _createBuffersLink(buffers_list, buffers_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if buffers_list is not None:
-		  buffersPath= "/YEAST_LAB/" + buffers_list
-		  print "buff path", buffersPath
-		  permId =transaction.getSample(buffersPath).getSample().getPermId()
-		  print "buff permid", permId
-		  if not permId:
-			permId = buffers_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, buffers_list)
-		  sampleLink.addAttribute(ATR_CONC, buffers_concentration_list)
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateBuffersFromBatchInput(buffers_list, buffers_concentration_list):
-		elements = []
-		input = buffers_list
-		input2 = buffers_concentration_list
-		if input != "":
-		   for i, j in zip(buffers_list,buffers_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createBuffersLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-		
-###IMPORT MEDIA####################################################################
-
-
-	def _createMediasLink(medias_list, medias_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if medias_list is not None:
-		  mediasPath= "/YEAST_LAB/" + medias_list
-		  permId =transaction.getSample(mediasPath).getSample().getPermId()
-		  if not permId:
-			permId = medias_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, medias_list)
-		  sampleLink.addAttribute(ATR_CONC, medias_concentration_list)
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateMediasFromBatchInput(medias_list, medias_concentration_list):
-		elements = []
-		input = medias_list
-		input2 = medias_concentration_list
-		if input != "":
-		   for i, j in zip(medias_list,medias_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createMediasLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-		  		
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'YEAST')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-	
-	parents = _getPlasmidCode(plasmids) +  _getYeastCode(yeast_parents)
-	
-	
-	for child in root:
- 		if child.tag == "Yeast_Parents":
-			newSample.setPropertyValue("YEAST_PARENTS", updateYeastFromBatchInput(yeast_parents))
-		if child.tag == "Plasmids":
-			newSample.setPropertyValue("PLASMIDS",updatePlasmidFromBatchInput(plasmids))
-		if child.tag == "Chemicals":
-			newSample.setPropertyValue("CHEMICALS",updateChemicalsFromBatchInput(chemicals_list,concentration_list))
-		if child.tag == "Solutions_Buffers":
-			newSample.setPropertyValue("SOLUTIONS_BUFFERS",updateBuffersFromBatchInput(buffers_list,buffers_concentration_list))
-		if child.tag == "Media":
-			newSample.setPropertyValue("Media",updateMediasFromBatchInput(medias_list,medias_concentration_list))
-  		if child.tag == "XMLCOMMENTS":
-  			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Yeast_Parents" and child.tag != "Plasmids" and child.tag != "Chemicals" and child.tag != "XMLCOMMENTS" and child.tag != "Solutions_Buffers" and child.tag != "Media":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-  			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-media-dropbox/plugin.properties b/plasmid/source/drop-boxes/ylab-media-dropbox/plugin.properties
deleted file mode 100644
index 4177a193e14560d483f0db04eed86081c6156df8..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-media-dropbox/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = ylab-media-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-Media-dropbox-v2.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/ylab-media-dropbox/xml_import-Media-dropbox-v2.py b/plasmid/source/drop-boxes/ylab-media-dropbox/xml_import-Media-dropbox-v2.py
deleted file mode 100644
index ebf5b6823e84a09767181b19a9e72b88d96aabbb..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-media-dropbox/xml_import-Media-dropbox-v2.py
+++ /dev/null
@@ -1,433 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-print "########################################################"
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-ATR_NAME="name"
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-NAME_LABEL='name'
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-
-chemicals_list=[]
-concentration_list=[]
-buffers_list=[]
-buffers_concentration_list =[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-medias_list=[]
-medias_concentration_list=[]
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-	print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-
-###PARSE XML FILE############################################################
-
-	print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-		sample_name = node.text
-	  else:
-		node.text = ""  
-		
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
-	  if node.text != "":
-		experiment_name = node.text
-	  else:
-		node.text = ""  
-	
-		print experiment_name   	  
-	
-	chemicals_found = False
-	for child in root.getchildren():
-		if child.tag == 'Chemicals':
-			chemicals_found = True	  
-			def Chemicals():
-				for path in [ './Chemicals']:
-					node = tree.find(path)
-					if node.text is not None:
-						chemicals = node.text
-						tokens = chemicals.split(',')
-						for token in tokens:
-							if re.search(":", token): 
-								token = token.split(':')
-								chemical_name = token[0]
-								chemical_concentration=token[1]
-								chemicals_list.append(chemical_name)
-								concentration_list.append(chemical_concentration)
-							else:
-								chemical_name=token  
-								chemical_concentration = "n.a."
-								chemicals_list.append(chemical_name)
-								concentration_list.append(chemical_concentration)
-					else:
-						node.text = "n.a." 	  
-				return chemicals_list, concentration_list	  
-	
-			Chemicals()
-		if not chemicals_found:
-			chemicals= None
-			chemical_name = None
-			chemical_concentration = None
-			chemicals_list = None
-			concentration_list = None
-
-
-
-	buffers_found = False
-	for child in root.getchildren():
-		if child.tag == 'Solutions_Buffers':
-			buffers_found = True
-			def Buffers():
-				  for path in [ './Solutions_Buffers']:
-					node = tree.find(path)
-					if node.text is not None:
-					  buffers = node.text
-					  tokens = buffers.split(',')
-					  for token in tokens:
-						if re.search(":", token): 
-						  token = token.split(':')
-						  buffer_name = token[0]
-						  buffer_concentration=token[1]
-						  buffers_list.append(buffer_name)
-						  buffers_concentration_list.append(buffer_concentration)
-						else:
-						  buffer_name=token  
-						  buffer_concentration = "n.a."
-						  buffers_list.append(buffer_name)
-						  buffers_concentration_list.append(buffer_concentration)
-					else:
-					  node.text = "n.a." 	  
-				  return buffers_list, buffers_concentration_list
-				  
-			Buffers()	  
-		if not chemicals_found:
-			buffers= None
-			buffer_name = None
-			buffer_concentration = None
-			buffers_list = None
-			buffers_concentration_list = None
-	
-
-	medias_found = False
-	for child in root.getchildren():
-		if child.tag == 'Media':
-			medias_found = True
-			def Medias():
-				  for path in [ './Media']:
-					node = tree.find(path)
-					if node.text is not None:
-					  medias = node.text
-					  tokens = medias.split(',')
-					  for token in tokens:
-						if re.search(":", token): 
-						  token = token.split(':')
-						  media_name = token[0]
-						  media_concentration=token[1]
-						  medias_list.append(media_name)
-						  medias_concentration_list.append(media_concentration)
-						else:
-						  media_name=token  
-						  media_concentration = "n.a."
-						  medias_list.append(media_name)
-						  medias_concentration_list.append(media_concentration)
-					else:
-					  node.text = "n.a." 	  
-				  return medias_list, medias_concentration_list
-				  
-			Medias()	  
-		if not medias_found:
-			medias= None
-			media_name = None
-			media_concentration = None
-			medias_list = None
-			medias_concentration_list = None
-
-	
-	
-
-	xmlcomments_found = False
-	for child in root.getchildren():
-		if child.tag == 'XMLCOMMENTS':
-			xmlcomments_found = True
-			for path in [ './XMLCOMMENTS']:
-				node = tree.find(path)
-				if node.text is not None:
-					comment_text_list= node.text
-				else:
-					comment_text_list = None 
-		if not xmlcomments_found:
-			comment_text_list = None
-
-
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-	
-
-
-###IMPORT CHEMICALS####################################################################
-
-
-	def _createChemicalsSampleLink(chemicals_list, concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if chemicals_list is not None:
-		  chemicalPath= "/YEAST_LAB/" + chemicals_list
-		  permId =transaction.getSample(chemicalPath).getSample().getPermId()
-		  name = transaction.getSample(chemicalPath).getPropertyValue("NAME")
-		  if not permId:
-			permId = chemicals_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, chemicals_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, concentration_list)
-
-
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateChemicalsFromBatchInput(chemicals_list, concentration_list):
-		elements = []
-		input = chemicals_list
-		input2 = concentration_list
-		if input != "":
-		   for i, j in zip(chemicals_list,concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createChemicalsSampleLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-
-###IMPORT SOLUTION BUFFERS####################################################################
-
-
-	def _createBuffersLink(buffers_list, buffers_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if buffers_list is not None:
-		  buffersPath= "/YEAST_LAB/" + buffers_list
-		  permId =transaction.getSample(buffersPath).getSample().getPermId()
-		  if not permId:
-			permId = buffers_list
-		  name = transaction.getSample(buffersPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, buffers_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, buffers_concentration_list)
-	
-	
-		 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateBuffersFromBatchInput(buffers_list, buffers_concentration_list):
-		elements = []
-		input = buffers_list
-		input2 = buffers_concentration_list
-		if input != "":
-		   for i, j in zip(buffers_list,buffers_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createBuffersLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-		
-###IMPORT MEDIA####################################################################
-
-
-	def _createMediasLink(medias_list, medias_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if medias_list is not None:
-		  mediasPath= "/YEAST_LAB/" + medias_list
-		  permId =transaction.getSample(mediasPath).getSample().getPermId()
-		  if not permId:
-			permId = medias_list
-		  name = transaction.getSample(mediasPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, medias_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, medias_concentration_list)
-		
- 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateMediasFromBatchInput(medias_list, medias_concentration_list):
-		elements = []
-		input = medias_list
-		input2 = medias_concentration_list
-		if input != "":
-		   for i, j in zip(medias_list,medias_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createMediasLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-				
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		print "comments", comment_text_list  
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-	
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'MEDIA')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-
-	""" Set medias, chemicals,  buffers as parents for the sample"""
-
-	mediaId_list =[]
-	if medias_list != None:
-		for media in medias_list:
-			mediaIdentifier = "/YEAST_LAB/" + media.strip()
-			mediaId_list.append(mediaIdentifier)
-
-	chemicalId_list =[]
-	if chemicals_list != None:
-		for chemical in chemicals_list:
-			chemicalIdentifier = "/YEAST_LAB/" + chemical.strip()
-			chemicalId_list.append(chemicalIdentifier)
-
-	bufferId_list =[]
-	if buffers_list !=None:
-		for buffer in buffers_list:
-			bufferIdentifier = "/YEAST_LAB/" + buffer.strip()
-			bufferId_list.append(bufferIdentifier)
-
-	parents_list =  mediaId_list + chemicalId_list + bufferId_list
-	newSample.setParentSampleIdentifiers(parents_list)	
-	
-	for child in root:
-		if child.tag == "Chemicals":
-			newSample.setPropertyValue("CHEMICALS",updateChemicalsFromBatchInput(chemicals_list,concentration_list))
-		if child.tag == "Solutions_Buffers":
-			newSample.setPropertyValue("SOLUTIONS_BUFFERS",updateBuffersFromBatchInput(buffers_list,buffers_concentration_list))
-		if child.tag == "Media":
-			newSample.setPropertyValue("Media",updateMediasFromBatchInput(medias_list,medias_concentration_list))
-		if child.tag == "XMLCOMMENTS":
-			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Chemicals" and child.tag != "XMLCOMMENTS" and child.tag != "Solutions_Buffers" and child.tag != "Media":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-pcr-dropbox/plugin.properties b/plasmid/source/drop-boxes/ylab-pcr-dropbox/plugin.properties
deleted file mode 100644
index a889654300e00b523811de4a77e0d1fa95ec6dee..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-pcr-dropbox/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = ylab-pcr-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-pcr-dropbox-v2.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/ylab-pcr-dropbox/xml_import-pcr-dropbox-v2.py b/plasmid/source/drop-boxes/ylab-pcr-dropbox/xml_import-pcr-dropbox-v2.py
deleted file mode 100644
index db8c23079eb72a61763a55e7a74b16e665a84448..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-pcr-dropbox/xml_import-pcr-dropbox-v2.py
+++ /dev/null
@@ -1,386 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-print "########################################################"
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-ATR_NAME='name'
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-NAME_LABEL='name'
-
-chemicals_list=[]
-concentration_list=[]
-buffers_list=[]
-buffers_concentration_list =[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-enzymes_list=[]
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-	    sample_name = node.text
-	  else:
-	    node.text = ""  
-	    
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		experiment_name = node.text
-	  else:
-	    node.text = ""  
-	
-	
-       
-	  
-	def Chemicals():
-	  for path in [ './Chemicals']:
-		node = tree.find(path)
-		if node.text is not None:
-		  chemicals = node.text
-		  tokens = chemicals.split(',')
-		  for token in tokens:
-		    if re.search(":", token): 
-			  token = token.split(':')
-			  chemical_name = token[0]
-			  chemical_concentration=token[1]
-			  chemicals_list.append(chemical_name)
-			  concentration_list.append(chemical_concentration)
-		    else:
-			  chemical_name=token  
-			  chemical_concentration = "n.a."
-			  chemicals_list.append(chemical_name)
-			  concentration_list.append(chemical_concentration)
-		else:
-		  node.text = "n.a." 	  
-	  print "CHEM", chemicals_list, concentration_list
-	  return chemicals_list, concentration_list	  
-	
-	Chemicals()
-
-	def Buffers():
-		  for path in [ './Solutions_Buffers']:
-			node = tree.find(path)
-			if node.text is not None:
-			  buffers = node.text
-			  tokens = buffers.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  buffer_name = token[0]
-				  buffer_concentration=token[1]
-				  buffers_list.append(buffer_name)
-				  buffers_concentration_list.append(buffer_concentration)
-				else:
-				  buffer_name=token  
-				  buffer_concentration = "n.a."
-				  buffers_list.append(buffer_name)
-				  buffers_concentration_list.append(buffer_concentration)
-			else:
-			  node.text = "n.a." 	  
-		  print "BUFF", buffers_list, buffers_concentration_list
-		  return buffers_list, buffers_concentration_list
-		  
-	Buffers()	  
-	
-	def Enzymes():
-		  for path in [ './Enzymes']:
-			node = tree.find(path)
-			if node.text is not None:
-			  enzymes = node.text
-			  tokens = enzymes.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  enzyme_name = token[0]
-				  enzyme_concentration=token[1]
-				  enzymes_list.append(enzyme_name)
-				else:
-				  enzyme_name=token  
-				  enzyme_concentration = "n.a."
-				  enzymes_list.append(enzyme_name)
-			else:
-			  node.text = "n.a." 	  
-		  print "ANTIBODY", enzymes_list
-		  return enzymes_list
-		  
-	Enzymes()	  
-
-
-	
-	
-	for path in [ './XMLCOMMENTS']:
-	  node = tree.find(path)
-	  if node.text is not None:
-		comment_text_list= node.text
-	  else:
-	    comment_text_list = None 
-
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-    
-
-
-###IMPORT CHEMICALS####################################################################
-
-
-	def _createChemicalsSampleLink(chemicals_list, concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if chemicals_list is not None:
-		  chemicalPath= "/YEAST_LAB/" + chemicals_list
-		  permId =transaction.getSample(chemicalPath).getSample().getPermId()
-		  name = transaction.getSample(chemicalPath).getPropertyValue("NAME")
-		  if not permId:
-			permId = chemicals_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, chemicals_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, concentration_list)
-		 		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateChemicalsFromBatchInput(chemicals_list, concentration_list):
-		elements = []
-		input = chemicals_list
-		input2 = concentration_list
-		if input != "":
-		   for i, j in zip(chemicals_list,concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createChemicalsSampleLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-
-###IMPORT SOLUTION BUFFERS####################################################################
-
-
-	def _createBuffersLink(buffers_list, buffers_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if buffers_list is not None:
-		  buffersPath= "/YEAST_LAB/" + buffers_list
-		  permId =transaction.getSample(buffersPath).getSample().getPermId()
-		  if not permId:
-			permId = buffers_list
-		  name = transaction.getSample(buffersPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, buffers_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, buffers_concentration_list)
-
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateBuffersFromBatchInput(buffers_list, buffers_concentration_list):
-		elements = []
-		input = buffers_list
-		input2 = buffers_concentration_list
-		if input != "":
-		   for i, j in zip(buffers_list,buffers_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createBuffersLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-		
-###IMPORT MEDIA####################################################################
-
-
-	def _createEnzymesLink(enzymes_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if enzymes_list is not None:
-		  enzymesPath= "/YEAST_LAB/" + enzymes_list
-		  permId =transaction.getSample(enzymesPath).getSample().getPermId()
-		  if not permId:
-			permId = enzymes_list
-		  name = transaction.getSample(enzymesPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, enzymes_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		 		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateEnzymesFromBatchInput(enzymes_list):
-		elements = []
-		input = enzymes_list
-		if input != "":
-		   for i in enzymes_list: 
-				sampleLink = _createEnzymesLink(i.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-		  		
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		print "comments", comment_text_list  
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-	
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'PCR')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-
-	""" Set enzymes, chemicals, buffers as parents for the sample"""	
-
-	enzymeId_list =[]
-	for enzyme in enzymes_list:
-		enzymeIdentifier = "/YEAST_LAB/" + enzyme.strip()
-		enzymeId_list.append(enzymeIdentifier)
-
-	chemicalId_list =[]
-	for chemical in chemicals_list:
-		chemicalIdentifier = "/YEAST_LAB/" + chemical.strip()
-		chemicalId_list.append(chemicalIdentifier)
-		
-	bufferId_list =[]
-	for buffer in buffers_list:
-		bufferIdentifier = "/YEAST_LAB/" + buffer.strip()
-		bufferId_list.append(bufferIdentifier)
-		
-	parents_list = enzymeId_list + chemicalId_list + bufferId_list
-	newSample.setParentSampleIdentifiers(parents_list)	
-	
-	
-	for child in root:
-		if child.tag == "Chemicals":
-			newSample.setPropertyValue("CHEMICALS",updateChemicalsFromBatchInput(chemicals_list,concentration_list))
-		if child.tag == "Solutions_Buffers":
-			newSample.setPropertyValue("SOLUTIONS_BUFFERS",updateBuffersFromBatchInput(buffers_list,buffers_concentration_list))
-		if child.tag == "Enzymes":
-			newSample.setPropertyValue("Enzymes",updateEnzymesFromBatchInput(enzymes_list))
-  		if child.tag == "XMLCOMMENTS":
-  			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Chemicals" and child.tag != "XMLCOMMENTS" and child.tag != "Solutions_Buffers" and child.tag != "Enzymes":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-  			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-pombe-dropbox/plugin.properties b/plasmid/source/drop-boxes/ylab-pombe-dropbox/plugin.properties
deleted file mode 100644
index ab6c643d23b97c6befead43b319c6c061808b39f..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-pombe-dropbox/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = ylab-pombe-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-Pombe-dropbox-v2.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/ylab-pombe-dropbox/xml_import-Pombe-dropbox-v2-num1.py b/plasmid/source/drop-boxes/ylab-pombe-dropbox/xml_import-Pombe-dropbox-v2-num1.py
deleted file mode 100644
index eaadc9601ad51a27ad4011f92381871ee7be58d2..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-pombe-dropbox/xml_import-Pombe-dropbox-v2-num1.py
+++ /dev/null
@@ -1,476 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-
-print "########################################################"
-tz=localtime()[3]-gmtime()[3]
-d=datetime.now()
-print d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-
-ATR_NAME="name"
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-ATR_RELATIONSHIP = "rel"
-ATR_ANNOTATION = "annotation"
-
-NAME_LABEL='name'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-CONNECTION_LABEL = "connection"
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-RELATIONSHIP_LABEL = "relationship"
-ANNOTATION_LABEL = "annotation"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-
-pombe_parents_list=[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-relationship_list=[]
-plasmids_list=[]
-annotation_list=[]
-sampleLink_list=[]
-####FOR PLASMID PARENTS CODE:
-
-"""input pattern matching one plasmid, e.g.: 
-- 'FRP1 (DEL:URA3)', 
-- 'FRP2 (INT)', 
-- 'FRP3(MOD:URA3)', 
-- 'FRP4'
-"""
-INPUT_PATTERN = """
-                 # no '^': allow whitespace at the beginning
-    ([^ (]*)     # 1st group: match code of a sample, everything before a space or '(' (e.g. 'FRP')
-    (\ *\(       # start of 2nd group (matches an optional relationship type with annotation) 
-                 # any spaces followed by a '('
-    ([^:]*)      # 3rd group: match relationship type, any character but ':' (e.g. 'DEL', 'INT', 'MOD')
-    :?           # optional ':' separator
-    (.*)         # 4th group: match annotation, any text (e.g. 'URA3')
-    \))?         # end of 2nd (optional) group: closing bracket of relationship details
-                 # no '$': allow whitespace at the end
-"""
-
-""" due to some weird jython threading issue, we need to compile the pattern outside the function body """
-inputPattern = re.compile(INPUT_PATTERN, re.VERBOSE)
-
-"""relationship types shortcuts"""
-
-DEL_REL_TYPE = 'DEL'
-INT_REL_TYPE = 'INT'
-MOD_REL_TYPE = 'MOD'
-
-"""tuple of supported relationship types as shortcuts"""
-REL_TYPES = (DEL_REL_TYPE, INT_REL_TYPE, MOD_REL_TYPE)
-"""dictionary from relationship type shortcut to its 'character' representation"""
-REL_TYPE_CHARS = {
-    DEL_REL_TYPE: u'\u0394', # unicode '∆'
-#	DEL_REL_TYPE: 'D', 
-    INT_REL_TYPE: '::', 
-    MOD_REL_TYPE: '_' 
-}
-"""dictionary from relationship type shortcut to its full name/label"""
-REL_TYPE_LABELS = {
-    DEL_REL_TYPE: 'deletion', 
-    INT_REL_TYPE: 'integration', 
-    MOD_REL_TYPE: 'modification' 
-}
-
-REL_TYPE_LABEL_OTHER = '(other)'
-REL_TYPE_LABELS_WITH_NONE = tuple([REL_TYPE_LABEL_OTHER] + REL_TYPE_LABELS.values())
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-	    sample_name = node.text
-	  else:
-	    node.text = ""  
-	    
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		experiment_name = node.text
-	  else:
-	    node.text = ""  
-	
-	
-	# for path in [ './Yeast_Parents']:
-	#   node = tree.find(path)
- # 	  if node.text != "":
-	# 	yeast_parents = node.text
-	#   else:
-	#     node.text = ""  
-
-	for path in [ './Plasmids']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		plasmids= node.text
-	  else:
-	    node.text = ""  
-	
-				
-	def Plasmids():
-	  for path in [ './Plasmids']:
-		node = tree.find(path)
-		if node.text is not None:
-		  plasmids = node.text
-		  tokens = plasmids.split(',')
-		  for token in tokens:
-		    if re.search(':', token): 
-			  token = token.split(':')
-			  plasmid_name = token[0][:-4]
-			  plasmid_relationship= token[0][-3:]
-			  plasmid_annotation=token[1][:-1]
- 			  plasmids_list.append(plasmid_name)
-			  relationship_list.append(plasmid_relationship)
-			  annotation_list.append(plasmid_annotation)
-		    else:
-			  plasmid_name=token  
-			  plasmid_relationship = ""
-			  plasmid_annotation =""
-			  plasmids_list.append(plasmid_name)
-			  relationship_list.append(plasmid_relationship)
-			  annotation_list.append(plasmid_annotation)
-		else:
-		  node.text = "" 
-	  return  plasmids, plasmids_list, relationship_list, annotation_list	  
-	
-	Plasmids()
-	 
-	def PombeParents():
-	  for path in [ './Pombe_Parents']:
-		node = tree.find(path)
-		if node.text is not None:
-		  pombe_parents = node.text
-		  tokens = pombe_parents.split(',')
-		  for token in tokens:
-		    if re.search(":", token): 
-			  token = token.split(':')
-			  pombe_name = token[0]
-			  pombe_parents_list.append(pombe_name)
-		    else:
-			  pombe_name=token  
-			  pombe_concentration = "n.a."
-			  pombe_parents_list.append(pombe_name)
-		else:
-		  node.text = "n.a." 	  
-	  return pombe_parents	  
-	
-	PombeParents()
-
-	
-	for path in [ './XMLCOMMENTS']:
-	  node = tree.find(path)
-	  if node.text is not None:
-		comment_text_list= node.text
-	  else:
-	    comment_text_list = None 
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-
-
-
-
-###IMPORT POMBE PARENTS####################################################################
-
-
-	def _createpombe_parentsSampleLink(pombe_parents_list):
-
-		if pombe_parents_list is not None:
-		  pombePath= "/YEAST_LAB/" + pombe_parents_list
-		  permId =transaction.getSample(pombePath).getSample().getPermId()
-		  name = transaction.getSample(pombePath).getPropertyValue("NAME")
-		  if not permId:
-			permId = pombe_parents_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		  sampleLink.addAttribute(ATR_CODE, pombe_parents_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		 
-  
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRSP1, FRSP2
-	"""
-	
-	
-	def updatepombe_parentsFromBatchInput(pombe_parents_list):
-		elements = []
-		input = pombe_parents_list
-		if input != "":
-		   for i in pombe_parents_list: 
-				sampleLink = _createpombe_parentsSampleLink(i.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-	def _getPombeCode(pombe_parents_list):
-		elements = []
-		input = pombe_parents_list
-		if input is not None:
-			samples = input.split(',')
-			for pombe_parents_list in samples:
-				ParentsPath= "/YEAST_LAB/" + pombe_parents_list.strip()
-				elements.append(ParentsPath)   
-		return elements          
-    
-
-###IMPORT PLASMID PARENTS#######################################################
-
-	def _group(pattern, input):
-		"""@return: groups returned by performing pattern search with given @pattern on given @input"""
-		return pattern.search(input).groups()
-	
-	
-	def _translateToChar(relationship_list):
-		"""
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @return: character representation of given @relationship, 
-					empty string for null
-					'[<relationship>]' for unknown relationship
-		"""
-		if relationship_list:
-			if relationship_list in REL_TYPE_CHARS:
-				return REL_TYPE_CHARS[relationship_list]
-			else:
-				return "[" + relationship_list + "]"
-		else:
-			return ""
-		
-		
-	def _translateToLabel(relationship_list):
-		"""
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @return: full name of given @relationship, 
-					empty string for null, 
-					'[<relationship>]' for unknown relationship
-		"""
-		if relationship_list:
-			if relationship_list in REL_TYPE_LABELS:
-				return REL_TYPE_LABELS[relationship_list]
-			else:
-				return "[" + relationship_list + "]"
-		else:
-			return REL_TYPE_LABEL_OTHER    
-	
-	def _translateFromLabel(relationshipLabel):
-		"""
-		   @param relationshipLabel: relationship type as label (@see REL_TYPE_LABELS_WITH_NONE)
-		   @return: type of given @relationshipLabel, None for REL_TYPE_LABEL_OTHER, 
-		"""
-		if relationshipLabel == REL_TYPE_LABEL_OTHER:
-			return None
-		elif relationshipLabel == 'deletion':
-			return DEL_REL_TYPE
-		elif relationshipLabel == 'integration':
-			return INT_REL_TYPE
-		elif relationshipLabel == 'modification':
-			return MOD_REL_TYPE    
-	
-	def _createConnectionString(plasmids_list, relationship_list, annotation_list):
-		"""
-		   @param plasmids: code of a sample
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @param annotation: annotation of the relationship, may be null
-		   @return: string representation of a connection with @relationship translated to a 'character'
-		"""
-		result = plasmids_list
-		if relationship_list:
-			result += _translateToChar(relationship_list)
-		if annotation_list:
-			result += annotation_list
-		return result
-
-	
-	def _createPlasmidSampleLink(plasmids_list, relationship_list, annotation_list):
-		"""
-		   Creates sample link XML element for sample with specified @code. The element will contain
-		   given @code as 'code' attribute apart from standard 'permId' attribute. If specified 
-		   @relationship or @annotation are not null they will also be contained as attributes.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with @code as permId.
-		   
-		   @param code: code of a sample
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @param annotation: annotation of the relationship, may be null
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FRP2" permId="20110309154532868-4219" relationship="DEL" annotation="URA3"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		   - '<Sample code="FRP4" permId="20110309154532868-4219" relationship="INT"/>'
-		   @raise Exception: if the specified relationship type is unknown
-		"""
-		if plasmids is not None:
-			plasmidPath= "/YEAST_LAB/" + plasmids_list.strip()
-			permId =transaction.getSample(plasmidPath).getSample().getPermId()
-			if not permId:
-				permId = plasmids_list
-			sampleLink = elementFactory.createSampleLink(permId)
-			sampleLink.addAttribute(ATR_CODE, plasmids_list)
-			if relationship_list:
-				sampleLink.addAttribute(ATR_RELATIONSHIP, relationship_list)
-				if relationship_list in REL_TYPES:
-					connectionString = _createConnectionString(plasmids_list, relationship_list, annotation_list)
-				else:
-					raise ValidationException("Unknown relationship: '" + relationship_list + 
-											  "'. Expected one of: " + REL_TYPES)
-			if annotation_list:
-				sampleLink.addAttribute(ATR_ANNOTATION, annotation_list)
-		return sampleLink    
-
-	""" MAIN FUNCTIONS """
-	
-	"""Example input:
-	
-	FRP1 (DEL:URA3), FRP2 (INT), FRP3 (MOD:URA3), FRP4
-	
-	Relationship types:
-	- DEL: deletion
-	- INT: integration
-	- MOD: modification
-	"""
-	
-	def updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list):
-		elements = []
-		input = plasmids
-		if input is not None:
-			plas = input.split(',')
-			for p in plas:
- 				(plasmids_list, g, relationship_list, annotation_list) = _group(inputPattern, p.strip())
-  				sampleLink = _createPlasmidSampleLink(plasmids_list, relationship_list, annotation_list)
- 				elements.append(sampleLink)
- 		
- 		parentsInput = pombe_parents_list
- 		if parentsInput is not None:
- 			parents = parentsInput.split(',')
-			for parent in parents:
- 				ParentsPath= "/YEAST_LAB/" + parent.strip()
-				parentPlasmids = transaction.getSample(ParentsPath).getPropertyValue('PLASMIDS')
-
- 				if parentPlasmids is " ":
- 					print "None:", parentPlasmids
- 					continue
- 				parentElements = list(propertyConverter.convertStringToElements(parentPlasmids))
- 				print "pele", parentElements
- 				for parentLink in parentElements:
- 					elements.append(parentLink)     
- 			
- 		return propertyConverter.convertToString(elements)
-
- 	
- 	updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list)
-	
- 	
-	def _getPlasmidCode(plasmids_list):
-		elements = []
-		input = plasmids_list
-		if input is not None:
-			for i in plasmids_list:
-				plasmidPath= "/YEAST_LAB/" + i.strip()
-				elements.append(plasmidPath)   
-		return elements          
-
-
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-		  		
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'POMBE')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-	
-	parents = _getPlasmidCode(plasmids_list) +  _getPombeCode(pombe_parents_list)
-	print "parents =", parents
-	newSample.setParentSampleIdentifiers(parents)
-	
-	for child in root:
- 		if child.tag == "Plasmids":
-  			newSample.setPropertyValue("PLASMIDS",updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list))
-		if child.tag == "Pombe_Parents":
-			newSample.setPropertyValue("POMBE-PARENTS",updatepombe_parentsFromBatchInput(pombe_parents_list))
-		if child.tag == "XMLCOMMENTS":
-  			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Pombe_Parents" and child.tag != "Plasmids" and child.tag != "XMLCOMMENTS":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-  			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-pombe-dropbox/xml_import-Pombe-dropbox-v2.py b/plasmid/source/drop-boxes/ylab-pombe-dropbox/xml_import-Pombe-dropbox-v2.py
deleted file mode 100644
index 52b60fc6c119e2b39c9ae177044ce35e7231d00e..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-pombe-dropbox/xml_import-Pombe-dropbox-v2.py
+++ /dev/null
@@ -1,476 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-
-print "########################################################"
-tz=localtime()[3]-gmtime()[3]
-d=datetime.now()
-print d.strftime("%Y-%m-%d %H:%M:%S GMT"+"%+.2d" % tz+":00")
-
-
-ATR_NAME="name"
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-ATR_RELATIONSHIP = "rel"
-ATR_ANNOTATION = "annotation"
-
-NAME_LABEL='name'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-CONNECTION_LABEL = "connection"
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-RELATIONSHIP_LABEL = "relationship"
-ANNOTATION_LABEL = "annotation"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-
-
-date_list=[]
-person_list=[]
-comment_text_list=[]
-relationship_list=[]
-annotation_list	=[]
-plasmids_list=[]
-sampleLink_list=[]
-
-####FOR PLASMID PARENTS CODE:
-
-"""input pattern matching one plasmid, e.g.: 
-- 'FRP1 (DEL:URA3)', 
-- 'FRP2 (INT)', 
-- 'FRP3(MOD:URA3)', 
-- 'FRP4'
-"""
-INPUT_PATTERN = """
-				 # no '^': allow whitespace at the beginning
-	([^ (]*)     # 1st group: match code of a sample, everything before a space or '(' (e.g. 'FRP')
-	(\ *\(       # start of 2nd group (matches an optional relationship type with annotation) 
-				 # any spaces followed by a '('
-	([^:]*)      # 3rd group: match relationship type, any character but ':' (e.g. 'DEL', 'INT', 'MOD')
-	:?           # optional ':' separator
-	(.*)         # 4th group: match annotation, any text (e.g. 'URA3')
-	\))?         # end of 2nd (optional) group: closing bracket of relationship details
-				 # no '$': allow whitespace at the end
-"""
-
-""" due to some weird jython threading issue, we need to compile the pattern outside the function body """
-inputPattern = re.compile(INPUT_PATTERN, re.VERBOSE)
-
-"""relationship types shortcuts"""
-
-DEL_REL_TYPE = 'DEL'
-INT_REL_TYPE = 'INT'
-MOD_REL_TYPE = 'MOD'
-
-"""tuple of supported relationship types as shortcuts"""
-REL_TYPES = (DEL_REL_TYPE, INT_REL_TYPE, MOD_REL_TYPE)
-"""dictionary from relationship type shortcut to its 'character' representation"""
-REL_TYPE_CHARS = {
-	DEL_REL_TYPE: u'\u0394', # unicode '∆'
-#	DEL_REL_TYPE: 'D', 
-	INT_REL_TYPE: '::', 
-	MOD_REL_TYPE: '_' 
-}
-"""dictionary from relationship type shortcut to its full name/label"""
-REL_TYPE_LABELS = {
-	DEL_REL_TYPE: 'deletion', 
-	INT_REL_TYPE: 'integration', 
-	MOD_REL_TYPE: 'modification' 
-}
-
-REL_TYPE_LABEL_OTHER = '(other)'
-REL_TYPE_LABELS_WITH_NONE = tuple([REL_TYPE_LABEL_OTHER] + REL_TYPE_LABELS.values())
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-		sample_name = node.text
-	  else:
-		node.text = ""  
-		
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
-
-	  if node.text != "":
-		experiment_name = node.text
-	  else:
-		node.text = ""  
-	
-	
-	for path in [ './Pombe_Parents']:
-	  node = tree.find(path)
-	  if node.text != "":
-		pombe_parents = node.text
-	  else:
-		node.text = ""  
-
-	
-	plasmids=""	
-
-	def Plasmids():
-	  for path in [ './Plasmids']:
-		node = tree.find(path)
-		if node.text is not None:
-		  plasmids = node.text
-		  relationship_list=[]
-		  annotation_list	=[]
-		  plasmids_list=[]
-		  tokens = plasmids.split(',')
-		  for token in tokens:
-			print "token", token
-			if re.search(':', token): 
-			  token = token.split(':')
-			  plasmid_name = token[0][:-4]
-			  plasmid_relationship= token[0][-3:]
-			  plasmid_annotation=token[1][:-1]
-			  plasmids_list.append(plasmid_name)
-			  relationship_list.append(plasmid_relationship)
-			  annotation_list.append(plasmid_annotation)
-			else:
-			  plasmid_name=token  
-			  plasmid_relationship = ""
-			  plasmid_annotation =""
-			  plasmids_list.append(plasmid_name)
-			  relationship_list.append(plasmid_relationship)
-			  annotation_list.append(plasmid_annotation)
-		else:
-		  plasmids= None
-		  plasmid_name=None  
-		  plasmid_relationship = None
-		  plasmid_annotation =None
-		  plasmids_list=None
-		  relationship_list=None
-		  annotation_list=None
-
-	  return  plasmids, plasmids_list, relationship_list, annotation_list	  
-	
-	Plasmids()
-
-	plasmids=Plasmids()[0]
-	
-	
-	
-	print "plasmids function", Plasmids()[1]
-	
-		 
-	
-	for path in [ './XMLCOMMENTS']:
-	  node = tree.find(path)
-	  if node.text is not None:
-		comment_text_list= node.text
-	  else:
-		comment_text_list = None 
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-	
-
-### IMPORT YEAST PARENTS##############################################################
-
-	def _createPombeSampleLink(pombe_parents):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if pombe_parents is not None:
-		  YPpath= "/YEAST_LAB/" + pombe_parents
-		  permId =transaction.getSample(YPpath).getSample().getPermId()
-		  if not permId:
-			permId = pombe_parents
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, pombe_parents)
-		return sampleLink    
-	
-	
-	"""
-	Example input:
-	
-	FRY1, FRY2, FRY3, FRY4
-	"""
-	def updatePombeFromBatchInput(pombe_parents):
-		elements = []
-		input = pombe_parents
-		if input is not None:
-			samples = input.split(',')
-			for pombe_parents in samples:
-				sampleLink = _createPombeSampleLink(pombe_parents.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-	
-	
-	def _getPombeCode(pombe_parents):
-		elements = []
-		input = pombe_parents
-		if input is not None:
-			samples = input.split(',')
-			for pombe_parents in samples:
-				pombePath= "/YEAST_LAB/" + pombe_parents.strip()
-				elements.append(pombePath)   
-		return elements          
-
-
-
-
-###IMPORT PLASMID PARENTS#######################################################
-
-	def _group(pattern, input):
-		"""@return: groups returned by performing pattern search with given @pattern on given @input"""
-		return pattern.search(input).groups()
-	
-	
-	def _translateToChar(relationship_list):
-		"""
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @return: character representation of given @relationship, 
-					empty string for null
-					'[<relationship>]' for unknown relationship
-		"""
-		if relationship_list:
-			if relationship_list in REL_TYPE_CHARS:
-				return REL_TYPE_CHARS[relationship_list]
-			else:
-				return "[" + relationship_list + "]"
-		else:
-			return ""
-		
-		
-	def _translateToLabel(relationship_list):
-		"""
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @return: full name of given @relationship, 
-					empty string for null, 
-					'[<relationship>]' for unknown relationship
-		"""
-		if relationship_list:
-			if relationship_list in REL_TYPE_LABELS:
-				return REL_TYPE_LABELS[relationship_list]
-			else:
-				return "[" + relationship_list + "]"
-		else:
-			return REL_TYPE_LABEL_OTHER    
-	
-	def _translateFromLabel(relationshipLabel):
-		"""
-		   @param relationshipLabel: relationship type as label (@see REL_TYPE_LABELS_WITH_NONE)
-		   @return: type of given @relationshipLabel, None for REL_TYPE_LABEL_OTHER, 
-		"""
-		if relationshipLabel == REL_TYPE_LABEL_OTHER:
-			return None
-		elif relationshipLabel == 'deletion':
-			return DEL_REL_TYPE
-		elif relationshipLabel == 'integration':
-			return INT_REL_TYPE
-		elif relationshipLabel == 'modification':
-			return MOD_REL_TYPE    
-	
-	def _createConnectionString(plasmids_list, relationship_list, annotation_list):
-		"""
-		   @param plasmids: code of a sample
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @param annotation: annotation of the relationship, may be null
-		   @return: string representation of a connection with @relationship translated to a 'character'
-		"""
-		result = plasmids_list
-		if relationship_list:
-			result += _translateToChar(relationship_list)
-		if annotation_list:
-			result += annotation_list
-		return result
-
-	
-	def _createPlasmidSampleLink(plasmids_list, relationship_list, annotation_list):
-		"""
-		   Creates sample link XML element for sample with specified @code. The element will contain
-		   given @code as 'code' attribute apart from standard 'permId' attribute. If specified 
-		   @relationship or @annotation are not null they will also be contained as attributes.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with @code as permId.
-		   
-		   @param code: code of a sample
-		   @param relationship: relationship type as a shortcut (@see REL_TYPES), may be null
-		   @param annotation: annotation of the relationship, may be null
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FRP2" permId="20110309154532868-4219" relationship="DEL" annotation="URA3"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		   - '<Sample code="FRP4" permId="20110309154532868-4219" relationship="INT"/>'
-		   @raise Exception: if the specified relationship type is unknown
-		"""
-		if plasmids is not None:
-			print "plasmids not none is", plasmids
-			plasmidPath= "/YEAST_LAB/" + plasmids_list.strip()
-			permId =transaction.getSample(plasmidPath).getSample().getPermId()
-			if not permId:
-				permId = plasmids_list
-			sampleLink = elementFactory.createSampleLink(permId)
-			sampleLink.addAttribute(ATR_CODE, plasmids_list)
-			if relationship_list:
-				sampleLink.addAttribute(ATR_RELATIONSHIP, relationship_list)
-				if relationship_list in REL_TYPES:
-					connectionString = _createConnectionString(plasmids_list, relationship_list, annotation_list)
-				else:
-					raise ValidationException("Unknown relationship: '" + relationship_list + 
-											  "'. Expected one of: " + REL_TYPES)
-			if annotation_list:
-				sampleLink.addAttribute(ATR_ANNOTATION, annotation_list)
-		return sampleLink    
-
-	""" MAIN FUNCTIONS """
-	
-	"""Example input:
-	
-	FRP1 (DEL:URA3), FRP2 (INT), FRP3 (MOD:URA3), FRP4
-	
-	Relationship types:
-	- DEL: deletion
-	- INT: integration
-	- MOD: modification
-	"""
-	
-	def updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list):
-		elements = []
-		input = plasmids
-		if input is not None:
-			plas = input.split(',')
-			for p in plas:
-				(plasmids_list, g, relationship_list, annotation_list) = _group(inputPattern, p.strip())
-				sampleLink = _createPlasmidSampleLink(plasmids_list, relationship_list, annotation_list)
-				elements.append(sampleLink)
-		
-		parentsInput = pombe_parents
-		if parentsInput is not None:
-			parents = parentsInput.split(',')
-			for parent in parents:
-				PombePath= "/YEAST_LAB/" + parent.strip()
-				print "Pombe path  ", PombePath
-				parentPlasmids = transaction.getSample(PombePath).getPropertyValue('PLASMIDS')
-
-				if parentPlasmids is " ":
-					print "None:", parentPlasmids
-					continue
-				parentElements = list(propertyConverter.convertStringToElements(parentPlasmids))
-				print "pele", parentElements
-				for parentLink in parentElements:
-					elements.append(parentLink)     
-			
-		return propertyConverter.convertToString(elements)
-
-	
-	updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list)
-	
-	
-	def _getPlasmidCode(plasmids_list):
-		elements = []
-		input = plasmids_list
-		if input is not None:
-			for i in plasmids_list:
-				plasmidPath= "/YEAST_LAB/" + i.strip()
-				elements.append(plasmidPath)   
-		return elements          
-
-
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-				
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'POMBE')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-	
-	parents = _getPlasmidCode(plasmids_list) +  _getPombeCode(pombe_parents)
-	print "parents =", parents
-	newSample.setParentSampleIdentifiers(parents)
-	
-	for child in root:
-		if child.tag == "Pombe_Parents":
-			newSample.setPropertyValue("POMBE-PARENTS", updatePombeFromBatchInput(pombe_parents))
-		if child.tag == "Plasmids":
-			newSample.setPropertyValue("PLASMIDS",updatePlasmidFromBatchInput(plasmids_list, relationship_list, annotation_list))
-		if child.tag == "XMLCOMMENTS":
-			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Pombe_Parents" and child.tag != "Plasmids" and child.tag != "XMLCOMMENTS":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-readouts-dropbox/plugin.properties b/plasmid/source/drop-boxes/ylab-readouts-dropbox/plugin.properties
deleted file mode 100644
index afe7b0c8b8403c6180007f9eee5760b555deb266..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-readouts-dropbox/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = ylab-readouts-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-readouts-dropbox-v2.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/ylab-readouts-dropbox/xml_import-readouts-dropbox-v2.py b/plasmid/source/drop-boxes/ylab-readouts-dropbox/xml_import-readouts-dropbox-v2.py
deleted file mode 100644
index fb2f8bd8c246d3ec59da57b8e61a18ca89d24cfa..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-readouts-dropbox/xml_import-readouts-dropbox-v2.py
+++ /dev/null
@@ -1,539 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-print "########################################################"
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-ATR_NAME='name'
-ATR_CODE = "code"
-ATR_QUANTITY = "quantity"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-QUANTITY_LABEL = "quantity"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-NAME_LABEL='name'
-
-chemicals_list=[]
-quantity_list=[]
-buffers_list=[]
-buffers_quantity_list =[]
-medias_list=[]
-medias_quantity_list=[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-enzymes_list=[]
-protocols_list=[]
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-	    sample_name = node.text
-	  else:
-	    node.text = ""  
-	    
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
- 	  if node.text != "":
-		experiment_name = node.text
-	  else:
-	    node.text = ""  
-
-
-	
- 	def Protocols():
-	  for path in [ './General_Protocol']:
-		node = tree.find(path)
-		if node.text is not None:
-		  protocols = node.text
-		  tokens = protocols.split(',')
-		  for token in tokens:
-			protocols_name=token  
-			protocols_list.append(protocols_name)
-		else:
-		  node.text = "n.a." 	  
-	  return protocols_list	  
-	
-	Protocols()
-  
-  
-	  
-	def Chemicals():
-	  for path in [ './Chemicals']:
-		node = tree.find(path)
-		if node.text is not None:
-		  chemicals = node.text
-		  tokens = chemicals.split(',')
-		  for token in tokens:
-		    if re.search(":", token): 
-			  token = token.split(':')
-			  chemical_name = token[0]
-			  chemical_quantity=token[1]
-			  chemicals_list.append(chemical_name)
-			  qunatity_list.append(chemical_quantity)
-		    else:
-			  chemical_name=token  
-			  chemical_quantity = "n.a."
-			  chemicals_list.append(chemical_name)
-			  quantity_list.append(chemical_quantity)
-		else:
-		  node.text = "n.a." 	  
-	  print "CHEM", chemicals_list, quantity_list
-	  return chemicals_list, quantity_list	  
-	
-	Chemicals()
-
-	def Buffers():
-		  for path in [ './Solutions_Buffers']:
-			node = tree.find(path)
-			if node.text is not None:
-			  buffers = node.text
-			  tokens = buffers.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  buffer_name = token[0]
-				  buffer_quantity=token[1]
-				  buffers_list.append(buffer_name)
-				  buffers_quantty_list.append(buffer_quantity)
-				else:
-				  buffer_name=token  
-				  buffer_quantity = "n.a."
-				  buffers_list.append(buffer_name)
-				  buffers_quantity_list.append(buffer_quantity)
-			else:
-			  node.text = "n.a." 	  
-		  return buffers_list, buffers_quantity_list
-		  
-	Buffers()	  
-	
-	def Enzymes():
-		  for path in [ './Enzymes']:
-			node = tree.find(path)
-			if node.text is not None:
-			  enzymes = node.text
-			  tokens = enzymes.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  enzyme_name = token[0]
-				  enzyme_quantity=token[1]
-				  enzymes_list.append(enzyme_name)
-				else:
-				  enzyme_name=token  
-				  enzyme_quantity = "n.a."
-				  enzymes_list.append(enzyme_name)
-			else:
-			  node.text = "n.a." 	  
-		  return enzymes_list
-		  
-	Enzymes()	  
-
-	def Medias():
-		  for path in [ './Media']:
-			node = tree.find(path)
-			if node.text is not None:
-			  medias = node.text
-			  tokens = medias.split(',')
-			  for token in tokens:
-				if re.search(":", token): 
-				  token = token.split(':')
-				  media_name = token[0]
-				  media_quantity=token[1]
-				  medias_list.append(media_name)
-				  medias_quantity_list.append(media_quantity)
-				else:
-				  media_name=token  
-				  media_quantity = "n.a."
-				  medias_list.append(media_name)
-				  medias_quantity_list.append(media_quantity)
-			else:
-			  node.text = "n.a." 	  
-		  return medias_list, medias_quantity_list
-		  
-	Medias()	  
-
-
-	
-	
-	for path in [ './XMLCOMMENTS']:
-	  node = tree.find(path)
-	  if node.text is not None:
-		comment_text_list= node.text
-	  else:
-	    comment_text_list = None 
-
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-    
-
-###IMPORT PROTOCOLS####################################################################
-
-
-	def _createProtocolsLink(protocols_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if protocols_list is not None:
-		  protocolsPath= "/YEAST_LAB/" + protocols_list
-		  permId =transaction.getSample(protocolsPath).getSample().getPermId()
-		  if not permId:
-			permId = protocols_list
-		  name = transaction.getSample(protocolsPath).getPropertyValue("NAME")
-		  if name is None:
-		  	name = "n.a."
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, protocols_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateProtocolsFromBatchInput(protocols_list):
-		elements = []
-		input = protocols_list
-		if input != "":
-		   for i in protocols_list: 
-		   		sampleLink = _createProtocolsLink(i.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-	
-	updateProtocolsFromBatchInput(protocols_list)	
-
-
-
-###IMPORT CHEMICALS####################################################################
-
-
-	def _createChemicalsSampleLink(chemicals_list, quantity_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if chemicals_list is not None:
-		  chemicalPath= "/YEAST_LAB/" + chemicals_list
-		  permId =transaction.getSample(chemicalPath).getSample().getPermId()
-		  name = transaction.getSample(chemicalPath).getPropertyValue("NAME")
-		  if not permId:
-			permId = chemicals_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, chemicals_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_QUANTITY, quantity_list)
-		 		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateChemicalsFromBatchInput(chemicals_list, quantity_list):
-		elements = []
-		input = chemicals_list
-		input2 = quantity_list
-		if input != "":
-		   for i, j in zip(chemicals_list,quantity_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createChemicalsSampleLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-
-###IMPORT MEDIA####################################################################
-
-
-	def _createMediasLink(medias_list, medias_quantity_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if medias_list is not None:
-		  mediasPath= "/YEAST_LAB/" + medias_list
-		  permId =transaction.getSample(mediasPath).getSample().getPermId()
-		  if not permId:
-			permId = medias_list
-		  name = transaction.getSample(mediasPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, medias_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_QUANTITY, medias_quantity_list)
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateMediasFromBatchInput(medias_list, medias_quantity_list):
-		elements = []
-		input = medias_list
-		input2 = medias_quantity_list
-		if input != "":
-		   for i, j in zip(medias_list,medias_quantity_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createMediasLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-
-###IMPORT SOLUTION BUFFERS####################################################################
-
-
-	def _createBuffersLink(buffers_list, buffers_quantity_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if buffers_list is not None:
-		  buffersPath= "/YEAST_LAB/" + buffers_list
-		  permId =transaction.getSample(buffersPath).getSample().getPermId()
-		  if not permId:
-			permId = buffers_list
-		  name = transaction.getSample(buffersPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, buffers_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_QUANTITY, buffers_quantity_list)
-
-		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateBuffersFromBatchInput(buffers_list, buffers_quantity_list):
-		elements = []
-		input = buffers_list
-		input2 = buffers_quantity_list
-		if input != "":
-		   for i, j in zip(buffers_list,buffers_quantity_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createBuffersLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-		
-###IMPORT ENZYMES####################################################################
-
-
-	def _createEnzymesLink(enzymes_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if enzymes_list is not None:
-		  enzymesPath= "/YEAST_LAB/" + enzymes_list
-		  permId =transaction.getSample(enzymesPath).getSample().getPermId()
-		  if not permId:
-			permId = enzymes_list
-		  name = transaction.getSample(enzymesPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, enzymes_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		 		 
-		return sampleLink    
-	    
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateEnzymesFromBatchInput(enzymes_list):
-		elements = []
-		input = enzymes_list
-		if input != "":
-		   for i in enzymes_list: 
-				sampleLink = _createEnzymesLink(i.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-		  		
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		print "comments", comment_text_list  
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-	
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'READOUT')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-
-	""" Set enzymes, chemicals, buffers as parents for the sample"""	
-
-
-	protocolId_list =[]
-	for protocol in protocols_list:
-		protocolIdentifier = "/YEAST_LAB/" + protocol.strip()
-		protocolId_list.append(protocolIdentifier)
-
-
-	enzymeId_list =[]
-	for enzyme in enzymes_list:
-		enzymeIdentifier = "/YEAST_LAB/" + enzyme.strip()
-		enzymeId_list.append(enzymeIdentifier)
-
-	chemicalId_list =[]
-	for chemical in chemicals_list:
-		chemicalIdentifier = "/YEAST_LAB/" + chemical.strip()
-		chemicalId_list.append(chemicalIdentifier)
-		
-	bufferId_list =[]
-	for buffer in buffers_list:
-		bufferIdentifier = "/YEAST_LAB/" + buffer.strip()
-		bufferId_list.append(bufferIdentifier)
-		
-	mediaId_list =[]
-	for media in medias_list:
-		mediaIdentifier = "/YEAST_LAB/" + media.strip()
-		mediaId_list.append(mediaIdentifier)
-
-
-	parents_list = enzymeId_list + chemicalId_list + bufferId_list + mediaId_list
-	newSample.setParentSampleIdentifiers(parents_list)	
-	
-	
-	for child in root:
-		if child.tag == "Chemicals":
-			newSample.setPropertyValue("CHEMICALS",updateChemicalsFromBatchInput(chemicals_list,quantity_list))
-		if child.tag == "Solutions_Buffers":
-			newSample.setPropertyValue("SOLUTIONS_BUFFERS",updateBuffersFromBatchInput(buffers_list,buffers_quantity_list))
-		if child.tag == "Enzymes":
-			newSample.setPropertyValue("Enzymes",updateEnzymesFromBatchInput(enzymes_list))
-		if child.tag == "Media":
-			newSample.setPropertyValue("Media",updateMediasFromBatchInput(medias_list,medias_quantity_list))
-  		if child.tag == "General_Protocol":
-  			newSample.setPropertyValue("GENERAL_PROTOCOL", updateProtocolsFromBatchInput(protocols_list))
-  		if child.tag == "XMLCOMMENTS":
-  			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Chemicals" and child.tag != "Media" and child.tag != "General_Protocol" and child.tag != "XMLCOMMENTS" and child.tag != "Solutions_Buffers" and child.tag != "Enzymes":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-  			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/drop-boxes/ylab-westernblotting-dropbox/plugin.properties b/plasmid/source/drop-boxes/ylab-westernblotting-dropbox/plugin.properties
deleted file mode 100644
index 1798c5b2bb7043ac18714328423053e494d6b702..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-westernblotting-dropbox/plugin.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# 
-# Image drop box which registers a dataset from the webUI 
-#
-#
-# Variables:
-#   incoming-root-dir
-#     Path to the directory which contains incoming directories for drop boxes.
-
-dropbox-name = ylab-westernblotting-dropbox
-
-incoming-dir = /local0/openbis/yeastlab-server/dss-data/incoming-xml
-incoming-data-completeness-condition = auto-detection
-top-level-data-set-handler = ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2
-script-path = xml_import-westernblotting-dropbox-v2.py
-storage-processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor
diff --git a/plasmid/source/drop-boxes/ylab-westernblotting-dropbox/xml_import-westernblotting-dropbox-v2.py b/plasmid/source/drop-boxes/ylab-westernblotting-dropbox/xml_import-westernblotting-dropbox-v2.py
deleted file mode 100644
index f4d409429bfe4f5c5663e1c975ce223707c124d9..0000000000000000000000000000000000000000
--- a/plasmid/source/drop-boxes/ylab-westernblotting-dropbox/xml_import-westernblotting-dropbox-v2.py
+++ /dev/null
@@ -1,424 +0,0 @@
-#! /usr/bin/env python
-"""
- Import sample properties from a text file.  
-"""
-print "########################################################"
-
-import os
-import glob
-import re
-import time
-import shutil, sys
-
-import xml.etree.ElementTree as ET
-from xml.etree import ElementTree
-
-from time import *
-from datetime import datetime
-import calendar
-
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import ElementFactory
-from ch.systemsx.cisd.openbis.generic.shared.managed_property.structured import XmlStructuredPropertyConverter
-
-ATR_NAME='name'
-ATR_CODE = "code"
-ATR_CONC = "concentration"
-DATE_ATTRIBUTE = 'date'
-PERSON_ATTRIBUTE = 'person'
-COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry'
-LINK_LABEL = "link"
-CODE_LABEL = "code"
-CONC_LABEL = "concentration"
-DATE_LABEL = 'Date'
-PERSON_LABEL = 'Person'
-COMMENT_TEXT_LABEL = 'Comment Text'
-NAME_LABEL='name'
-
-chemicals_list=[]
-concentration_list=[]
-buffers_list=[]
-buffers_concentration_list =[]
-date_list=[]
-person_list=[]
-comment_text_list=[]
-antibodies_list=[]
-
-
-def create_openbis_timestamp():
-	tz=localtime()[3]-gmtime()[3]
-	d=datetime.now().timetuple()
-	timestamp = (calendar.timegm(d)*1000)
-	return timestamp
-   
-
-def process(transaction):
-	incomingPath = transaction.getIncoming().getAbsolutePath()
-
-###PARSE XML FILE############################################################
-
-
-	textfile = open(incomingPath, "r")
-	tree = ET.parse(textfile)
-	root = tree.getroot()
-
-	
-	
-	for path in [ './Identifier']:
-	  node = tree.find(path)
-	  if node.text != "":
-		sample_name = node.text
-	  else:
-		node.text = ""  
-		
-	  
-	for path in [ './Experiment']:
-	  node = tree.find(path)
-	  if node.text != "":
-		experiment_name = node.text
-	  else:
-		node.text = ""  
-	
-	
-	   
-	chemicals_found = False
-	for child in root.getchildren():
-		if child.tag == 'Chemicals':
-			chemicals_found = True	  
-			def Chemicals():
-				for path in [ './Chemicals']:
-					node = tree.find(path)
-					if node.text is not None:
-						chemicals = node.text
-						tokens = chemicals.split(',')
-						for token in tokens:
-							if re.search(":", token): 
-								token = token.split(':')
-								chemical_name = token[0]
-								chemical_concentration=token[1]
-								chemicals_list.append(chemical_name)
-								concentration_list.append(chemical_concentration)
-							else:
-								chemical_name=token  
-								chemical_concentration = "n.a."
-								chemicals_list.append(chemical_name)
-								concentration_list.append(chemical_concentration)
-					else:
-						node.text = "n.a." 	  
-				return chemicals_list, concentration_list	  
-	
-			Chemicals()
-		if not chemicals_found:
-			chemicals= None
-			chemical_name = None
-			chemical_concentration = None
-			chemicals_list = None
-			concentration_list = None
-
-
-	buffers_found = False
-	for child in root.getchildren():
-		if child.tag == 'Solutions_Buffers':
-			buffers_found = True
-			def Buffers():
-				  for path in [ './Solutions_Buffers']:
-					node = tree.find(path)
-					if node.text is not None:
-					  buffers = node.text
-					  tokens = buffers.split(',')
-					  for token in tokens:
-						if re.search(":", token): 
-						  token = token.split(':')
-						  buffer_name = token[0]
-						  buffer_concentration=token[1]
-						  buffers_list.append(buffer_name)
-						  buffers_concentration_list.append(buffer_concentration)
-						else:
-						  buffer_name=token  
-						  buffer_concentration = "n.a."
-						  buffers_list.append(buffer_name)
-						  buffers_concentration_list.append(buffer_concentration)
-					else:
-					  node.text = "n.a." 	  
-				  return buffers_list, buffers_concentration_list
-				  
-			Buffers()	  
-		if not chemicals_found:
-			buffers= None
-			buffer_name = None
-			buffer_concentration = None
-			buffers_list = None
-			buffers_concentration_list = None
-	
-
-
-	antibodies_found = False
-	for child in root.getchildren():
-		if child.tag == 'Antibodies':
-			antibodies_found = True
-			def Antibodies():
-				for path in [ './Antibodies']:
-					node = tree.find(path)
-					if node.text is not None:
-						antibodies = node.text
-						tokens = antibodies.split(',')
-						for token in tokens:
-							if re.search(":", token): 
-								token = token.split(':')
-								antibody_name = token[0]
-								antibody_concentration=token[1]
-								antibodies_list.append(antibody_name)
-							else:
-								antibody_name=token  
-								antibody_concentration = "n.a."
-								antibodies_list.append(antibody_name)
-					else:
-						node.text = "n.a." 	  
-		  
-				return antibodies_list
-			Antibodies()
-		if not antibodies_found:
-			antibodies= None
-			antibody_name = None
-			antibody_concentration = None
-			antibodies_list = None
-
-
-
-	
-	
-	xmlcomments_found = False
-	for child in root.getchildren():
-		if child.tag == 'XMLCOMMENTS':
-			xmlcomments_found = True
-			for path in [ './XMLCOMMENTS']:
-				node = tree.find(path)
-				if node.text is not None:
-					comment_text_list= node.text
-				else:
-					comment_text_list = None 
-		if not xmlcomments_found:
-			comment_text_list = None
-
-
-
-	elementFactory = ElementFactory()
-	
-	propertyConverter = XmlStructuredPropertyConverter(elementFactory);
-	
-
-
-###IMPORT CHEMICALS####################################################################
-
-
-	def _createChemicalsSampleLink(chemicals_list, concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if chemicals_list is not None:
-		  chemicalPath= "/YEAST_LAB/" + chemicals_list
-		  permId =transaction.getSample(chemicalPath).getSample().getPermId()
-		  name = transaction.getSample(chemicalPath).getPropertyValue("NAME")
-		  if not permId:
-			permId = chemicals_list
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, chemicals_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, concentration_list)
-				 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateChemicalsFromBatchInput(chemicals_list, concentration_list):
-		elements = []
-		input = chemicals_list
-		input2 = concentration_list
-		if input != "":
-		   for i, j in zip(chemicals_list,concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createChemicalsSampleLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-
-
-###IMPORT SOLUTION BUFFERS####################################################################
-
-
-	def _createBuffersLink(buffers_list, buffers_concentration_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if buffers_list is not None:
-		  buffersPath= "/YEAST_LAB/" + buffers_list
-		  permId =transaction.getSample(buffersPath).getSample().getPermId()
-		  if not permId:
-			permId = buffers_list
-		  name = transaction.getSample(buffersPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, buffers_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-		  sampleLink.addAttribute(ATR_CONC, buffers_concentration_list)
-
-		 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateBuffersFromBatchInput(buffers_list, buffers_concentration_list):
-		elements = []
-		input = buffers_list
-		input2 = buffers_concentration_list
-		if input != "":
-		   for i, j in zip(buffers_list,buffers_concentration_list): #zip is used to iterate over two lists in parallel
-				sampleLink = _createBuffersLink(i.strip(), j.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)
-		
-###IMPORT MEDIA####################################################################
-
-
-	def _createAntibodiesLink(antibodies_list):
-		"""
-		   Creates sample link XML element for sample with specified 'code'. The element will contain
-		   given code as 'code' attribute apart from standard 'permId' attribute.
-		   
-		   If the sample doesn't exist in DB a fake link will be created with the 'code' as permId.
-		   
-		   @return: sample link XML element as string, e.g.:
-		   - '<Sample code="FRP1" permId="20110309154532868-4219"/>'
-		   - '<Sample code="FAKE_SAMPLE_CODE" permId="FAKE_SAMPLE_CODE"/>
-		"""
-		if antibodies_list is not None:
-		  antibodiesPath= "/YEAST_LAB/" + antibodies_list
-		  permId =transaction.getSample(antibodiesPath).getSample().getPermId()
-		  if not permId:
-			permId = antibodies_list
-		  name = transaction.getSample(antibodiesPath).getPropertyValue("NAME")
-		  sampleLink = elementFactory.createSampleLink(permId)
-		
-		  sampleLink.addAttribute(ATR_CODE, antibodies_list)
-		  sampleLink.addAttribute(ATR_NAME, name)
-				 
-		return sampleLink    
-		
-	
-	"""
-	Example input:
-	
-	FRC1: 2nM, FRC2, FRC3: 4nM, FRC4
-	"""
-	
-	
-	def updateAntibodiesFromBatchInput(antibodies_list):
-		elements = []
-		input = antibodies_list
-		if input != "":
-		   for i in antibodies_list: 
-				sampleLink = _createAntibodiesLink(i.strip())
-				elements.append(sampleLink)
-		return propertyConverter.convertToString(elements)			
-		
-		
-###IMPORT COMMENTS####################################################################
-	
-	
-
-	def _createCommentsSampleLink(comment_text_list):
-		#if comment_text_list is not None:
-		commentEntry = elementFactory.createElement(COMMENT_ENTRY_ELEMENT_LABEL)
-				
-		user = transaction.getUserId()
-		commentEntry.addAttribute(PERSON_ATTRIBUTE, user)
-		commentEntry.addAttribute(DATE_ATTRIBUTE,str(create_openbis_timestamp()))
-		commentEntry.setData(comment_text_list)
-		print "comments", comment_text_list  
-		return commentEntry   
-	
-	def updateCommentsFromBatchInput(comment_text_list):
-		elements = []
-		input = comment_text_list
-		#if input is not None:
-		commentEntry = _createCommentsSampleLink(comment_text_list)
-		elements.append(commentEntry)
-		return propertyConverter.convertToString(elements)
-	
-	_createCommentsSampleLink(comment_text_list)
-	
-	
-	
-
-###CREATE New sample with related properties#################################################
-
-	newSampleIdentifier="/YEAST_LAB/" + sample_name
-	newSample=transaction.createNewSample(newSampleIdentifier,'WESTERN_BLOTTING')
-	
-	
-	exp = transaction.getExperiment(experiment_name)
-	newSample.setExperiment(exp)
-
-	""" Set antibodies, chemicals, buffers as parents for the sample"""	
-
-	antibodyId_list =[]
-	if antibodies_list != None:
-		for antibody in antibodies_list:
-			antibodyIdentifier = "/YEAST_LAB/" + antibody.strip()
-			antibodyId_list.append(antibodyIdentifier)
-
-	chemicalId_list =[]
-	if chemicals_list != None:
-		for chemical in chemicals_list:
-			chemicalIdentifier = "/YEAST_LAB/" + chemical.strip()
-			chemicalId_list.append(chemicalIdentifier)
-		
-	bufferId_list =[]
-	if buffers_list != None:
-		for buffer in buffers_list:
-			bufferIdentifier = "/YEAST_LAB/" + buffer.strip()
-			bufferId_list.append(bufferIdentifier)
-		
-	parents_list = antibodyId_list + chemicalId_list + bufferId_list
-	newSample.setParentSampleIdentifiers(parents_list)	
-	
-	
-	for child in root:
-		if child.tag == "Chemicals":
-			newSample.setPropertyValue("CHEMICALS",updateChemicalsFromBatchInput(chemicals_list,concentration_list))
-		if child.tag == "Solutions_Buffers":
-			newSample.setPropertyValue("SOLUTIONS_BUFFERS",updateBuffersFromBatchInput(buffers_list,buffers_concentration_list))
-		if child.tag == "Antibodies":
-			newSample.setPropertyValue("ANTIBODIES",updateAntibodiesFromBatchInput(antibodies_list))
-		if child.tag == "XMLCOMMENTS":
-			newSample.setPropertyValue("XMLCOMMENTS", updateCommentsFromBatchInput(comment_text_list))
-		if child.tag != "Identifier" and child.tag !="Experiment" and child.tag != "Chemicals" and child.tag != "XMLCOMMENTS" and child.tag != "Solutions_Buffers" and child.tag != "Antibodies":
-			if child.text != None:
-				newSample.setPropertyValue(child.tag, child.text)
-			else:
-				child.text= ""
-				newSample.setPropertyValue(child.tag, child.text)
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/.gitignore b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/.gitignore
deleted file mode 100644
index a8513c64ba280ab88b1917f21899ce560b112860..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/PlasmidStorageProcessor.java
-/CopyOfPlasmidDataSetHandler.java
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/DataSetTypeOracle.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/DataSetTypeOracle.java
deleted file mode 100644
index 8e805bfe4ed8d7bb295a270d0b203a7bcec8b1ff..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/DataSetTypeOracle.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid.dss;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Map.Entry;
-
-import org.apache.commons.io.FilenameUtils;
-
-import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.etlserver.FileTypeExtractor;
-
-/**
- * This oracle knows the extensions of the different types of data files provided by CSB.
- * 
- * @author Piotr Buczek
- */
-class DataSetTypeOracle
-{
-    public static final String DATASET_TYPES_NAME = "dataset-types";
-
-    /**
-     * The different kinds of data set types known to the oracle.
-     * 
-     * @author Piotr Buczek
-     */
-    static enum DataSetTypeInfo
-    {
-        // only SEQ_FILE files are derived, other files are measured
-        SEQ_FILE(false), RAW_DATA(true), VERIFICATION(true), UNKNOWN(true);
-
-        private final boolean measured;
-
-        DataSetTypeInfo(boolean measured)
-        {
-            this.measured = measured;
-        }
-
-        public String getDataSetTypeCode()
-        {
-            return name();
-        }
-
-        public boolean isMeasured()
-        {
-            return measured;
-        }
-    }
-
-    private static DataSetTypeInfo getType(final String typeName)
-    {
-        try
-        {
-            return DataSetTypeInfo.valueOf(typeName);
-        } catch (IllegalArgumentException e)
-        {
-            throw ConfigurationFailureException.fromTemplate(
-                    "Wrong dataset type '%s'. Expected one of: '%s'.", typeName, Arrays
-                            .toString(DataSetTypeInfo.values()));
-        }
-    }
-
-    private static Map<String, DataSetTypeInfo> typeInfoByExtension =
-            new HashMap<String, DataSetTypeInfo>();
-
-    static void initializeMapping(Properties properties)
-    {
-        Map<String, String> map =
-                FileTypeExtractor.createTypeByFileExtensionMap(properties, DATASET_TYPES_NAME);
-        for (Entry<String, String> entry : map.entrySet())
-        {
-            typeInfoByExtension.put(entry.getKey(), getType(entry.getValue()));
-        }
-    }
-
-    /**
-     * Extracts {@link DataSetTypeInfo} from the name of the dataset file.
-     * 
-     * @throws UserFailureException if <var>incomingDataSetPath</var> is a path to a directory
-     */
-    static DataSetTypeInfo extractDataSetTypeInfo(File incomingDataSetPath)
-            throws UserFailureException
-    {
-        if (incomingDataSetPath.isDirectory())
-        {
-            return DataSetTypeInfo.UNKNOWN;
-        }
-
-        final String fileName = incomingDataSetPath.getName().toLowerCase();
-        final String fileExtension = FilenameUtils.getExtension(fileName);
-
-        DataSetTypeInfo result = tryGetMappedType(fileExtension);
-        return result == null ? DataSetTypeInfo.VERIFICATION : result;
-    }
-
-    private static DataSetTypeInfo tryGetMappedType(String fileExtension)
-    {
-        return typeInfoByExtension.get(normalizeExtension(fileExtension));
-    }
-
-    private static String normalizeExtension(String extension)
-    {
-        return extension.toUpperCase();
-    }
-
-}
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/ParentDirectoryDataSetInfoExtractor.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/ParentDirectoryDataSetInfoExtractor.java
deleted file mode 100644
index a66aeb115518183a67a0bb7bc2f841b1c6adb9f5..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/ParentDirectoryDataSetInfoExtractor.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid.dss;
-
-import java.io.File;
-import java.util.Properties;
-
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.etlserver.AbstractDelegatingDataSetInfoExtractor;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
-
-/**
- * CSB uses DSS to register data sets attached to an existing sample plasmid. This extractor will receive a file that is inside a directory from which
- * delegate will extract information about the sample.
- * 
- * @author Piotr Buczek
- */
-public class ParentDirectoryDataSetInfoExtractor extends AbstractDelegatingDataSetInfoExtractor
-{
-
-    public ParentDirectoryDataSetInfoExtractor(final Properties properties)
-    {
-        super(properties);
-    }
-
-    @Override
-    public DataSetInformation getDataSetInformation(File incomingDataSetFile,
-            IEncapsulatedOpenBISService openbisService) throws UserFailureException,
-            EnvironmentFailureException
-    {
-        return super.getDataSetInformation(incomingDataSetFile.getParentFile(), openbisService);
-    }
-}
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidDataSetHandler.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidDataSetHandler.java
deleted file mode 100644
index c874c708b10edc0218fcaebd1fcd680a9c6fb813..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidDataSetHandler.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid.dss;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.commons.io.filefilter.HiddenFileFilter;
-import org.apache.log4j.Logger;
-
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.etlserver.IDataSetHandler;
-import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
-import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
-
-/**
- * Data set handler for plasmid data sets.
- * <p>
- * All visible files (with names not starting with '.') in the handled directory are delegated to the handler provided in the constructor. As the
- * result a new data set will be created for each file in the directory.
- * 
- * @author Piotr Buczek
- */
-public class PlasmidDataSetHandler implements IDataSetHandler
-{
-    private static final Logger operationLog =
-            LogFactory.getLogger(LogCategory.OPERATION, PlasmidDataSetHandler.class);
-
-    private final IDataSetHandler delegator;
-
-    public PlasmidDataSetHandler(Properties parentProperties, IDataSetHandler delegator,
-            IEncapsulatedOpenBISService openbisService)
-    {
-        this.delegator = delegator;
-    }
-
-    @Override
-    public List<DataSetInformation> handleDataSet(File dataSet)
-    {
-        if (dataSet.isDirectory() == false)
-        {
-            throw UserFailureException.fromTemplate(
-                    "Failed to handle file '%s'. Expected a directory.", dataSet);
-        }
-
-        // handle all visible files by delegator
-        List<DataSetInformation> result = new ArrayList<DataSetInformation>();
-        final File[] visibleFiles = dataSet.listFiles((FileFilter) HiddenFileFilter.VISIBLE);
-        for (File file : visibleFiles)
-        {
-            result.addAll(delegator.handleDataSet(file));
-        }
-
-        // delete all hidden files and the directory
-        final File[] hiddenFiles = dataSet.listFiles((FileFilter) HiddenFileFilter.HIDDEN);
-        for (File file : hiddenFiles)
-        {
-            String deletionStatus =
-                    FileUtilities.deleteRecursively(file) ? "Deleted" : "Failed to delete";
-            operationLog.info(String.format("%s hidden file: %s", deletionStatus, file));
-        }
-        if (dataSet.delete() == false)
-        {
-            throw new EnvironmentFailureException(String.format("Failed to delete '%s' directory.",
-                    dataSet));
-        }
-
-        return result;
-    }
-}
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidStorageProcessor.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidStorageProcessor.java
deleted file mode 100644
index 606ebde47b97b5155ab085423140c37f7cefdf84..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidStorageProcessor.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid.dss;
-
-import java.io.File;
-import java.util.Properties;
-
-import org.apache.commons.io.FilenameUtils;
-import org.apache.log4j.Logger;
-
-import ch.ethz.bsse.cisd.plasmid.plasmapper.PlasMapperUploader;
-import ch.ethz.bsse.cisd.plasmid.plasmapper.PlasMapperUploader.PlasMapperService;
-import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.filesystem.FileOperations;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.common.mail.IMailClient;
-import ch.systemsx.cisd.common.properties.PropertyUtils;
-import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
-import ch.systemsx.cisd.etlserver.AbstractDelegatingStorageProcessor;
-import ch.systemsx.cisd.etlserver.AbstractDelegatingStorageProcessorTransaction;
-import ch.systemsx.cisd.etlserver.ITypeExtractor;
-
-/**
- * Stores files containing plasmid data in the DSS store. Additionally for files holding a DNA sequence it uses PlasMapper (see
- * http://wishart.biology.ualberta.ca/PlasMapper/) to generate:
- * <ul>
- * <li>a GB file with the same sequence but in a standard Genbank format
- * <li>a PNG file with a graphical representation of the plasmid sequence (Graphic Map)
- * </ul>
- * The generated files will be stored in a separate directory ('generated') of the created Dataset. They will have the same base name as the original
- * file holding the DNA sequence which will be kept in 'original' directory.
- * 
- * @author Piotr Buczek
- */
-public class PlasmidStorageProcessor extends AbstractDelegatingStorageProcessor
-{
-    private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
-            PlasmidStorageProcessor.class);
-
-    private static final Logger notifyLog = LogFactory.getLogger(LogCategory.NOTIFY,
-            PlasmidStorageProcessor.class);
-
-    private final static String HTML_FILE_TEMPLATE =
-            "<html><head>\n"
-                    + "<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\"><title>PlasMapper - Graphic Map</title></head>\n"
-                    + "<body>\n"
-                    + "<embed src=\"%%FILE_NAME%%\" type=\"image/svg+xml\" pluginspage=\"http://www.adobe.com/svg/viewer/install/\" id=\"Panel\" height=\"1010\" width=\"1010\">\n"
-                    + "<br>\n" + "<a href=\"%%FILE_NAME%%\" target=\"_blank\">Download Link</a>"
-                    + "</body></html>";
-
-    private final static String PLASMAPPER_BASE_URL_KEY = "plasmapper-base-url";
-
-    private final static String PLASMAPPER_ROOT_DIR_KEY = "plasmapper-root-dir";
-
-    private static final String ORIGINAL_DIR = "original";
-
-    private static final String GENERATED_DIR = "generated";
-
-    private static final String GB_FILE_EXTENSION = ".gb";
-
-    private static final String SVG_FILE_EXTENSION = ".svg";
-
-    private final PlasMapperUploader uploader;
-
-    private final String serverRootDir;
-
-    public PlasmidStorageProcessor(Properties properties)
-    {
-        super(properties);
-        final String baseUrl =
-                PropertyUtils.getMandatoryProperty(properties, PLASMAPPER_BASE_URL_KEY);
-        this.uploader = new PlasMapperUploader(baseUrl);
-        this.serverRootDir =
-                PropertyUtils.getMandatoryProperty(properties, PLASMAPPER_ROOT_DIR_KEY);
-
-        final File serverRootFile = new File(serverRootDir);
-        if ((serverRootFile.isDirectory() && serverRootFile.canRead()) == false)
-        {
-            final String msg =
-                    String.format("'%s' (value of '%s' property) is supposed to be a path "
-                            + "to an existing readable directory but isn't.", serverRootDir,
-                            PLASMAPPER_ROOT_DIR_KEY);
-            throw new EnvironmentFailureException(msg);
-        }
-    }
-
-    @Override
-    public IStorageProcessorTransaction createTransaction(
-            StorageProcessorTransactionParameters parameters)
-    {
-        return new PlasmidStorageProcessorTransaction(parameters,
-                super.createTransaction(parameters), this);
-    }
-
-    // WORKAROUND cannot move the file because it is on a different filesystem
-    private void uploadAndCopyGeneratedFile(final File seqFile, final PlasMapperService service,
-            final File destinationFile)
-    {
-        String outputFilePath = uploader.upload(seqFile, service);
-        if (StringUtils.isBlank(outputFilePath))
-        {
-            notifyLog.error("Cannot upload file '" + seqFile.getName()
-                    + "', see jetty.out for details.");
-            throw new IllegalStateException("Cannot upload file '" + seqFile.getName()
-                    + "', see jetty.out for details.");
-        }
-        File outputFile = new File((serverRootDir + outputFilePath).trim());        
-        if (outputFile.isFile())
-        {
-            operationLog.info("Renaming and copying file '" + outputFile.getName() + "' from '"
-                    + outputFile + "' to " + destinationFile);
-            FileOperations.getInstance().copyFile(outputFile, destinationFile);
-
-            if (destinationFile.getName().endsWith("svg"))
-            {
-                String htmlFileName = destinationFile.getName().replaceAll(".svg", ".html");
-                File htmlFile = new File(destinationFile.getParentFile(), htmlFileName);
-                operationLog.info("Generating html file '" + htmlFile + "'");
-                FileUtilities.writeToFile(htmlFile,
-                        HTML_FILE_TEMPLATE.replaceAll("%%FILE_NAME%%", destinationFile.getName()));
-            }
-        } else
-        {
-            throw new EnvironmentFailureException("'" + outputFile
-                    + "' doesn't exist or is not a file.");
-        }
-    }
-
-    static class PlasmidStorageProcessorTransaction extends
-            AbstractDelegatingStorageProcessorTransaction
-    {
-
-        private static final long serialVersionUID = 1L;
-
-        private final transient PlasmidStorageProcessor processor;
-
-        public PlasmidStorageProcessorTransaction(StorageProcessorTransactionParameters parameters,
-                IStorageProcessorTransaction superTransaction, PlasmidStorageProcessor processor)
-        {
-            super(parameters, superTransaction);
-            this.processor = processor;
-        }
-
-        @Override
-        protected File executeStoreData(ITypeExtractor typeExtractor, IMailClient mailClient)
-        {
-            nestedTransaction.storeData(typeExtractor, mailClient, incomingDataSetDirectory);
-            File answer = nestedTransaction.getStoredDataDirectory();
-
-            boolean isSeqType =
-                    typeExtractor.getDataSetType(incomingDataSetDirectory).getCode()
-                            .equals(DataSetTypeOracle.DataSetTypeInfo.SEQ_FILE.name());
-            boolean isFaExtension =
-                    "fa".equals(FilenameUtils.getExtension(incomingDataSetDirectory.getName()));
-
-            if (isSeqType && !isFaExtension)
-            {
-                File originalDir = new File(answer, ORIGINAL_DIR);
-                File[] files = originalDir.listFiles();
-                assert files.length == 1;
-                File seqFile = files[0];
-
-                String baseFileName = FilenameUtils.getBaseName(seqFile.getName());
-                String svgFileName = baseFileName + SVG_FILE_EXTENSION;
-                String gbFileName = baseFileName + GB_FILE_EXTENSION;
-
-                File generatedDir = new File(answer, GENERATED_DIR);
-                if (generatedDir.mkdir())
-                {
-                    final File svgFileDest = new File(generatedDir, svgFileName);
-                    final File gbFileDest = new File(generatedDir, gbFileName);
-
-                    operationLog.info("Uploading '" + seqFile.getName() + "' to PlasMapper.");
-                    processor.uploadAndCopyGeneratedFile(seqFile, PlasMapperService.GRAPHIC_MAP,
-                            svgFileDest);
-                    processor.uploadAndCopyGeneratedFile(seqFile,
-                            PlasMapperService.GENEBANK_OUTPUT, gbFileDest);
-                } else
-                {
-                    throw new EnvironmentFailureException("Couldn't create directory '"
-                            + generatedDir + "'.");
-                }
-            }
-            return answer;
-        }
-
-        @Override
-        protected UnstoreDataAction executeRollback(Throwable ex)
-        {
-            return nestedTransaction.rollback(ex);
-        }
-
-        @Override
-        protected void executeCommit()
-        {
-            nestedTransaction.commit();
-        }
-    }
-
-}
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidTypeExtractor.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidTypeExtractor.java
deleted file mode 100644
index 401b448f8b6d3fa0e131373e5223e5f8eab9199d..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidTypeExtractor.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid.dss;
-
-import java.io.File;
-import java.util.Properties;
-
-import ch.systemsx.cisd.etlserver.FileTypeExtractor;
-import ch.systemsx.cisd.etlserver.ITypeExtractor;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LocatorType;
-
-/**
- * The extractor that recognizes following data set types:
- * <ul>
- * <li>SEQ_FILE -- for a single file with one of extensions: <b>gb</b>, <b>fasta</b>, <b>xdna</b>
- * <li>RAW_DATA -- for a single file with <b>ab1</b> extension
- * <li>VERIFICATION -- for all other single files
- * <li>UNKNOWN -- for directories (they can contain files with arbitrary data)
- * </ul>
- * 
- * @author Piotr Buczek
- */
-public class PlasmidTypeExtractor extends FileTypeExtractor implements ITypeExtractor
-{
-
-    public PlasmidTypeExtractor(final Properties properties)
-    {
-        super(properties);
-        DataSetTypeOracle.initializeMapping(properties);
-    }
-
-    @Override
-    public DataSetType getDataSetType(File incomingDataSetPath)
-    {
-        final String code =
-                DataSetTypeOracle.extractDataSetTypeInfo(incomingDataSetPath).getDataSetTypeCode();
-        return new DataSetType(code);
-    }
-
-    @Override
-    public LocatorType getLocatorType(File incomingDataSetPath)
-    {
-        return new LocatorType(LocatorType.DEFAULT_LOCATOR_TYPE_CODE);
-    }
-
-    @Override
-    public String getProcessorType(File incomingDataSetPath)
-    {
-        return null;
-    }
-
-    @Override
-    public boolean isMeasuredData(File incomingDataSetPath)
-    {
-        return DataSetTypeOracle.extractDataSetTypeInfo(incomingDataSetPath).isMeasured();
-    }
-
-}
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/plasmapper/PlasMapperUploader.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/plasmapper/PlasMapperUploader.java
deleted file mode 100644
index 8e27b0683b9fb41e8fa61e0e93c6fda1e7a391fa..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/plasmapper/PlasMapperUploader.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid.plasmapper;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Properties;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Logger;
-import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.api.ContentProvider;
-import org.eclipse.jetty.client.api.ContentResponse;
-import org.eclipse.jetty.client.api.Request;
-import org.eclipse.jetty.client.util.StringContentProvider;
-import org.eclipse.jetty.http.HttpStatus;
-
-import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
-import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.http.JettyHttpClientFactory;
-import ch.systemsx.cisd.common.logging.LogCategory;
-import ch.systemsx.cisd.common.logging.LogFactory;
-
-/**
- * Uploads provided sequence file to PlasMapper.
- * 
- * @author Piotr Buczek
- */
-public class PlasMapperUploader
-{
-
-    private static final String CRLF = "\r\n";
-
-    private static final String BOUNDARY = "MMMMM___MP_BOUNDARY___MMMMM";
-
-    private final static String DEFAULT_PLASMAPPER_URL = "http://wishart.biology.ualberta.ca/PlasMapper";
-
-    private static Properties createDefaultProperties()
-    {
-        Properties result = new Properties();
-        result.setProperty("vendor", "Amersham%20Pharmacia");
-        result.setProperty("showOption", "1,2,3,4,5,6,7,8,9");
-        result.setProperty("restriction", "1");
-        result.setProperty("orfLen", "200");
-        result.setProperty("strand", "1,2");
-        result.setProperty("featureName1", "");
-        result.setProperty("featureName2", "");
-        result.setProperty("featureName3", "");
-        result.setProperty("featureName4", "");
-        result.setProperty("featureName5", "");
-        result.setProperty("featureName6", "");
-        result.setProperty("dir1", "1");
-        result.setProperty("dir2", "1");
-        result.setProperty("dir3", "1");
-        result.setProperty("dir4", "1");
-        result.setProperty("dir5", "1");
-        result.setProperty("dir6", "1");
-        result.setProperty("category1", "origin_of_replication");
-        result.setProperty("category2", "origin_of_replication");
-        result.setProperty("category3", "origin_of_replication");
-        result.setProperty("category4", "origin_of_replication");
-        result.setProperty("category5", "origin_of_replication");
-        result.setProperty("category6", "origin_of_replication");
-        result.setProperty("stop1", "");
-        result.setProperty("stop2", "");
-        result.setProperty("stop3", "");
-        result.setProperty("stop4", "");
-        result.setProperty("stop5", "");
-        result.setProperty("stop6", "");
-        result.setProperty("scheme", "0");
-        result.setProperty("shading", "0");
-        result.setProperty("labColor", "0");
-        result.setProperty("labelBox", "1");
-        result.setProperty("labels", "0");
-        result.setProperty("innerLabels", "0");
-        result.setProperty("legend", "0");
-        result.setProperty("arrow", "0");
-        result.setProperty("tickMark", "0");
-        result.setProperty("mapTitle", "");
-        result.setProperty("comment", "Created using PlasMapper");
-        result.setProperty("imageFormat", "SVG");
-        result.setProperty("imageSize", "1000 x 1000");
-        result.setProperty("backbone", "medium");
-        result.setProperty("arc", "medium");
-        // special: result of request == relative path to the SVG/GB file
-        result.setProperty("biomoby", "true");
-        return result;
-    }
-
-    public enum PlasMapperService
-    {
-
-        GRAPHIC_MAP("/servlet/DrawVectorMap"), GENEBANK_OUTPUT("/servlet/GenbankOutput");
-
-        private final String servletPath;
-
-        PlasMapperService(String servletPath)
-        {
-            this.servletPath = servletPath;
-        }
-
-        String getServletPath()
-        {
-            return servletPath;
-        }
-
-    }
-
-    private static final String LIST_SEPARATOR = ",";
-
-    private final static String FILE_PART_NAME = "fastaFile";
-
-    private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
-            PlasMapperUploader.class);
-
-    private static final Logger notificationLog = LogFactory.getLogger(LogCategory.NOTIFY,
-            PlasMapperUploader.class);
-
-    public static void main(String[] args)
-    {
-        final Properties p = createDefaultProperties();
-        final PlasMapperUploader uploader = new PlasMapperUploader(DEFAULT_PLASMAPPER_URL, p);
-        final File seqFile = new File("source/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/FRP1955.fasta");
-        for (PlasMapperService service : PlasMapperService.values())
-        {
-            String response = uploader.upload(seqFile, service);
-            System.out.println(String.format("Response of %s service: '%s'", service, response));
-        }
-    }
-
-    private final String baseUrl;
-
-    private final Properties properties;
-
-    public PlasMapperUploader(String baseUrl, Properties properties)
-    {
-        this.baseUrl = baseUrl;
-        this.properties = properties;
-    }
-
-    public PlasMapperUploader(String baseUrl)
-    {
-        this(baseUrl, createDefaultProperties());
-    }
-
-    /**
-     * Makes an HTTP multipart POST request with given file.
-     * 
-     * @param seqFile file to be uploaded
-     * @param service service to be used for upload
-     * @return the server's response to the request depending on the service (path to output image or sequence in genebank format)
-     */
-    // Synchronization is needed because PlasMapper servlet is not thread safe (see LMS-2086)
-    public synchronized String upload(File seqFile, PlasMapperService service)
-    {
-        String url = baseUrl + service.getServletPath();
-        try
-        {
-            HttpClient httpClient = JettyHttpClientFactory.getHttpClient();
-            Request request = httpClient.newRequest(url).method("POST");
-            for (Enumeration<?> enumeration = properties.propertyNames(); enumeration.hasMoreElements();)
-            {
-                final String key = (String) enumeration.nextElement();
-                String[] values = properties.getProperty(key).split(LIST_SEPARATOR);
-                for (String value : values)
-                {
-                    request.param(key, StringUtils.trim(value));
-                }
-            }
-            String fileContent = FileUtilities.loadToString(seqFile);
-            ContentProvider content = new StringContentProvider("--" + BOUNDARY + CRLF
-                    + "Content-Disposition: form-data; name=\"" + FILE_PART_NAME + "\"; filename=\""
-                    + seqFile.getName() + "\"" + CRLF
-                    + "Content-Type: application/octet-stream" + CRLF + CRLF
-                    + fileContent + CRLF + "--" + BOUNDARY + "--" + CRLF);
-            request.content(content, "multipart/form-data; boundary=" + BOUNDARY);
-            ContentResponse contentResponse = request.send();
-            String responseAsString = contentResponse.getContentAsString();
-            int status = contentResponse.getStatus();
-            if (status != HttpStatus.Code.OK.getCode())
-            {
-                notificationLog.error("Multipart POST failed: " + status + " " + responseAsString);
-                throw new IOExceptionUnchecked(new IOException("Multipart POST failed: "
-                        + status));
-            }
-            operationLog.info(String.format("Response of %s service: '%s'", service, responseAsString));
-            return responseAsString;
-        } catch (final Exception ex)
-        {
-            throw CheckedExceptionTunnel.wrapIfNecessary(ex);
-        }
-    }
-
-}
diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/yeastlab/ipad/v2/server/IpadYeastlabUtilities.java b/plasmid/source/java/ch/ethz/bsse/cisd/yeastlab/ipad/v2/server/IpadYeastlabUtilities.java
deleted file mode 100644
index af13e83aea2792adb188877840fcac6093b89643..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/ethz/bsse/cisd/yeastlab/ipad/v2/server/IpadYeastlabUtilities.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2013 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.yeastlab.ipad.v2.server;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import ch.systemsx.cisd.etlserver.registrator.api.v1.ISample;
-import ch.systemsx.cisd.openbis.ipad.v2.server.IpadServiceUtilities;
-
-/**
- * @author cramakri
- */
-public class IpadYeastlabUtilities
-{
-
-    /**
-     * Return a collection of properties, ordered by display ordering, skipping propsToIgnore.
-     */
-    public static List<String> orderedPropertiesForSampleIgnoring(ISample sample,
-            List<String> propsToIgnore)
-    {
-        return null;
-    }
-
-    /**
-     * Convert a sample to a dictionary, ignoring the specified properties.
-     * <p>
-     * <ul>
-     * <li>Uses the NAME property to construct the summary.</li>
-     * <li>Returns empty children.</li>
-     * <li>Callers may need to modify the summary and children as well</li>
-     * </ul>
-     */
-    public static Map<String, Object> samplToDictWithPropsIgnoring(ISample sample,
-            boolean wantProps, List<String> propsToIgnore)
-    {
-        HashMap<String, Object> sampleDict = new HashMap<String, Object>();
-        sampleDict.put("SUMMARY_HEADER", sample.getCode());
-        String name = sample.getPropertyValue("NAME");
-        String summary = (null != name) ? "Name: " + name : "??";
-        sampleDict.put("SUMMARY", summary);
-        sampleDict.put("IDENTIFIER", sample.getSampleIdentifier());
-        sampleDict.put("PERM_ID", sample.getPermId());
-
-        HashMap<String, String> refconSample = new HashMap<String, String>();
-        refconSample.put("code", sample.getCode());
-        refconSample.put("entityKind", "SAMPLE");
-        refconSample.put("entityType", sample.getSampleType());
-        sampleDict.put("REFCON", IpadServiceUtilities.jsonEncodedValue(refconSample));
-        sampleDict.put("CATEGORY", sample.getSampleType());
-        sampleDict.put("CHILDREN", IpadServiceUtilities.jsonEncodedValue(Collections.emptyList()));
-
-        if (wantProps)
-        {
-            List<String> sampleProperties =
-                    orderedPropertiesForSampleIgnoring(sample, propsToIgnore);
-            sampleDict.put("PROPERTIES", IpadServiceUtilities.jsonEncodedValue(sampleProperties));
-        }
-
-        sampleDict.put("ROOT_LEVEL", false);
-        return sampleDict;
-    }
-}
diff --git a/plasmid/source/java/ch/systemsx/cisd/plasmid/BuildAndEnvironmentInfo.java b/plasmid/source/java/ch/systemsx/cisd/plasmid/BuildAndEnvironmentInfo.java
deleted file mode 100644
index 182552491597084204def8efea52a2b6ccd005eb..0000000000000000000000000000000000000000
--- a/plasmid/source/java/ch/systemsx/cisd/plasmid/BuildAndEnvironmentInfo.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2009 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.systemsx.cisd.plasmid;
-
-import ch.systemsx.cisd.base.utilities.AbstractBuildAndEnvironmentInfo;
-
-/**
- * The build and environment information for PLASMID.
- * 
- * @author Piotr Buczek
- */
-public class BuildAndEnvironmentInfo extends AbstractBuildAndEnvironmentInfo
-{
-    private final static String BASE = "plasmid";
-
-    public final static BuildAndEnvironmentInfo INSTANCE = new BuildAndEnvironmentInfo();
-
-    private BuildAndEnvironmentInfo()
-    {
-        super(BASE);
-    }
-
-    /**
-     * Shows build and environment information on the console.
-     */
-    public static void main(String[] args)
-    {
-        System.out.println(INSTANCE);
-    }
-
-}
diff --git a/plasmid/sourceTest/java/ch/ethz/bsse/cisd/plasmid/DependencyCheckingTest.java b/plasmid/sourceTest/java/ch/ethz/bsse/cisd/plasmid/DependencyCheckingTest.java
deleted file mode 100644
index c99c167fd6d9b3843df31af02873bbb54250c018..0000000000000000000000000000000000000000
--- a/plasmid/sourceTest/java/ch/ethz/bsse/cisd/plasmid/DependencyCheckingTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2011 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class DependencyCheckingTest extends ch.systemsx.cisd.common.test.DependencyCheckingTest
-{
-
-}
diff --git a/plasmid/sourceTest/java/ch/ethz/bsse/cisd/plasmid/dss/DataSetTypeOracleTest.java b/plasmid/sourceTest/java/ch/ethz/bsse/cisd/plasmid/dss/DataSetTypeOracleTest.java
deleted file mode 100644
index 6eb6b8a3bad3d54f86197edb6383997820679859..0000000000000000000000000000000000000000
--- a/plasmid/sourceTest/java/ch/ethz/bsse/cisd/plasmid/dss/DataSetTypeOracleTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2010 ETH Zuerich, CISD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.bsse.cisd.plasmid.dss;
-
-import java.io.File;
-import java.util.Properties;
-
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import ch.ethz.bsse.cisd.plasmid.dss.DataSetTypeOracle.DataSetTypeInfo;
-import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
-
-/**
- * @author Piotr Buczek
- */
-public class DataSetTypeOracleTest extends AbstractFileSystemTestCase
-{
-    private static final String MAPPING = "SEQ_FILE: gb fasta xdna, RAW_DATA: ab1";
-
-    @DataProvider(name = "files")
-    protected Object[][] files()
-    {
-        return new Object[][]
-        {
-                { "PRS316.gb", DataSetTypeInfo.SEQ_FILE },
-                { "PRS316.fasta", DataSetTypeInfo.SEQ_FILE },
-                { "PRS316.xdna", DataSetTypeInfo.SEQ_FILE },
-                { "PRS316-1.ab1", DataSetTypeInfo.RAW_DATA },
-                { "PRS316-2.ab1", DataSetTypeInfo.RAW_DATA },
-                { "PRS316-3.ab1", DataSetTypeInfo.RAW_DATA },
-                { "PRS316.png", DataSetTypeInfo.VERIFICATION },
-                { "PRS316.tiff", DataSetTypeInfo.VERIFICATION }
-
-        };
-    }
-
-    private static Properties prepareProperties(String typeMapping)
-    {
-        Properties result = new Properties();
-        result.put(DataSetTypeOracle.DATASET_TYPES_NAME, typeMapping);
-        return result;
-    }
-
-    @Test(dataProvider = "files")
-    public void testFile(String filename, DataSetTypeInfo expectedInfo)
-    {
-        File file = new File(workingDirectory, filename);
-        DataSetTypeOracle.initializeMapping(prepareProperties(MAPPING));
-
-        DataSetTypeInfo info = DataSetTypeOracle.extractDataSetTypeInfo(file);
-        assertEquals(expectedInfo, info);
-        assertEquals(info != DataSetTypeInfo.SEQ_FILE, info.isMeasured());
-    }
-
-    public void testDirectory()
-    {
-        DataSetTypeInfo info = DataSetTypeOracle.extractDataSetTypeInfo(workingDirectory);
-        assertEquals(DataSetTypeInfo.UNKNOWN, info);
-    }
-
-}
diff --git a/plasmid/sourceTest/java/tests.xml b/plasmid/sourceTest/java/tests.xml
deleted file mode 100644
index dfe66878db83678109743fd86955b9fd851325e5..0000000000000000000000000000000000000000
--- a/plasmid/sourceTest/java/tests.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
-
-<suite name="All" verbose="1">
-    <test name="All">
-        <groups>
-            <run>
-                <exclude name="broken" />
-            </run>
-        </groups>
-        <packages>
-            <package name="ch.ethz.bsse.cisd.plasmid.dss.*" />
-        </packages>
-    </test>
-</suite>
diff --git a/rtd_cina/settings.gradle b/rtd_cina/settings.gradle
index 733f3175645e7d0db57c08df98e8609ccc1b0c59..8d78fd7573d94892c5703815b71eed16fec19da5 100644
--- a/rtd_cina/settings.gradle
+++ b/rtd_cina/settings.gradle
@@ -1,3 +1,3 @@
 includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 
-    'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'plasmid', 'openbis_standard_technologies', 
+    'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'openbis_standard_technologies',
     'big_data_link_server', 'openbis_ng_ui', 'microservice_server_template'
diff --git a/ui-test/settings.gradle b/ui-test/settings.gradle
index 4b1ece93db3486a9dd1438328712a221f60c1782..52e5be4efd635debe99b119accf34ddabc9d9b44 100644
--- a/ui-test/settings.gradle
+++ b/ui-test/settings.gradle
@@ -1,2 +1,2 @@
-includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis', 
-    'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'plasmid', 'openbis_standard_technologies'
+includeFlat 'commonbase', 'common', 'openbis_api', 'openbis-common', 'authentication', 'dbmigration', 'openbis',
+        'datastore_server', 'screening', 'rtd_yeastx', 'deep_sequencing_unit', 'openbis_standard_technologies'